Improvements for the window focus
This commit is contained in:
parent
4ba7af7cdc
commit
cb468c59d2
|
@ -1,4 +1,7 @@
|
|||
2016-07-23 Markus Gans <guru.mail@muenster.de>
|
||||
2016-07-25 Markus Gans <guru.mail@muenster.de>
|
||||
* Improvements for the window focus
|
||||
|
||||
2016-07-24 Markus Gans <guru.mail@muenster.de>
|
||||
* Add missing null pointer check in FOptiAttr before dereferencing
|
||||
* Remove callbacks and accelerator keys from FDialogListMenu
|
||||
on closing of a dialog window
|
||||
|
|
18
src/fapp.cpp
18
src/fapp.cpp
|
@ -399,14 +399,22 @@ void FApplication::processKeyboardEvent()
|
|||
accpt = processDialogSwitchAccelerator();
|
||||
|
||||
// windows keyboard accelerator
|
||||
if ( ! accpt )
|
||||
{
|
||||
FWidget* window = static_cast<FWidget*>(active_window);
|
||||
|
||||
if ( window && ! accpt )
|
||||
if ( window )
|
||||
accpt = processAccelerator (window);
|
||||
}
|
||||
|
||||
// global keyboard accelerator
|
||||
if ( ! accpt )
|
||||
accpt = processAccelerator (getRootWidget());
|
||||
{
|
||||
FWidget* root_widget = getRootWidget();
|
||||
|
||||
if ( root_widget )
|
||||
accpt = processAccelerator (root_widget);
|
||||
}
|
||||
}
|
||||
} // end of else
|
||||
}
|
||||
|
@ -737,7 +745,7 @@ bool FApplication::processDialogSwitchAccelerator()
|
|||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
bool FApplication::processAccelerator (FWidget* widget)
|
||||
bool FApplication::processAccelerator (FWidget*& widget)
|
||||
{
|
||||
bool accpt = false;
|
||||
|
||||
|
@ -1480,9 +1488,11 @@ void FApplication::processMouseEvent()
|
|||
, *mouse
|
||||
, fc::LeftButton | key_state );
|
||||
FWidget* released_widget = clicked_widget;
|
||||
|
||||
if ( b_state.right_button != Pressed
|
||||
&& b_state.middle_button != Pressed )
|
||||
clicked_widget = 0;
|
||||
|
||||
sendEvent (released_widget, &m_up_ev);
|
||||
}
|
||||
|
||||
|
@ -1501,9 +1511,11 @@ void FApplication::processMouseEvent()
|
|||
, *mouse
|
||||
, fc::RightButton | key_state );
|
||||
FWidget* released_widget = clicked_widget;
|
||||
|
||||
if ( b_state.left_button != Pressed
|
||||
&& b_state.middle_button != Pressed )
|
||||
clicked_widget = 0;
|
||||
|
||||
sendEvent (released_widget, &m_up_ev);
|
||||
}
|
||||
|
||||
|
|
|
@ -126,7 +126,7 @@ class FApplication : public FWidget
|
|||
void processKeyboardEvent();
|
||||
int modifierKeyCorrection (int& key);
|
||||
bool processDialogSwitchAccelerator();
|
||||
bool processAccelerator (FWidget*);
|
||||
bool processAccelerator (FWidget*&);
|
||||
void getX11ButtonState (int);
|
||||
bool parseX11Mouse();
|
||||
bool parseSGRMouse();
|
||||
|
|
103
src/fdialog.cpp
103
src/fdialog.cpp
|
@ -582,26 +582,7 @@ void FDialog::onMouseDown (FMouseEvent* ev)
|
|||
has_raised = raiseWindow();
|
||||
|
||||
if ( ! isActiveWindow() )
|
||||
{
|
||||
FWidget* old_focus = FWidget::getFocusWidget();
|
||||
setActiveWindow(this);
|
||||
|
||||
if ( focus_widget && numOfFocusableChildren() > 1 )
|
||||
{
|
||||
focus_widget->setFocus();
|
||||
focus_widget->redraw();
|
||||
|
||||
if ( old_focus )
|
||||
old_focus->redraw();
|
||||
}
|
||||
else if ( old_focus && focusFirstChild() )
|
||||
old_focus->redraw();
|
||||
|
||||
if ( statusBar() )
|
||||
statusBar()->drawMessage();
|
||||
|
||||
updateTerminal();
|
||||
}
|
||||
activateDialog();
|
||||
|
||||
if ( has_raised )
|
||||
redraw();
|
||||
|
@ -635,26 +616,7 @@ void FDialog::onMouseDown (FMouseEvent* ev)
|
|||
if ( mouse_x >= 4 && mouse_x <= width && mouse_y == 1 )
|
||||
{
|
||||
if ( ! isActiveWindow() )
|
||||
{
|
||||
FWidget* old_focus = FWidget::getFocusWidget();
|
||||
setActiveWindow(this);
|
||||
|
||||
if ( focus_widget && numOfFocusableChildren() > 1 )
|
||||
{
|
||||
focus_widget->setFocus();
|
||||
focus_widget->redraw();
|
||||
|
||||
if ( old_focus )
|
||||
old_focus->redraw();
|
||||
}
|
||||
else if ( old_focus && focusFirstChild() )
|
||||
old_focus->redraw();
|
||||
|
||||
if ( statusBar() )
|
||||
statusBar()->drawMessage();
|
||||
|
||||
updateTerminal();
|
||||
}
|
||||
activateDialog();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -666,26 +628,7 @@ void FDialog::onMouseDown (FMouseEvent* ev)
|
|||
bool has_lowered = lowerWindow();
|
||||
|
||||
if ( ! isActiveWindow() )
|
||||
{
|
||||
FWidget* old_focus = FWidget::getFocusWidget();
|
||||
setActiveWindow(this);
|
||||
|
||||
if ( focus_widget && numOfFocusableChildren() > 1 )
|
||||
{
|
||||
focus_widget->setFocus();
|
||||
focus_widget->redraw();
|
||||
|
||||
if ( old_focus )
|
||||
old_focus->redraw();
|
||||
}
|
||||
else if ( old_focus && focusFirstChild() )
|
||||
old_focus->redraw();
|
||||
|
||||
if ( statusBar() )
|
||||
statusBar()->drawMessage();
|
||||
|
||||
updateTerminal();
|
||||
}
|
||||
activateDialog();
|
||||
else if ( has_lowered )
|
||||
updateTerminal();
|
||||
}
|
||||
|
@ -804,15 +747,15 @@ void FDialog::onMouseDoubleClick (FMouseEvent* ev)
|
|||
//----------------------------------------------------------------------
|
||||
void FDialog::onAccel (FAccelEvent*)
|
||||
{
|
||||
if ( ! this->isHiddenWindow() && ! this->isActiveWindow() )
|
||||
if ( ! isHiddenWindow() && ! isActiveWindow() )
|
||||
{
|
||||
FWindow::setActiveWindow(this);
|
||||
FWindow::raiseWindow (this);
|
||||
bool has_raised = raiseWindow();
|
||||
activateDialog();
|
||||
|
||||
if ( focus_widget )
|
||||
focus_widget->setFocus();
|
||||
if ( has_raised )
|
||||
redraw();
|
||||
|
||||
this->redraw();
|
||||
updateTerminal();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1066,6 +1009,34 @@ void FDialog::move (int x, int y)
|
|||
updateTerminal();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FDialog::activateDialog()
|
||||
{
|
||||
FWidget* old_focus = FWidget::getFocusWidget();
|
||||
setActiveWindow(this);
|
||||
|
||||
if ( focus_widget && numOfFocusableChildren() > 1 )
|
||||
{
|
||||
focus_widget->setFocus();
|
||||
focus_widget->redraw();
|
||||
|
||||
if ( old_focus )
|
||||
old_focus->redraw();
|
||||
}
|
||||
else if ( old_focus )
|
||||
{
|
||||
if ( ! focusFirstChild() )
|
||||
old_focus->unsetFocus();
|
||||
|
||||
old_focus->redraw();
|
||||
}
|
||||
|
||||
if ( statusBar() )
|
||||
statusBar()->drawMessage();
|
||||
|
||||
updateTerminal();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
void FDialog::setWidth (int w, bool adjust)
|
||||
{
|
||||
|
|
|
@ -93,13 +93,14 @@ class FDialog : public FWindow
|
|||
void onWindowInactive (FEvent*);
|
||||
void onWindowRaised (FEvent*);
|
||||
void onWindowLowered (FEvent*);
|
||||
|
||||
void activateDialog();
|
||||
void drawDialogShadow();
|
||||
void show();
|
||||
void hide();
|
||||
int exec();
|
||||
void move (const FPoint&);
|
||||
void move (int, int);
|
||||
|
||||
void setWidth (int, bool = true);
|
||||
void setHeight (int, bool = true);
|
||||
// make every setGeometry from FWidget available
|
||||
|
|
|
@ -301,16 +301,11 @@ void FMenuItem::cb_switchToDialog (FWidget*, void* data_ptr)
|
|||
{
|
||||
FDialog* win = static_cast<FDialog*>(data_ptr);
|
||||
|
||||
if ( win && ! win->isHiddenWindow() && ! win->isActiveWindow() )
|
||||
if ( win )
|
||||
{
|
||||
FWindow::setActiveWindow(win);
|
||||
FWidget* focus_widget = win->getFocusWidget();
|
||||
FWindow::raiseWindow (win);
|
||||
|
||||
if ( focus_widget )
|
||||
focus_widget->setFocus();
|
||||
|
||||
win->redraw();
|
||||
FWidget* focus_widget = getFocusWidget();
|
||||
FAccelEvent a_ev (fc::Accelerator_Event, focus_widget);
|
||||
FApplication::sendEvent (win, &a_ev);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue