Fix method setPos in the class FRect

This commit is contained in:
Markus Gans 2016-07-31 20:25:25 +02:00
parent d5685aaafc
commit 0ad1228b1a
10 changed files with 70 additions and 48 deletions

View File

@ -1,3 +1,9 @@
2016-07-31 Markus Gans <guru.mail@muenster.de>
* Resetting the local window widget focus at
the end of the lifetime of a widget.
* Fix method setPos in the class FRect
* Add the windows example to show window behavior
2016-07-30 Markus Gans <guru.mail@muenster.de> 2016-07-30 Markus Gans <guru.mail@muenster.de>
* Delete all callbacks from a widget with delCallbacks() * Delete all callbacks from a widget with delCallbacks()
* Remove dialog list item callback from the associated window * Remove dialog list item callback from the associated window

View File

@ -321,42 +321,42 @@ void FApplication::processKeyboardEvent()
// Remove founded entry // Remove founded entry
for (n=len; n < fifo_buf_size; n++) for (n=len; n < fifo_buf_size; n++)
fifo_buf[n-len] = fifo_buf[n]; fifo_buf[n-len] = fifo_buf[n];
n = fifo_buf_size-len-1; n = fifo_buf_size-len-1;
// Fill rest with '\0' // Fill rest with '\0'
for (; n < fifo_buf_size; n++) for (; n < fifo_buf_size; n++)
fifo_buf[n-len] = '\0'; fifo_buf[n-len] = '\0';
input_data_pending = bool(fifo_buf[0] != '\0'); input_data_pending = bool(fifo_buf[0] != '\0');
processMouseEvent(); processMouseEvent();
} }
break; break;
case fc::Fkey_extended_mouse: case fc::Fkey_extended_mouse:
{ {
int n = 3; int n = 3;
int len = int(strlen(fifo_buf)); int len = int(strlen(fifo_buf));
while ( n < len && n < fifo_buf_size ) while ( n < len && n < fifo_buf_size )
{ {
sgr_mouse[n-3] = fifo_buf[n]; sgr_mouse[n-3] = fifo_buf[n];
n++; n++;
if ( fifo_buf[n] == 'M' || fifo_buf[n] == 'm' ) if ( fifo_buf[n] == 'M' || fifo_buf[n] == 'm' )
len = n + 1; len = n + 1;
} }
sgr_mouse[n-3] = '\0'; sgr_mouse[n-3] = '\0';
for (n=len; n < fifo_buf_size; n++) // Remove founded entry for (n=len; n < fifo_buf_size; n++) // Remove founded entry
fifo_buf[n-len] = fifo_buf[n]; fifo_buf[n-len] = fifo_buf[n];
n = fifo_buf_size-len-1; n = fifo_buf_size-len-1;
for (; n < fifo_buf_size; n++) // Fill rest with '\0' for (; n < fifo_buf_size; n++) // Fill rest with '\0'
fifo_buf[n-len] = '\0'; fifo_buf[n-len] = '\0';
input_data_pending = bool(fifo_buf[0] != '\0'); input_data_pending = bool(fifo_buf[0] != '\0');
processMouseEvent(); processMouseEvent();
} }
@ -366,26 +366,26 @@ void FApplication::processKeyboardEvent()
{ {
int n = 2; int n = 2;
int len = int(strlen(fifo_buf)); int len = int(strlen(fifo_buf));
while ( n < len && n < fifo_buf_size ) while ( n < len && n < fifo_buf_size )
{ {
urxvt_mouse[n-2] = fifo_buf[n]; urxvt_mouse[n-2] = fifo_buf[n];
n++; n++;
if ( fifo_buf[n] == 'M' || fifo_buf[n] == 'm' ) if ( fifo_buf[n] == 'M' || fifo_buf[n] == 'm' )
len = n + 1; len = n + 1;
} }
urxvt_mouse[n-2] = '\0'; urxvt_mouse[n-2] = '\0';
for (n=len; n < fifo_buf_size; n++) // Remove founded entry for (n=len; n < fifo_buf_size; n++) // Remove founded entry
fifo_buf[n-len] = fifo_buf[n]; fifo_buf[n-len] = fifo_buf[n];
n = fifo_buf_size-len-1; n = fifo_buf_size-len-1;
for (; n < fifo_buf_size; n++) // Fill rest with '\0' for (; n < fifo_buf_size; n++) // Fill rest with '\0'
fifo_buf[n-len] = '\0'; fifo_buf[n-len] = '\0';
input_data_pending = bool(fifo_buf[0] != '\0'); input_data_pending = bool(fifo_buf[0] != '\0');
processMouseEvent(); processMouseEvent();
} }
@ -396,11 +396,11 @@ void FApplication::processKeyboardEvent()
// send key down event // send key down event
FKeyEvent k_down_ev (fc::KeyDown_Event, key); FKeyEvent k_down_ev (fc::KeyDown_Event, key);
sendEvent (widget, &k_down_ev); sendEvent (widget, &k_down_ev);
// send key press event // send key press event
FKeyEvent k_press_ev (fc::KeyPress_Event, key); FKeyEvent k_press_ev (fc::KeyPress_Event, key);
sendEvent (widget, &k_press_ev); sendEvent (widget, &k_press_ev);
if ( ! open_menu if ( ! open_menu
&& ! k_press_ev.isAccepted() && ! k_press_ev.isAccepted()
&& ! k_down_ev.isAccepted() ) && ! k_down_ev.isAccepted() )
@ -409,21 +409,21 @@ void FApplication::processKeyboardEvent()
// switch to a specific dialog with Meta + 1..9 // switch to a specific dialog with Meta + 1..9
if ( ! accpt ) if ( ! accpt )
accpt = processDialogSwitchAccelerator(); accpt = processDialogSwitchAccelerator();
// windows keyboard accelerator // windows keyboard accelerator
if ( ! accpt ) if ( ! accpt )
{ {
FWidget* window = static_cast<FWidget*>(active_window); FWidget* window = static_cast<FWidget*>(active_window);
if ( window ) if ( window )
accpt = processAccelerator (window); accpt = processAccelerator (window);
} }
// global keyboard accelerator // global keyboard accelerator
if ( ! accpt ) if ( ! accpt )
{ {
FWidget* root_widget = getRootWidget(); FWidget* root_widget = getRootWidget();
if ( root_widget ) if ( root_widget )
accpt = processAccelerator (root_widget); accpt = processAccelerator (root_widget);
} }

