[Xfce4-commits] r29311 - in xfwm4/trunk: . src
Olivier Fourdan
olivier at xfce.org
Sun Jan 25 00:42:38 CET 2009
Author: olivier
Date: 2009-01-24 23:42:37 +0000 (Sat, 24 Jan 2009)
New Revision: 29311
Modified:
xfwm4/trunk/ChangeLog
xfwm4/trunk/NEWS
xfwm4/trunk/README
xfwm4/trunk/src/client.c
xfwm4/trunk/src/client.h
xfwm4/trunk/src/display.c
xfwm4/trunk/src/display.h
xfwm4/trunk/src/events.c
xfwm4/trunk/src/hints.c
xfwm4/trunk/src/hints.h
xfwm4/trunk/src/netwm.c
Log:
* src/display.c, src/display.h, src/events.c, src/client.c
src/client.h, src/hints.c, src/hints.h, src/netwm.c, README:
Add support for NET_WM_FULLSCREEN_MONITORS
Modified: xfwm4/trunk/ChangeLog
===================================================================
--- xfwm4/trunk/ChangeLog 2009-01-24 21:03:15 UTC (rev 29310)
+++ xfwm4/trunk/ChangeLog 2009-01-24 23:42:37 UTC (rev 29311)
@@ -1,3 +1,9 @@
+2009-01-24 olivier
+
+ * src/display.c, src/display.h, src/events.c, src/client.c
+ src/client.h, src/hints.c, src/hints.h, src/netwm.c, README:
+ Add support for NET_WM_FULLSCREEN_MONITORS
+
2009-01-23 olivier
* src/parserc.c, src/settings.c, src/settings.c: Fix settings not
Modified: xfwm4/trunk/NEWS
===================================================================
--- xfwm4/trunk/NEWS 2009-01-24 21:03:15 UTC (rev 29310)
+++ xfwm4/trunk/NEWS 2009-01-24 23:42:37 UTC (rev 29311)
@@ -6,6 +6,7 @@
the session manager (Bug #4839).
- Fix settings not being set at startup (Bug #4845)
- Flatten default theme
+- Add support for NET_WM_FULLSCREEN_MONITORS
4.5.93 (Xfce 4.6beta3)
======================
Modified: xfwm4/trunk/README
===================================================================
--- xfwm4/trunk/README 2009-01-24 21:03:15 UTC (rev 29310)
+++ xfwm4/trunk/README 2009-01-24 23:42:37 UTC (rev 29311)
@@ -20,14 +20,17 @@
NET_NUMBER_OF_DESKTOPS
NET_REQUEST_FRAME_EXTENTS
NET_SHOWING_DESKTOP
- NET_STARTUP_ID
NET_SUPPORTED
NET_SUPPORTING_WM_CHECK
NET_SYSTEM_TRAY_OPCODE
+ NET_WM_ACTION_ABOVE
+ NET_WM_ACTION_BELOW
NET_WM_ACTION_CHANGE_DESKTOP
NET_WM_ACTION_CLOSE
+ NET_WM_ACTION_FULLSCREEN
NET_WM_ACTION_MAXIMIZE_HORZ
NET_WM_ACTION_MAXIMIZE_VERT
+ NET_WM_ACTION_MINIMIZE
NET_WM_ACTION_MOVE
NET_WM_ACTION_RESIZE
NET_WM_ACTION_SHADE
@@ -35,13 +38,14 @@
NET_WM_ALLOWED_ACTIONS
NET_WM_CONTEXT_HELP
NET_WM_DESKTOP
+ NET_WM_FULLSCREEN_MONITORS
NET_WM_ICON
NET_WM_ICON_GEOMETRY
NET_WM_ICON_NAME
NET_WM_MOVERESIZE
NET_WM_NAME
- NET_WM_WINDOW_OPACITY
- NET_WM_WINDOW_OPACITY_LOCKED
+ NET_WM_PID
+ NET_WM_PING
NET_WM_STATE
NET_WM_STATE_ABOVE
NET_WM_STATE_BELOW
@@ -60,6 +64,9 @@
NET_WM_SYNC_REQUEST
NET_WM_SYNC_REQUEST_COUNTER
NET_WM_USER_TIME
+ NET_WM_USER_TIME_WINDOW
+ NET_WM_WINDOW_OPACITY
+ NET_WM_WINDOW_OPACITY_LOCKED
NET_WM_WINDOW_TYPE
NET_WM_WINDOW_TYPE_DESKTOP
NET_WM_WINDOW_TYPE_DIALOG
Modified: xfwm4/trunk/src/client.c
===================================================================
--- xfwm4/trunk/src/client.c 2009-01-24 21:03:15 UTC (rev 29310)
+++ xfwm4/trunk/src/client.c 2009-01-24 23:42:37 UTC (rev 29311)
@@ -1760,6 +1760,11 @@
c->ncmap = 0;
}
+ c->fullscreen_monitors[0] = 0;
+ c->fullscreen_monitors[1] = 0;
+ c->fullscreen_monitors[2] = 0;
+ c->fullscreen_monitors[3] = 0;
+
/* Opacity for compositing manager */
c->opacity = NET_WM_OPAQUE;
getOpacity (display_info, c->window, &c->opacity);
@@ -2973,6 +2978,70 @@
}
}
+void
+clientUpdateFullscreenSize (Client * c)
+{
+ ScreenInfo *screen_info;
+ DisplayInfo *display_info;
+ XWindowChanges wc;
+ GdkRectangle monitor, rect;
+ int i;
+
+ g_return_if_fail (c != NULL);
+ TRACE ("entering clientUpdateFullscreenSize");
+ TRACE ("Update fullscreen size for client \"%s\" (0x%lx)", c->name, c->window);
+
+ screen_info = c->screen_info;
+ display_info = screen_info->display_info;
+
+ if (FLAG_TEST (c->flags, CLIENT_FLAG_FULLSCREEN))
+ {
+ if (FLAG_TEST (c->flags, CLIENT_FLAG_FULLSCREN_MONITORS))
+ {
+ gdk_screen_get_monitor_geometry (screen_info->gscr, c->fullscreen_monitors[0], &rect);
+ for (i = 1; i < 4; i++)
+ {
+ gdk_screen_get_monitor_geometry (screen_info->gscr, c->fullscreen_monitors[i], &monitor);
+ gdk_rectangle_union (&rect, &monitor, &rect);
+ }
+ }
+ else
+ {
+ int cx, cy;
+
+ cx = frameX (c) + (frameWidth (c) / 2);
+ cy = frameY (c) + (frameHeight (c) / 2);
+
+ myScreenFindMonitorAtPoint (screen_info, cx, cy, &rect);
+ }
+
+ wc.x = rect.x;
+ wc.y = rect.y;
+ wc.width = rect.width;
+ wc.height = rect.height;
+ }
+
+ else
+ {
+ wc.x = c->fullscreen_old_x;
+ wc.y = c->fullscreen_old_y;
+ wc.width = c->fullscreen_old_width;
+ wc.height = c->fullscreen_old_height;
+ }
+
+ if (FLAG_TEST (c->xfwm_flags, XFWM_FLAG_MANAGED))
+ {
+ clientConfigure (c, &wc, CWX | CWY | CWWidth | CWHeight, CFG_FORCE_REDRAW);
+ }
+ else
+ {
+ c->x = wc.x;
+ c->y = wc.y;
+ c->height = wc.height;
+ c->width = wc.width;
+ }
+}
+
void clientToggleFullscreen (Client * c)
{
g_return_if_fail (c != NULL);
@@ -3003,6 +3072,48 @@
}
}
+void clientSetFullscreenMonitor (Client * c, gint top, gint bottom, gint left, gint right)
+{
+ ScreenInfo *screen_info;
+ DisplayInfo *display_info;
+ gint num_monitors;
+
+ g_return_if_fail (c != NULL);
+ TRACE ("entering clientSetFullscreenMonitor");
+
+ screen_info = c->screen_info;
+ display_info = screen_info->display_info;
+
+ num_monitors = gdk_screen_get_n_monitors (screen_info->gscr);
+ if ((top >= 0) && (top < num_monitors) &&
+ (bottom >= 0) && (bottom < num_monitors) &&
+ (left >= 0) && (left < num_monitors) &&
+ (right >= 0) && (right < num_monitors))
+ {
+ c->fullscreen_monitors[0] = top;
+ c->fullscreen_monitors[1] = bottom;
+ c->fullscreen_monitors[2] = left;
+ c->fullscreen_monitors[3] = right;
+ FLAG_SET (c->flags, CLIENT_FLAG_FULLSCREN_MONITORS);
+ }
+ else
+ {
+ c->fullscreen_monitors[0] = 0;
+ c->fullscreen_monitors[1] = 0;
+ c->fullscreen_monitors[2] = 0;
+ c->fullscreen_monitors[3] = 0;
+ FLAG_UNSET (c->flags, CLIENT_FLAG_FULLSCREN_MONITORS);
+ }
+ if (FLAG_TEST (c->flags, CLIENT_FLAG_FULLSCREEN))
+ {
+ clientUpdateFullscreenSize (c);
+ }
+ if (FLAG_TEST (c->flags, CLIENT_FLAG_FULLSCREN_MONITORS))
+ {
+ setNetFullscreenMonitors (display_info, c->window, top, bottom, left, right);
+ }
+}
+
void clientToggleLayerAbove (Client * c)
{
g_return_if_fail (c != NULL);
Modified: xfwm4/trunk/src/client.h
===================================================================
--- xfwm4/trunk/src/client.h 2009-01-24 21:03:15 UTC (rev 29310)
+++ xfwm4/trunk/src/client.h 2009-01-24 23:42:37 UTC (rev 29311)
@@ -157,6 +157,7 @@
#define CLIENT_FLAG_NAME_CHANGED (1L<<16)
#define CLIENT_FLAG_DEMANDS_ATTENTION (1L<<17)
#define CLIENT_FLAG_HAS_SHAPE (1L<<18)
+#define CLIENT_FLAG_FULLSCREN_MONITORS (1L<<19)
#define WM_FLAG_DELETE (1L<<0)
#define WM_FLAG_INPUT (1L<<1)
@@ -298,6 +299,7 @@
unsigned long flags;
unsigned long wm_flags;
unsigned long xfwm_flags;
+ gint fullscreen_monitors[4];
/* Termination dialog */
int dialog_pid;
@@ -408,7 +410,13 @@
gboolean);
void clientToggleSticky (Client *,
gboolean);
+void clientUpdateFullscreenSize (Client *);
void clientToggleFullscreen (Client *);
+void clientSetFullscreenMonitor (Client *,
+ gint,
+ gint,
+ gint,
+ gint);
void clientToggleLayerAbove (Client *);
void clientToggleLayerBelow (Client *);
void clientSetLayerNormal (Client *);
Modified: xfwm4/trunk/src/display.c
===================================================================
--- xfwm4/trunk/src/display.c 2009-01-24 21:03:15 UTC (rev 29310)
+++ xfwm4/trunk/src/display.c 2009-01-24 23:42:37 UTC (rev 29311)
@@ -113,6 +113,7 @@
"_NET_WM_ALLOWED_ACTIONS",
"_NET_WM_CONTEXT_HELP",
"_NET_WM_DESKTOP",
+ "_NET_WM_FULLSCREEN_MONITORS",
"_NET_WM_ICON",
"_NET_WM_ICON_GEOMETRY",
"_NET_WM_ICON_NAME",
Modified: xfwm4/trunk/src/display.h
===================================================================
--- xfwm4/trunk/src/display.h 2009-01-24 21:03:15 UTC (rev 29310)
+++ xfwm4/trunk/src/display.h 2009-01-24 23:42:37 UTC (rev 29311)
@@ -207,6 +207,7 @@
NET_WM_ALLOWED_ACTIONS,
NET_WM_CONTEXT_HELP,
NET_WM_DESKTOP,
+ NET_WM_FULLSCREEN_MONITORS,
NET_WM_ICON,
NET_WM_ICON_GEOMETRY,
NET_WM_ICON_NAME,
Modified: xfwm4/trunk/src/events.c
===================================================================
--- xfwm4/trunk/src/events.c 2009-01-24 21:03:15 UTC (rev 29310)
+++ xfwm4/trunk/src/events.c 2009-01-24 23:42:37 UTC (rev 29311)
@@ -2026,6 +2026,12 @@
setNetFrameExtents (display_info, c->window, frameTop (c), frameLeft (c),
frameRight (c), frameBottom (c));
}
+ else if (ev->message_type == display_info->atoms[NET_WM_FULLSCREEN_MONITORS])
+ {
+ TRACE ("client \"%s\" (0x%lx) has received a NET_WM_FULLSCREEN_MONITORS event", c->name, c->window);
+ clientSetFullscreenMonitor (c, (gint) ev->data.l[0], (gint) ev->data.l[1],
+ (gint) ev->data.l[2], (gint) ev->data.l[3]);
+ }
}
else
{
Modified: xfwm4/trunk/src/hints.c
===================================================================
--- xfwm4/trunk/src/hints.c 2009-01-24 21:03:15 UTC (rev 29310)
+++ xfwm4/trunk/src/hints.c 2009-01-24 23:42:37 UTC (rev 29311)
@@ -423,6 +423,7 @@
atoms[i++] = display_info->atoms[NET_WM_ALLOWED_ACTIONS];
atoms[i++] = display_info->atoms[NET_WM_CONTEXT_HELP];
atoms[i++] = display_info->atoms[NET_WM_DESKTOP];
+ atoms[i++] = display_info->atoms[NET_WM_FULLSCREEN_MONITORS];
atoms[i++] = display_info->atoms[NET_WM_ICON];
atoms[i++] = display_info->atoms[NET_WM_ICON_GEOMETRY];
atoms[i++] = display_info->atoms[NET_WM_ICON_NAME];
@@ -590,6 +591,20 @@
}
void
+setNetFullscreenMonitors (DisplayInfo *display_info, Window w, gint top, gint bottom, gint left, gint right)
+{
+ unsigned long data[4] = { 0, 0, 0, 0 };
+
+ TRACE ("entering setNetFullscreenMonitors");
+ data[0] = (unsigned long) top;;
+ data[1] = (unsigned long) bottom;
+ data[2] = (unsigned long) left;
+ data[3] = (unsigned long) right;
+ XChangeProperty (display_info->dpy, w, display_info->atoms[NET_WM_FULLSCREEN_MONITORS],
+ XA_CARDINAL, 32, PropModeReplace, (unsigned char *) data, 4);
+}
+
+void
initNetDesktopInfo (DisplayInfo *display_info, Window root, int workspace, int width, int height)
{
unsigned long data[2];
Modified: xfwm4/trunk/src/hints.h
===================================================================
--- xfwm4/trunk/src/hints.h 2009-01-24 21:03:15 UTC (rev 29310)
+++ xfwm4/trunk/src/hints.h 2009-01-24 23:42:37 UTC (rev 29311)
@@ -205,6 +205,12 @@
int,
int,
int);
+void setNetFullscreenMonitors (DisplayInfo *,
+ Window,
+ gint,
+ gint,
+ gint,
+ gint);
void initNetDesktopInfo (DisplayInfo *,
Window,
int,
Modified: xfwm4/trunk/src/netwm.c
===================================================================
--- xfwm4/trunk/src/netwm.c 2009-01-24 21:03:15 UTC (rev 29310)
+++ xfwm4/trunk/src/netwm.c 2009-01-24 23:42:37 UTC (rev 29311)
@@ -728,7 +728,6 @@
{
ScreenInfo *screen_info;
DisplayInfo *display_info;
- XWindowChanges wc;
int layer;
g_return_if_fail (c != NULL);
@@ -740,46 +739,19 @@
if (FLAG_TEST (c->flags, CLIENT_FLAG_FULLSCREEN))
{
- GdkRectangle rect;
- int cx, cy;
-
- cx = frameX (c) + (frameWidth (c) / 2);
- cy = frameY (c) + (frameHeight (c) / 2);
-
- myScreenFindMonitorAtPoint (screen_info, cx, cy, &rect);
-
c->fullscreen_old_x = c->x;
c->fullscreen_old_y = c->y;
c->fullscreen_old_width = c->width;
c->fullscreen_old_height = c->height;
c->fullscreen_old_layer = c->win_layer;
-
- wc.x = rect.x;
- wc.y = rect.y;
- wc.width = rect.width;
- wc.height = rect.height;
layer = WIN_LAYER_FULLSCREEN;
}
else
{
- wc.x = c->fullscreen_old_x;
- wc.y = c->fullscreen_old_y;
- wc.width = c->fullscreen_old_width;
- wc.height = c->fullscreen_old_height;
layer = c->fullscreen_old_layer;
}
- if (FLAG_TEST (c->xfwm_flags, XFWM_FLAG_MANAGED))
- {
- clientConfigure (c, &wc, CWX | CWY | CWWidth | CWHeight, CFG_FORCE_REDRAW);
- }
- else
- {
- c->x = wc.x;
- c->y = wc.y;
- c->height = wc.height;
- c->width = wc.width;
- }
clientSetLayer (c, layer);
+ clientUpdateFullscreenSize (c);
/* Fullscreen has no decoration at all, update NET_FRAME_EXTENTS accordingly */
setNetFrameExtents (display_info,
More information about the Xfce4-commits
mailing list