diff options
author | Rob Adams <robadams@ucla.edu> | 2003-06-26 03:09:38 +0000 |
---|---|---|
committer | Rob Adams <readams@src.gnome.org> | 2003-06-26 03:09:38 +0000 |
commit | 971f3f120763003f060bcbf88f872632a0edb1cd (patch) | |
tree | afe069c2ff9f043dcaf4fbae063c4a9861d078eb /src/tools | |
parent | 3a39036dcbd983b56be1b23c3a686987571bfe39 (diff) | |
download | mutter-971f3f120763003f060bcbf88f872632a0edb1cd.tar.gz |
Update constraints code to support the new _NET_WM_STRUT_PARTIAL EWMH
2003-06-10 Rob Adams <robadams@ucla.edu>
Update constraints code to support the new _NET_WM_STRUT_PARTIAL
EWMH draft specification. See #86682. Also, fix a bug involving
work area invalidation on metacity startup. Fix for #108497.
Finally, some minor fixes for full screen windows.
* src/window.h: Add new MetaStruts structure to store strut rects
for a window. Remove has_struts and do_not_cover flag, and
support new MetaStruts instead of the four ints.
* src/window.c (meta_window_new): change initialization to work
with new struts. Also, move meta_window_update_struts call to
after the workspaces are initialized to fix #108497. Remove
do_not_cover and related code.
(process_property_notify): add strut_partial
(update_struts): change function name to meta_window_update_struts
and expose in external MetaWindow API. Support partial width
struts and the new strut rects.
* src/workspace.h: add new GSLists containing pointers to all
relevant struts for this workspace.
* src/workspace.c (meta_workspace_new): initialize the list of
strut rects for this workspace.
(meta_workspace_free): free the strut rect lists
(ensure_work_areas_validated): support new struts and new strut
rect lists. Unleash the per-xinerama work areas.
* src/constraints.c (get_outermost_onscreen_positions): Use the
current window position along with the new per-workspace strut
rects to compute the constraints that apply to a particular
window.
(constraint_hint_applies_func): don't do hints constraints on
fullscreen windows
(update_position_limits): for maximized windows use the work areas
to set the position limits; for other windows rely on the struts
constraints to be computed later in
get_outermost_onscreen_positions
(meta_window_constrain): don't apply aspect ratio hints to full
screen windows
* src/display.c (meta_display_open): add _NET_WM_STRUT_PARTIAL atom
(meta_rectangle_equal): new helper function for MetaRectangles
(event_queue_callback): #ifndef out if USE_GDK_DISPLAY not set to
avoid compiler warning
* src/display.h: add atom_net_wm_strut_partial, and add
meta_rectangle_equal.
* src/screen.c (meta_screen_rect_intersects_xinerama): change
_window_intersects_ to _rect_intersects_ which is more useful now.
(meta_screen_resize_func): update struts on windows with struts
since struts are relative to the screen size, and this function is
called when the screen size updates.
* src/screen.h (meta_screen_rect_intersects_xinerama): change
_window_intersects_ to _rect_intersects_ which is more useful now.
* src/window-props.c (meta_display_init_window_prop_hooks): add
hook for strut_partial
* src/tools/metacity-window-demo.c: Support partial-width struts
on the dock window tests for metacity testing purposes.
Diffstat (limited to 'src/tools')
-rw-r--r-- | src/tools/metacity-window-demo.c | 38 |
1 files changed, 26 insertions, 12 deletions
diff --git a/src/tools/metacity-window-demo.c b/src/tools/metacity-window-demo.c index 215ab6d00..718f1f0a6 100644 --- a/src/tools/metacity-window-demo.c +++ b/src/tools/metacity-window-demo.c @@ -33,19 +33,27 @@ set_gdk_window_struts (GdkWindow *window, int top, int bottom) { - long vals[4]; + long vals[12]; vals[0] = left; vals[1] = right; vals[2] = top; vals[3] = bottom; - + vals[4] = 000; + vals[5] = 400; + vals[6] = 200; + vals[7] = 600; + vals[8] = 76; + vals[9] = 676; + vals[10] = 200; + vals[11] = 800; + XChangeProperty (GDK_WINDOW_XDISPLAY (window), GDK_WINDOW_XWINDOW (window), XInternAtom (GDK_WINDOW_XDISPLAY (window), - "_NET_WM_STRUT", False), + "_NET_WM_STRUT_PARTIAL", False), XA_CARDINAL, 32, PropModeReplace, - (guchar *)vals, 4); + (guchar *)vals, 12); } static void @@ -441,6 +449,7 @@ border_only_cb (gpointer callback_data, gtk_widget_show_all (window); } +#if 0 static void changing_icon_cb (gpointer callback_data, guint callback_action, @@ -462,6 +471,7 @@ changing_icon_cb (gpointer callback_data, gtk_widget_show_all (window); } +#endif static gboolean focus_in_event_cb (GtkWidget *window, @@ -473,6 +483,8 @@ focus_in_event_cb (GtkWidget *window, widget = GTK_WIDGET (data); gtk_label_set_text (GTK_LABEL (widget), "Has focus"); + + return TRUE; } @@ -486,6 +498,8 @@ focus_out_event_cb (GtkWidget *window, widget = GTK_WIDGET (data); gtk_label_set_text (GTK_LABEL (widget), "Not focused"); + + return TRUE; } static GtkWidget* @@ -583,26 +597,26 @@ make_dock (int type) switch (type) { case DOCK_LEFT: - gtk_widget_set_size_request (window, DOCK_SIZE, gdk_screen_height ()); - gtk_window_move (GTK_WINDOW (window), 0, 0); + gtk_widget_set_size_request (window, DOCK_SIZE, 400); + gtk_window_move (GTK_WINDOW (window), 0, 000); set_gtk_window_struts (window, DOCK_SIZE, 0, 0, 0); gtk_window_set_title (GTK_WINDOW (window), "LeftDock"); break; case DOCK_RIGHT: - gtk_widget_set_size_request (window, DOCK_SIZE, gdk_screen_height ()); - gtk_window_move (GTK_WINDOW (window), gdk_screen_width () - DOCK_SIZE, 0); + gtk_widget_set_size_request (window, DOCK_SIZE, 400); + gtk_window_move (GTK_WINDOW (window), gdk_screen_width () - DOCK_SIZE, 200); set_gtk_window_struts (window, 0, DOCK_SIZE, 0, 0); gtk_window_set_title (GTK_WINDOW (window), "RightDock"); break; case DOCK_TOP: - gtk_widget_set_size_request (window, gdk_screen_width (), DOCK_SIZE); - gtk_window_move (GTK_WINDOW (window), 0, 0); + gtk_widget_set_size_request (window, 600, DOCK_SIZE); + gtk_window_move (GTK_WINDOW (window), 76, 0); set_gtk_window_struts (window, 0, 0, DOCK_SIZE, 0); gtk_window_set_title (GTK_WINDOW (window), "TopDock"); break; case DOCK_BOTTOM: - gtk_widget_set_size_request (window, gdk_screen_width (), DOCK_SIZE); - gtk_window_move (GTK_WINDOW (window), 0, gdk_screen_height () - DOCK_SIZE); + gtk_widget_set_size_request (window, 600, DOCK_SIZE); + gtk_window_move (GTK_WINDOW (window), 200, gdk_screen_height () - DOCK_SIZE); set_gtk_window_struts (window, 0, 0, 0, DOCK_SIZE); gtk_window_set_title (GTK_WINDOW (window), "BottomDock"); break; |