View File

@ -475,8 +475,7 @@ void FFileDialog::adjustSize()
setHeight (h, false); setHeight (h, false);
X = 1 + int((max_width-width)/2); X = 1 + int((max_width-width)/2);
Y = 1 + int((max_height-height)/3); Y = 1 + int((max_height-height)/3);
setX(X, false); setPos(X, Y, false);
setY(Y, false);
filebrowser->setHeight(h-8, false); filebrowser->setHeight(h-8, false);
hidden->setY(h-4, false); hidden->setY(h-4, false);
cancel->setY(h-4, false); cancel->setY(h-4, false);

View File

@ -76,8 +76,11 @@ FMenu::~FMenu()
delWindow(this); delWindow(this);
const FRect& geometry = getGeometryGlobalShadow(); if ( ! fapp->isQuit() )
restoreVTerm (geometry); {
const FRect& geometry = getGeometryGlobalShadow();
restoreVTerm (geometry);
}
if ( vwin != 0 ) if ( vwin != 0 )
{ {

View File

@ -299,7 +299,7 @@ void FMenuItem::createDialogList (FMenu* winmenu)
"destroy", "destroy",
_METHOD_CALLBACK (win_item, &FMenuItem::cb_destroyDialog) _METHOD_CALLBACK (win_item, &FMenuItem::cb_destroyDialog)
); );
win_item->associated_window = win; win_item->associated_window = win;
} }

View File

