[maemo-commits] [maemo-commits] r19486 - in projects/haf/trunk/gtk+: . gdk/x11
From: subversion at stage.maemo.org subversion at stage.maemo.orgDate: Thu Nov 5 16:26:17 EET 2009
- Next message: [maemo-commits] r19487 - in projects/haf/trunk/gtk+: . debian
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Author: kalikiana Date: 2009-11-05 16:26:12 +0200 (Thu, 05 Nov 2009) New Revision: 19486 Modified: projects/haf/trunk/gtk+/ChangeLog projects/haf/trunk/gtk+/gdk/x11/gdkevents-x11.c projects/haf/trunk/gtk+/gdk/x11/gdkscreen-x11.c Log: 2009-11-05 Christian Dywan <christian at lanedo.com> Fixes: NB#140339 - Unnecessary wake-ups in application due to XAtoms * gdk/x11/gdkevents-x11.c (_gdk_events_init), (gdk_event_translate), (check_net_wm_check_window), (fetch_net_wm_check_window): * gdk/x11/gdkscreen-x11.c (_gdk_x11_screen_size_changed): Monitor _MAEMO_SCREEN_SIZEwhich is an array on the WM window instead of the separate properties on the root window. Based on a patch by Adam Endroi. Modified: projects/haf/trunk/gtk+/ChangeLog =================================================================== --- projects/haf/trunk/gtk+/ChangeLog 2009-10-30 10:02:22 UTC (rev 19485) +++ projects/haf/trunk/gtk+/ChangeLog 2009-11-05 14:26:12 UTC (rev 19486) @@ -1,3 +1,14 @@ +2009-11-05 Christian Dywan <christian at lanedo.com> + + Fixes: NB#140339 - Unnecessary wake-ups in application due to XAtoms + + * gdk/x11/gdkevents-x11.c (_gdk_events_init), + (gdk_event_translate), (check_net_wm_check_window), + (fetch_net_wm_check_window): + * gdk/x11/gdkscreen-x11.c (_gdk_x11_screen_size_changed): Monitor + _MAEMO_SCREEN_SIZEwhich is an array on the WM window instead of the + separate properties on the root window. Based on a patch by Adam Endroi. + 2009-10-26 Christian Dywan <christian at lanedo.com> Fixes: NB#128673 - Virtual keypad opened when not Modified: projects/haf/trunk/gtk+/gdk/x11/gdkevents-x11.c =================================================================== --- projects/haf/trunk/gtk+/gdk/x11/gdkevents-x11.c 2009-10-30 10:02:22 UTC (rev 19485) +++ projects/haf/trunk/gtk+/gdk/x11/gdkevents-x11.c 2009-11-05 14:26:12 UTC (rev 19486) @@ -125,6 +125,9 @@ XSettingsSetting *setting, void *data); +static gboolean check_net_wm_check_window (GdkScreenX11 *screen_x11); +static void fetch_net_wm_check_window (GdkScreen *screen); + /* Private variable declarations */ @@ -232,6 +235,13 @@ gdk_atom_intern_static_string ("WM_PROTOCOLS"), gdk_wm_protocols_filter, NULL); + + /* GdkScreenX11 need this in order to see some properties. */ + fetch_net_wm_check_window (display_x11->default_screen); + if (GDK_SCREEN_X11(display_x11->default_screen)->wmspec_check_window == None) + /* No WM, poll for the wm_check window. */ + g_timeout_add_seconds (10, (GSourceFunc)check_net_wm_check_window, + display_x11->default_screen); } void @@ -1009,6 +1019,10 @@ /* careful, reentrancy */ _gdk_x11_screen_window_manager_changed (GDK_SCREEN (screen_x11)); + + /* Rediscover the WM window. */ + g_timeout_add_seconds (10, (GSourceFunc)check_net_wm_check_window, + screen); } /* Eat events on this window unless someone had wrapped @@ -1912,13 +1926,11 @@ "\"")); #ifdef MAEMO_CHANGES - /* Check for maemo specific width/height change. Height is always - * changed last, so we only check on that. This allows us to relayout - * apps that depend on GdkScreen for orientation, *before* we do the - * real XRandR rotate. + /* Check for maemo specific size change. This allows us to relayout apps + * that depend on GdkScreen for orientation, *before* real XRandR rotate. */ if (xevent->xproperty.atom == - gdk_x11_get_xatom_by_name_for_display (display, "_MAEMO_SCREEN_HEIGHT")) + gdk_x11_get_xatom_by_name_for_display (display, "_MAEMO_SCREEN_SIZE")) { _gdk_x11_screen_size_changed (screen, xevent); } @@ -2616,6 +2628,14 @@ return xevent.xproperty.time; } +static gboolean +check_net_wm_check_window (GdkScreenX11 *screen_x11) +{ + if (screen_x11->wmspec_check_window == None) + fetch_net_wm_check_window (GDK_SCREEN (screen_x11)); + return screen_x11->wmspec_check_window == None; +} + static void fetch_net_wm_check_window (GdkScreen *screen) { @@ -2670,9 +2690,14 @@ if (gdk_error_trap_pop () == Success) { + GdkWindow *window; + + /* We need to create a Gdkwindow in order to notice its destruction. */ screen_x11->wmspec_check_window = *xwindow; screen_x11->need_refetch_net_supported = TRUE; screen_x11->need_refetch_wm_name = TRUE; + window = gdk_window_foreign_new_for_display (display, *xwindow); + gdk_window_set_events (window, GDK_PROPERTY_CHANGE_MASK); /* Careful, reentrancy */ _gdk_x11_screen_window_manager_changed (GDK_SCREEN (screen_x11)); Modified: projects/haf/trunk/gtk+/gdk/x11/gdkscreen-x11.c =================================================================== --- projects/haf/trunk/gtk+/gdk/x11/gdkscreen-x11.c 2009-10-30 10:02:22 UTC (rev 19485) +++ projects/haf/trunk/gtk+/gdk/x11/gdkscreen-x11.c 2009-11-05 14:26:12 UTC (rev 19486) @@ -896,39 +896,37 @@ { gint width, height; #ifdef MAEMO_CHANGES - GdkWindow *root_window; - GdkAtom type; - guchar *rwidth = NULL, *rheight = NULL; - gboolean has_props = FALSE; + GdkDisplay *display; + GdkWindow *window; + gint32 *maemo_screen_size = NULL; #endif /* MAEMO_CHANGES */ width = gdk_screen_get_width (screen); height = gdk_screen_get_height (screen); #ifdef MAEMO_CHANGES - /* The SCREEN_WIDTH/SCREEN_HEIGHT properties allow hildon-desktop to + /* The _MAEMO_SCREEN_SIZE property allows hildon-desktop to * resize/relayout applications to the correct orientation before * XRandR rotation actually happens. */ - root_window = gdk_screen_get_root_window (screen); - type = gdk_atom_intern ("CARDINAL", FALSE); + if (GDK_SCREEN_X11 (screen)->wmspec_check_window == None) + return; - gdk_property_get (root_window, - gdk_atom_intern_static_string ("_MAEMO_SCREEN_WIDTH"), - type, - 0, 32, FALSE, 0, 0, 0, (guchar **) &rwidth); - gdk_property_get (root_window, - gdk_atom_intern_static_string ("_MAEMO_SCREEN_HEIGHT"), - type, - 0, 32, FALSE, 0, 0, 0, (guchar **) &rheight); + display = gdk_screen_get_display (screen); + if (!(window = gdk_window_lookup_for_display (display, + GDK_SCREEN_X11 (screen)->wmspec_check_window))) + return; - if (rwidth && rheight) + if (gdk_property_get (window, + gdk_atom_intern_static_string ("_MAEMO_SCREEN_SIZE"), + gdk_atom_intern ("CARDINAL", FALSE), + 0, 8, FALSE, 0, 0, 0, (guchar **) &maemo_screen_size)) { gint prop_width, prop_height; - prop_width = *(gint *)rwidth; - prop_height = *(gint *)rheight; + prop_width = maemo_screen_size[0]; + prop_height = maemo_screen_size[1]; if (prop_width != width || prop_height != height) { @@ -940,18 +938,10 @@ g_signal_emit_by_name (screen, "size_changed"); } - has_props = TRUE; + g_free (maemo_screen_size); + /* Ignore XRandR */ + return; } - - if (rwidth) - g_free (rwidth); - - if (rheight) - g_free (rheight); - - /* If we had properties, return and ignore XRandR */ - if (has_props) - return; #endif /* MAEMO_CHANGES */ #ifdef HAVE_RANDR
- Next message: [maemo-commits] r19487 - in projects/haf/trunk/gtk+: . debian
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]