* BUG: Embedded windows can now be reparented to NULL to become top-level 
  again.
* BUG: Showing a top-level window now raises it automatically.


git-svn-id: svn://localhost/gambas/trunk@6280 867c0c6c-44f3-4631-809d-bfa615b0a4ec
This commit is contained in:
Benoît Minisini 2014-05-19 16:00:32 +00:00
parent ff0b3750dc
commit 9f5c1f4bd6
5 changed files with 31 additions and 12 deletions

View file

@ -137,12 +137,12 @@ static void cb_hide(gMenu *sender)
GB.Raise(THIS, EVENT_Hide, 0);
}
BEGIN_METHOD_VOID(CMENU_init)
/*BEGIN_METHOD_VOID(CMENU_init)
CLASS_Menu = GB.FindClass("Menu");
CLASS_Window = GB.FindClass("Window");
END_METHOD
END_METHOD*/
BEGIN_METHOD(CMENU_new, GB_OBJECT parent; GB_BOOLEAN hidden)
@ -463,7 +463,7 @@ GB_DESC CMenuDesc[] =
GB_DECLARE("Menu", sizeof(CMENU)),
GB_HOOK_CHECK(CMENU_check),
GB_STATIC_METHOD("_init", 0, CMENU_init, 0),
//GB_STATIC_METHOD("_init", 0, CMENU_init, 0),
GB_METHOD("_new", 0, CMENU_new, "(Parent)o[(Hidden)b]"),
GB_METHOD("_free", 0, CMENU_free, 0),

View file

@ -622,11 +622,14 @@ END_METHOD
BEGIN_METHOD(CWIDGET_reparent, GB_OBJECT parent; GB_INTEGER x; GB_INTEGER y)
CCONTAINER *parent=(CCONTAINER*)VARG(parent);
CCONTAINER *parent = (CCONTAINER*)VARG(parent);
int x, y;
if (GB.CheckObject(parent))
return;
if (parent || !GB.Is(THIS, CLASS_Window))
{
if (GB.CheckObject(parent))
return;
}
x = CONTROL->x();
y = CONTROL->y();
@ -637,7 +640,7 @@ BEGIN_METHOD(CWIDGET_reparent, GB_OBJECT parent; GB_INTEGER x; GB_INTEGER y)
y = VARG(y);
}
CONTROL->reparent((gContainer*)parent->ob.widget, x, y);
CONTROL->reparent(parent ? (gContainer*)parent->ob.widget : NULL, x, y);
END_METHOD

View file

@ -395,7 +395,7 @@ END_METHOD
BEGIN_METHOD_VOID(CWINDOW_show)
WINDOW->show();
WINDOW->showActivate();
END_METHOD

View file

@ -787,6 +787,15 @@ void gMainWindow::showPopup(int x, int y)
}
}
void gMainWindow::showActivate()
{
bool v = isTopLevel() && isVisible();
show();
if (v)
gtk_window_present(GTK_WINDOW(border));
}
void gMainWindow::showPopup()
{
int x, y;
@ -1163,6 +1172,7 @@ void gMainWindow::reparent(gContainer *newpr, int x, int y)
w = width();
h = height();
bufW = bufH = -1;
gtk_widget_set_size_request(border, 1, 1);
resize(w, h);
hideHiddenChildren();
@ -1307,9 +1317,9 @@ void gMainWindow::setActiveWindow(gControl *control)
}
#ifdef GDK_WINDOWING_X11
bool gMainWindow::isUtility()
bool gMainWindow::isUtility() const
{
return gtk_window_get_type_hint(GTK_WINDOW(border)) == GDK_WINDOW_TYPE_HINT_UTILITY;
return _utility;
}
void gMainWindow::setUtility(bool v)
@ -1317,16 +1327,20 @@ void gMainWindow::setUtility(bool v)
if (!isTopLevel())
return;
// TODO: works only if the window is not mapped!
_utility = v;
gtk_window_set_type_hint(GTK_WINDOW(border), v ? GDK_WINDOW_TYPE_HINT_UTILITY : GDK_WINDOW_TYPE_HINT_NORMAL);
}
#else
bool gMainWindow::isUtility()
{
return false;
return _utility;
}
void gMainWindow::setUtility(bool v)
{
_utility = v;
}
#endif

View file

@ -36,7 +36,7 @@ public:
//"Properties"
bool hasBorder();
bool isResizable();
bool isUtility();
bool isUtility() const;
gPicture *icon() { return _icon; }
gPicture *picture() { return _picture; }
bool mask() { return _mask; }
@ -100,6 +100,7 @@ public:
//"Methods"
void center();
void showActivate();
void showModal();
void showPopup();
void showPopup(int x, int y);
@ -182,6 +183,7 @@ public:
unsigned _maximized : 1;
unsigned _minimized : 1;
unsigned _fullscreen : 1;
unsigned _utility : 1;
};
#endif