@ -126,8 +126,7 @@ void FMessageBox::init(int button0, int button1, int button2)
button[0] = new FButton (this); button[0] = new FButton (this);
button[0]->setText(button_text[button0]); button[0]->setText(button_text[button0]);
button[0]->setX(3, false); button[0]->setPos(3, height-4, false);
button[0]->setY(height-4, false);
button[0]->setWidth(1, false); button[0]->setWidth(1, false);
button[0]->setHeight(1, false); button[0]->setHeight(1, false);
button[0]->setFocus(); button[0]->setFocus();
@ -137,8 +136,7 @@ void FMessageBox::init(int button0, int button1, int button2)
{ {
button[1] = new FButton(this); button[1] = new FButton(this);
button[1]->setText(button_text[button1]); button[1]->setText(button_text[button1]);
button[1]->setX(17, false); button[1]->setPos(17, height-4, false);
button[1]->setY(height-4, false);
button[1]->setWidth(0, false); button[1]->setWidth(0, false);
button[1]->setHeight(1, false); button[1]->setHeight(1, false);
button[1]->setShadow(); button[1]->setShadow();
@ -148,8 +146,7 @@ void FMessageBox::init(int button0, int button1, int button2)
{ {
button[2] = new FButton(this); button[2] = new FButton(this);
button[2]->setText(button_text[button2]); button[2]->setText(button_text[button2]);
button[2]->setX(32, false); button[2]->setPos(32, height-4, false);
button[2]->setY(height-4, false);
button[2]->setWidth(0, false); button[2]->setWidth(0, false);
button[2]->setHeight(1, false); button[2]->setHeight(1, false);
button[2]->setShadow(); button[2]->setShadow();
@ -318,7 +315,7 @@ void FMessageBox::adjustButtons()
{ {
setWidth(btn_width + 5); setWidth(btn_width + 5);
int max_width = getRootWidget()->getClientWidth(); int max_width = getRootWidget()->getClientWidth();
setX(int((max_width-width) / 2)); setX (int((max_width-width) / 2));
} }
int btn_x = int((width-btn_width) / 2); int btn_x = int((width-btn_width) / 2);
@ -352,8 +349,7 @@ void FMessageBox::adjustSize()
max_width = getRootWidget()->getClientWidth(); max_width = getRootWidget()->getClientWidth();
X = 1 + int((max_width-width)/2); X = 1 + int((max_width-width)/2);
Y = 1 + int((max_height-height)/3); Y = 1 + int((max_height-height)/3);
setX(X, false); setPos(X, Y, false);
setY(Y, false);
FDialog::adjustSize(); FDialog::adjustSize();
} }

View File

@ -70,15 +70,23 @@ void FRect::setY (int n)
//---------------------------------------------------------------------- //----------------------------------------------------------------------
void FRect::setPos (int x, int y) void FRect::setPos (int x, int y)
{ {
short dX = short(X2 - X1);
short dY = short(Y2 - Y1);
X1 = short(x); X1 = short(x);
Y1 = short(y); Y1 = short(y);
X2 = short(X1 + dX);
Y2 = short(Y1 + dY);
} }
//---------------------------------------------------------------------- //----------------------------------------------------------------------
void FRect::setPos (const FPoint& p) void FRect::setPos (const FPoint& p)
{ {
short dX = short(X2 - X1);
short dY = short(Y2 - Y1);
X1 = short(p.getX()); X1 = short(p.getX());
Y1 = short(p.getY()); Y1 = short(p.getY());
X2 = short(X1 + dX);
Y2 = short(Y1 + dY);
} }
//---------------------------------------------------------------------- //----------------------------------------------------------------------

View File

@ -3015,8 +3015,7 @@ void FTerm::getTermSize()
if ( ret != 0 || win_size.ws_col == 0 || win_size.ws_row == 0 ) if ( ret != 0 || win_size.ws_col == 0 || win_size.ws_row == 0 )
{ {
char* str; char* str;
term->setX(1); term->setPos(1,1);
term->setY(1);
str = getenv("COLUMNS"); str = getenv("COLUMNS");
term->setWidth(str ? atoi(str) : 80); term->setWidth(str ? atoi(str) : 80);
str = getenv("LINES"); str = getenv("LINES");

View File

@ -106,18 +106,30 @@ FWidget::~FWidget() // destructor
processDestroy(); processDestroy();
FApplication::removeQueuedEvent(this); FApplication::removeQueuedEvent(this);
// unset clicked widget
if ( this == getClickedWidget() ) if ( this == getClickedWidget() )
setClickedWidget(0); setClickedWidget(0);
// unset the local window widget focus
if ( focus )
{
FWindow* window = FWindow::getWindowWidget(this);
if ( window )
window->setWindowFocusWidget(0);
}
// unset the global widget focus
if ( this == FWidget::getFocusWidget() ) if ( this == FWidget::getFocusWidget() )
FWidget::setFocusWidget(0); FWidget::setFocusWidget(0);
// unset main widget
if ( this == getMainWidget() ) if ( this == getMainWidget() )
{ {
setMainWidget(0); setMainWidget(0);
quit(); quit();
} }
// finish the program
if ( rootObject == this ) if ( rootObject == this )
this->finish(); this->finish();
} }
@ -1881,13 +1893,10 @@ void FWidget::move (int x, int y)
xpos = x; xpos = x;
ypos = y; ypos = y;
widgetSize.setX(x); widgetSize.setPos(x,y);
widgetSize.setY(y); adjustWidgetSize.setPos(x,y);
adjustWidgetSize.setX(x);
adjustWidgetSize.setY(y);
adjustWidgetSizeShadow = adjustWidgetSize + shadow; adjustWidgetSizeShadow = adjustWidgetSize + shadow;
adjustWidgetSizeGlobal.setX(x + xmin - 1); adjustWidgetSizeGlobal.setPos(x + xmin - 1, y + ymin - 1);
adjustWidgetSizeGlobal.setY(y + ymin - 1);
adjustWidgetSizeGlobalShadow = adjustWidgetSizeGlobal + shadow; adjustWidgetSizeGlobalShadow = adjustWidgetSizeGlobal + shadow;
} }

View File

@ -411,10 +411,12 @@ void FWindow::switchToPrevWindow()
if ( ! active_window->isActiveWindow() ) if ( ! active_window->isActiveWindow() )
setActiveWindow(active_window); setActiveWindow(active_window);
if ( focus_widget && ! focus_widget->isWindow() ) if ( focus_widget )
{ {
focus_widget->setFocus(); focus_widget->setFocus();
focus_widget->redraw();
if ( ! focus_widget->isWindow() )
focus_widget->redraw();
} }
} }
} }