Don't call the event loop after changing Application.Busy, and clicking outside of an opened popup window now automatically closes it.

[GB.GTK]
* BUG: Don't call the event loop after changing Application.Busy.
* NEW: Use gdk_new_cursor_from_name() instead gdk_new_cursor().
* BUG: Clicking outside of an opened popup window now automatically closes it.

[GB.GTK3]
* BUG: Don't call the event loop after changing Application.Busy.
* NEW: Use gdk_new_cursor_from_name() instead gdk_new_cursor().
* BUG: Clicking outside of an opened popup window now automatically closes it.
This commit is contained in:
gambas 2017-10-27 03:25:41 +02:00
parent 6770894884
commit 9fa8e2a5d6
2 changed files with 51 additions and 13 deletions

View file

@ -511,18 +511,11 @@ __FOUND_WIDGET:
case GDK_2BUTTON_PRESS:
case GDK_BUTTON_RELEASE:
{
save_control = control = find_child(control, (int)event->button.x_root, (int)event->button.y_root, button_grab);
/*if (event->type == GDK_BUTTON_PRESS)
fprintf(stderr, "GDK_BUTTON_PRESS: %p / %p\n", control, button_grab);
else if (event->type == GDK_BUTTON_RELEASE)
fprintf(stderr, "GDK_BUTTON_RELEASE: %p / %p\n", control, button_grab);*/
if (!control)
goto __HANDLE_EVENT;
bool menu = false;
switch ((int)event->type)
{
case GDK_BUTTON_PRESS: type = gEvent_MousePress; break;
@ -530,6 +523,24 @@ __FOUND_WIDGET:
default: type = gEvent_MouseRelease; break;
}
save_control = find_child(control, (int)event->button.x_root, (int)event->button.y_root, button_grab);
if (!save_control)
{
if (type == gEvent_MousePress && control->isTopLevel())
{
gMainWindow *win = ((gMainWindow *)control);
if (win->isPopup())
win->close();
}
goto __HANDLE_EVENT;
}
control = save_control;
bool menu = false;
if (event->type != GDK_BUTTON_RELEASE)
{
if (control->canFocus() && !control->hasFocus())
@ -580,7 +591,7 @@ __FOUND_WIDGET:
}
}
if (type == gEvent_MousePress && control->isTopLevel())
/*if (type == gEvent_MousePress && control->isTopLevel())
{
gMainWindow *win = ((gMainWindow *)control);
if (win->isPopup())
@ -595,7 +606,7 @@ __FOUND_WIDGET:
win->close();
}
}
else if (type == gEvent_MouseRelease && control->_grab)
else*/ if (type == gEvent_MouseRelease && control->_grab)
{
gApplication::exitLoop(control);
}
@ -1098,7 +1109,7 @@ void gApplication::setBusy(bool b)
iter = g_list_next(iter);
}
MAIN_do_iteration_just_events();
//MAIN_do_iteration_just_events();
}
static bool _dirty = false;

View file

@ -873,7 +873,7 @@ void gControl::updateCursor(GdkCursor *cursor)
GdkCursor *gControl::getGdkCursor()
{
GdkPixbuf *pix;
const char *name;
GdkCursor *cr = NULL;
int m = _mouse;
@ -888,9 +888,36 @@ GdkCursor *gControl::getGdkCursor()
if (m != CURSOR_DEFAULT)
{
switch(m)
{
case GDK_BLANK_CURSOR: name = "none"; break;
case GDK_LEFT_PTR: name = "default"; break;
case GDK_CROSSHAIR: name = "crosshair"; break;
case GDK_WATCH: name = "wait"; break;
case GDK_XTERM: name = "text"; break;
case GDK_FLEUR: name = "move"; break;
case GDK_SB_H_DOUBLE_ARROW: name = "ew-resize"; break;
case GDK_SB_V_DOUBLE_ARROW: name = "ns-resize"; break;
case GDK_TOP_SIDE: name = "n-resize"; break;
case GDK_BOTTOM_SIDE: name = "s-resize"; break;
case GDK_LEFT_SIDE: name = "w-resize"; break;
case GDK_RIGHT_SIDE: name = "e-resize"; break;
case GDK_TOP_LEFT_CORNER: name = "nw-resize"; break;
case GDK_BOTTOM_RIGHT_CORNER: name = "se-resize"; break;
case GDK_TOP_RIGHT_CORNER: name = "ne-resize"; break;
case GDK_BOTTOM_LEFT_CORNER: name = "sw-resize"; break;
case GDK_LAST_CURSOR+1: name = "nwse-resize"; break;
case GDK_LAST_CURSOR+2: name = "nesw-resize"; break;
case GDK_HAND2: name = "pointer"; break;
default: name = "default";
}
cr = gdk_cursor_new_from_name(gdk_display_get_default(), name);
/*
if (m < GDK_LAST_CURSOR)
{
cr = gdk_cursor_new((GdkCursorType)m);
cr = gdk_cursor_new_for_display(gdk_display_get_default(), (GdkCursorType)m);
}
else
{
@ -906,7 +933,7 @@ GdkCursor *gControl::getGdkCursor()
cr = gdk_cursor_new_from_pixbuf(gdk_display_get_default(), pix, 8, 8);
g_object_unref(pix);
}
}
}*/
}
return cr;