[Xfce4-commits] r27070 - xfwm4/trunk/src
Olivier Fourdan
olivier at xfce.org
Sun Jun 15 23:18:48 CEST 2008
Author: olivier
Date: 2008-06-15 21:18:48 +0000 (Sun, 15 Jun 2008)
New Revision: 27070
Modified:
xfwm4/trunk/src/events.c
Log:
Use gdk/gtk+ callback mechanism to be notified of screen/monitor changes, add support for XRandr 1.2
Modified: xfwm4/trunk/src/events.c
===================================================================
--- xfwm4/trunk/src/events.c 2008-06-15 21:18:27 UTC (rev 27069)
+++ xfwm4/trunk/src/events.c 2008-06-15 21:18:48 UTC (rev 27070)
@@ -1239,64 +1239,10 @@
return status;
}
-static gboolean
-update_screen_idle_cb (gpointer data)
-{
- ScreenInfo *screen_info;
- DisplayInfo *display_info;
-
- TRACE ("entering update_screen_idle_cb");
-
- screen_info = (ScreenInfo *) data;
- g_return_val_if_fail (screen_info, FALSE);
-
- display_info = screen_info->display_info;
- setNetWorkarea (display_info, screen_info->xroot, screen_info->workspace_count,
- screen_info->width, screen_info->height, screen_info->margins);
- placeSidewalks (screen_info, screen_info->params->wrap_workspaces);
- clientScreenResize (screen_info);
- compositorUpdateScreenSize (screen_info);
-
- return FALSE;
-}
-
static eventFilterStatus
handleConfigureNotify (DisplayInfo *display_info, XConfigureEvent * ev)
{
- ScreenInfo *screen_info;
-
TRACE ("entering handleConfigureNotify");
-
- screen_info = myDisplayGetScreenFromRoot (display_info, ev->window);
- if (!screen_info)
- {
- return EVENT_FILTER_PASS;
- }
-
- if (display_info->have_xrandr)
- {
-#ifdef HAVE_RANDR
- XRRUpdateConfiguration ((XEvent *) ev);
-#endif
- }
- else
- {
- TRACE ("ConfigureNotify on the screen_info->xroot win (0x%lx)", ev->window);
- screen_info->xscreen->width = ev->width;
- screen_info->xscreen->height = ev->height;
- }
-
- screen_info->width = WidthOfScreen (screen_info->xscreen);
- screen_info->height = HeightOfScreen (screen_info->xscreen);
-
- /*
- We need to use an idle function to update our screen layout to give gdk the
- time to update its internal structures for Xinerama and monitor size,
- otherwise the functions gdk_screen_get_monitor_geometry () don't return
- accurate values...
- */
- g_idle_add_full (G_PRIORITY_DEFAULT_IDLE, update_screen_idle_cb, screen_info, NULL);
-
return EVENT_FILTER_PASS;
}
@@ -2872,6 +2818,40 @@
return (FALSE);
}
+static void
+size_changed_cb(GdkScreen *gscreen, gpointer data)
+{
+ ScreenInfo *screen_info;
+ DisplayInfo *display_info;
+
+ TRACE ("entering size_changed_cb");
+
+ screen_info = (ScreenInfo *) data;
+ g_return_if_fail (screen_info);
+
+ display_info = screen_info->display_info;
+ screen_info->width = WidthOfScreen (screen_info->xscreen);
+ screen_info->height = HeightOfScreen (screen_info->xscreen);
+ setNetWorkarea (display_info, screen_info->xroot, screen_info->workspace_count,
+ screen_info->width, screen_info->height, screen_info->margins);
+ placeSidewalks (screen_info, screen_info->params->wrap_workspaces);
+ clientScreenResize (screen_info);
+ compositorUpdateScreenSize (screen_info);
+}
+
+static void
+monitors_changed_cb(GdkScreen *gscreen, gpointer data)
+{
+ TRACE ("entering monitors_changed_cb");
+
+ /*
+ * From the window manager point of view,
+ * a XRand 1.2 monitor change is similar to
+ * a screen size change.
+ */
+ size_changed_cb(gscreen, data);
+}
+
void
initGtkCallbacks (ScreenInfo *screen_info)
{
@@ -2882,6 +2862,17 @@
"button_press_event", GTK_SIGNAL_FUNC (show_popup_cb), (gpointer) NULL);
g_signal_connect (GTK_OBJECT (myScreenGetGtkWidget (screen_info)), "client_event",
GTK_SIGNAL_FUNC (client_event_cb), (gpointer) (screen_info->display_info));
+ g_signal_connect(G_OBJECT(screen_info->gscr), "size-changed",
+ G_CALLBACK(size_changed_cb),
+ (gpointer) (screen_info));
+ if(gtk_major_version > 2 || (gtk_major_version == 2 && gtk_minor_version >= 13))
+ {
+ TRACE ("connect \"monitors-changed\" cb");
+ g_signal_connect(G_OBJECT(screen_info->gscr), "monitors-changed",
+ G_CALLBACK(monitors_changed_cb),
+ (gpointer) (screen_info));
+ }
+
settings = gtk_settings_get_default ();
if (settings)
{
@@ -2893,3 +2884,4 @@
G_CALLBACK (dbl_click_time_cb), (gpointer) (screen_info->display_info));
}
}
+
More information about the Xfce4-commits
mailing list