summaryrefslogtreecommitdiff
path: root/src/core/window-private.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/window-private.h')
-rw-r--r--src/core/window-private.h632
1 files changed, 0 insertions, 632 deletions
diff --git a/src/core/window-private.h b/src/core/window-private.h
deleted file mode 100644
index f5547122..00000000
--- a/src/core/window-private.h
+++ /dev/null
@@ -1,632 +0,0 @@
-/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
-
-/**
- * \file window-private.h Windows which Metacity manages
- *
- * Managing X windows.
- * This file contains methods on this class which are available to
- * routines in core but not outside it. (See window.h for the routines
- * which the rest of the world is allowed to use.)
- */
-
-/*
- * Copyright (C) 2001 Havoc Pennington
- * Copyright (C) 2002 Red Hat, Inc.
- * Copyright (C) 2003, 2004 Rob Adams
- * Copyright (C) 2004-2006 Elijah Newren
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#ifndef META_WINDOW_PRIVATE_H
-#define META_WINDOW_PRIVATE_H
-
-#include <config.h>
-#include "window.h"
-#include "screen-private.h"
-#include "util.h"
-#include "stack.h"
-#include "iconcache.h"
-#include <X11/Xutil.h>
-#include <gdk-pixbuf/gdk-pixbuf.h>
-
-typedef struct _MetaGroup MetaGroup;
-typedef struct _MetaWindowQueue MetaWindowQueue;
-
-typedef gboolean (*MetaWindowForeachFunc) (MetaWindow *window,
- void *data);
-
-typedef enum
-{
- META_WINDOW_NORMAL,
- META_WINDOW_DESKTOP,
- META_WINDOW_DOCK,
- META_WINDOW_DIALOG,
- META_WINDOW_MODAL_DIALOG,
- META_WINDOW_TOOLBAR,
- META_WINDOW_MENU,
- META_WINDOW_UTILITY,
- META_WINDOW_SPLASHSCREEN
-} MetaWindowType;
-
-typedef enum
-{
- META_MAXIMIZE_HORIZONTAL = 1 << 0,
- META_MAXIMIZE_VERTICAL = 1 << 1
-} MetaMaximizeFlags;
-
-typedef enum {
- META_CLIENT_TYPE_UNKNOWN = 0,
- META_CLIENT_TYPE_APPLICATION = 1,
- META_CLIENT_TYPE_PAGER = 2,
- META_CLIENT_TYPE_MAX_RECOGNIZED = 2
-} MetaClientType;
-
-typedef enum {
- META_QUEUE_CALC_SHOWING = 1 << 0,
- META_QUEUE_MOVE_RESIZE = 1 << 1,
- META_QUEUE_UPDATE_ICON = 1 << 2,
-} MetaQueueType;
-
-#define NUMBER_OF_QUEUES 3
-
-struct _MetaWindow
-{
- MetaDisplay *display;
- MetaScreen *screen;
- MetaWorkspace *workspace;
- Window xwindow;
- /* may be NULL! not all windows get decorated */
- MetaFrame *frame;
- int depth;
- Visual *xvisual;
- Colormap colormap;
- char *desc; /* used in debug spew */
- char *title;
-
- char *icon_name;
- GdkPixbuf *icon;
- GdkPixbuf *mini_icon;
- MetaIconCache icon_cache;
- Pixmap wm_hints_pixmap;
- Pixmap wm_hints_mask;
-
- MetaWindowType type;
- Atom type_atom;
-
- /* NOTE these five are not in UTF-8, we just treat them as random
- * binary data
- */
- char *res_class;
- char *res_name;
- char *role;
- char *sm_client_id;
- char *wm_client_machine;
- char *startup_id;
-
- int net_wm_pid;
-
- Window xtransient_for;
- Window xgroup_leader;
- Window xclient_leader;
-
- /* Initial workspace property */
- int initial_workspace;
-
- /* Initial timestamp property */
- guint32 initial_timestamp;
-
- /* Whether we're maximized */
- guint maximized_horizontally : 1;
- guint maximized_vertically : 1;
-
- /* Whether we have to maximize/minimize after placement */
- guint maximize_horizontally_after_placement : 1;
- guint maximize_vertically_after_placement : 1;
- guint minimize_after_placement : 1;
-
- /* Whether we're shaded */
- guint shaded : 1;
-
- /* Whether we're fullscreen */
- guint fullscreen : 1;
-
- /* Area to cover when in fullscreen mode. If _NET_WM_FULLSCREEN_MONITORS has
- * been overridden (via a client message), the window will cover the union of
- * these monitors. If not, this is the single monitor which the window's
- * origin is on. */
- long fullscreen_monitors[4];
-
- /* Whether we're trying to constrain the window to be fully onscreen */
- guint require_fully_onscreen : 1;
-
- /* Whether we're trying to constrain the window to be on a single xinerama */
- guint require_on_single_xinerama : 1;
-
- /* Whether we're trying to constrain the window's titlebar to be onscreen */
- guint require_titlebar_visible : 1;
-
- /* Whether we're sticky in the multi-workspace sense
- * (vs. the not-scroll-with-viewport sense, we don't
- * have no stupid viewports)
- */
- guint on_all_workspaces : 1;
-
- /* Minimize is the state controlled by the minimize button */
- guint minimized : 1;
- guint was_minimized : 1;
- guint tab_unminimized : 1;
-
- /* Whether the window is mapped; actual server-side state
- * see also unmaps_pending
- */
- guint mapped : 1;
-
- /* Iconic is the state in WM_STATE; happens for workspaces/shading
- * in addition to minimize
- */
- guint iconic : 1;
- /* initially_iconic is the WM_HINTS setting when we first manage
- * the window. It's taken to mean initially minimized.
- */
- guint initially_iconic : 1;
-
- /* whether an initial workspace was explicitly set */
- guint initial_workspace_set : 1;
-
- /* whether an initial timestamp was explicitly set */
- guint initial_timestamp_set : 1;
-
- /* whether net_wm_user_time has been set yet */
- guint net_wm_user_time_set : 1;
-
- /* These are the flags from WM_PROTOCOLS */
- guint take_focus : 1;
- guint delete_window : 1;
- guint net_wm_ping : 1;
- /* Globally active / No input */
- guint input : 1;
-
- /* MWM hints about features of window */
- guint mwm_decorated : 1;
- guint mwm_border_only : 1;
- guint mwm_has_close_func : 1;
- guint mwm_has_minimize_func : 1;
- guint mwm_has_maximize_func : 1;
- guint mwm_has_move_func : 1;
- guint mwm_has_resize_func : 1;
-
- /* Computed features of window */
- guint decorated : 1;
- guint border_only : 1;
- guint always_sticky : 1;
- guint has_close_func : 1;
- guint has_minimize_func : 1;
- guint has_maximize_func : 1;
- guint has_shade_func : 1;
- guint has_move_func : 1;
- guint has_resize_func : 1;
- guint has_fullscreen_func : 1;
-
- /* Weird "_NET_WM_STATE_MODAL" flag */
- guint wm_state_modal : 1;
-
- /* TRUE if the client forced these on */
- guint wm_state_skip_taskbar : 1;
- guint wm_state_skip_pager : 1;
-
- /* Computed whether to skip taskbar or not */
- guint skip_taskbar : 1;
- guint skip_pager : 1;
-
- /* TRUE if client set these */
- guint wm_state_above : 1;
- guint wm_state_below : 1;
-
- /* EWHH demands attention flag */
- guint wm_state_demands_attention : 1;
-
- /* this flag tracks receipt of focus_in focus_out and
- * determines whether we draw the focus
- */
- guint has_focus : 1;
-
- /* Have we placed this window? */
- guint placed : 1;
-
- /* Is this not a transient of the focus window which is being denied focus? */
- guint denied_focus_and_not_transient : 1;
-
- /* Has this window not ever been shown yet? */
- guint showing_for_first_time : 1;
-
- /* Are we in meta_window_free()? */
- guint unmanaging : 1;
-
- /* Are we in meta_window_new()? */
- guint constructing : 1;
-
- /* Are we in the various queues? (Bitfield: see META_WINDOW_IS_IN_QUEUE) */
- guint is_in_queues : NUMBER_OF_QUEUES;
-
- /* Used by keybindings.c */
- guint keys_grabbed : 1; /* normal keybindings grabbed */
- guint grab_on_frame : 1; /* grabs are on the frame */
- guint all_keys_grabbed : 1; /* AnyKey grabbed */
-
- /* Set if the reason for unmanaging the window is that
- * it was withdrawn
- */
- guint withdrawn : 1;
-
- /* TRUE if constrain_position should calc placement.
- * only relevant if !window->placed
- */
- guint calc_placement : 1;
-
- /* Transient parent is a root window */
- guint transient_parent_is_root_window : 1;
-
- /* Info on which props we got our attributes from */
- guint using_net_wm_name : 1; /* vs. plain wm_name */
- guint using_net_wm_visible_name : 1; /* tracked so we can clear it */
- guint using_net_wm_icon_name : 1; /* vs. plain wm_icon_name */
- guint using_net_wm_visible_icon_name : 1; /* tracked so we can clear it */
-
- /* has a shape mask */
- guint has_shape : 1;
-
- /* icon props have changed */
- guint need_reread_icon : 1;
-
- /* if TRUE, window was maximized at start of current grab op */
- guint shaken_loose : 1;
-
- /* if TRUE we have a grab on the focus click buttons */
- guint have_focus_click_grab : 1;
-
- /* if TRUE, application is buggy and SYNC resizing is turned off */
- guint disable_sync : 1;
-
- /* Note: can be NULL */
- GSList *struts;
-
-#ifdef HAVE_XSYNC
- /* XSync update counter */
- XSyncCounter sync_request_counter;
- guint sync_request_serial;
- GTimeVal sync_request_time;
-#endif
-
- /* Number of UnmapNotify that are caused by us, if
- * we get UnmapNotify with none pending then the client
- * is withdrawing the window.
- */
- int unmaps_pending;
-
- /* set to the most recent user-interaction event timestamp that we
- know about for this window */
- guint32 net_wm_user_time;
-
- /* window that gets updated net_wm_user_time values */
- Window user_time_window;
-
- /* The size we set the window to last (i.e. what we believe
- * to be its actual size on the server). The x, y are
- * the actual server-side x,y so are relative to the frame
- * (meaning that they just hold the frame width and height)
- * or the root window (meaning they specify the location
- * of the top left of the inner window) as appropriate.
- */
- MetaRectangle rect;
-
- /* The geometry to restore when we unmaximize. The position is in
- * root window coords, even if there's a frame, which contrasts with
- * window->rect above. Note that this gives the position and size
- * of the client window (i.e. ignoring the frame).
- */
- MetaRectangle saved_rect;
-
- /* This is the geometry the window had after the last user-initiated
- * move/resize operations. We use this whenever we are moving the
- * implicitly (for example, if we move to avoid a panel, we can snap
- * back to this position if the panel moves again). Note that this
- * gives the position and size of the client window (i.e. ignoring
- * the frame).
- *
- * Position valid if user_has_moved, size valid if user_has_resized
- *
- * Position always in root coords, unlike window->rect.
- */
- MetaRectangle user_rect;
-
- /* Requested geometry */
- int border_width;
- /* x/y/w/h here get filled with ConfigureRequest values */
- XSizeHints size_hints;
-
- /* Managed by stack.c */
- MetaStackLayer layer;
- int stack_position; /* see comment in stack.h */
-
- /* Current dialog open for this window */
- int dialog_pid;
- int dialog_pipe;
-
- /* maintained by group.c */
- MetaGroup *group;
-};
-
-/* These differ from window->has_foo_func in that they consider
- * the dynamic window state such as "maximized", not just the
- * window's type
- */
-#define META_WINDOW_MAXIMIZED(w) ((w)->maximized_horizontally && \
- (w)->maximized_vertically)
-#define META_WINDOW_MAXIMIZED_VERTICALLY(w) ((w)->maximized_vertically)
-#define META_WINDOW_MAXIMIZED_HORIZONTALLY(w) ((w)->maximized_horizontally)
-#define META_WINDOW_ALLOWS_MOVE(w) ((w)->has_move_func && !(w)->fullscreen)
-#define META_WINDOW_ALLOWS_RESIZE_EXCEPT_HINTS(w) ((w)->has_resize_func && !META_WINDOW_MAXIMIZED (w) && !(w)->fullscreen && !(w)->shaded)
-#define META_WINDOW_ALLOWS_RESIZE(w) (META_WINDOW_ALLOWS_RESIZE_EXCEPT_HINTS (w) && \
- (((w)->size_hints.min_width < (w)->size_hints.max_width) || \
- ((w)->size_hints.min_height < (w)->size_hints.max_height)))
-#define META_WINDOW_ALLOWS_HORIZONTAL_RESIZE(w) (META_WINDOW_ALLOWS_RESIZE_EXCEPT_HINTS (w) && (w)->size_hints.min_width < (w)->size_hints.max_width)
-#define META_WINDOW_ALLOWS_VERTICAL_RESIZE(w) (META_WINDOW_ALLOWS_RESIZE_EXCEPT_HINTS (w) && (w)->size_hints.min_height < (w)->size_hints.max_height)
-
-MetaWindow* meta_window_new (MetaDisplay *display,
- Window xwindow,
- gboolean must_be_viewable);
-MetaWindow* meta_window_new_with_attrs (MetaDisplay *display,
- Window xwindow,
- gboolean must_be_viewable,
- XWindowAttributes *attrs);
-void meta_window_free (MetaWindow *window,
- guint32 timestamp);
-void meta_window_calc_showing (MetaWindow *window);
-void meta_window_queue (MetaWindow *window,
- guint queuebits);
-void meta_window_minimize (MetaWindow *window);
-void meta_window_unminimize (MetaWindow *window);
-void meta_window_maximize (MetaWindow *window,
- MetaMaximizeFlags directions);
-void meta_window_maximize_internal (MetaWindow *window,
- MetaMaximizeFlags directions,
- MetaRectangle *saved_rect);
-void meta_window_unmaximize (MetaWindow *window,
- MetaMaximizeFlags directions);
-void meta_window_make_above (MetaWindow *window);
-void meta_window_unmake_above (MetaWindow *window);
-void meta_window_shade (MetaWindow *window,
- guint32 timestamp);
-void meta_window_unshade (MetaWindow *window,
- guint32 timestamp);
-void meta_window_change_workspace (MetaWindow *window,
- MetaWorkspace *workspace);
-void meta_window_stick (MetaWindow *window);
-void meta_window_unstick (MetaWindow *window);
-
-void meta_window_activate (MetaWindow *window,
- guint32 current_time);
-void meta_window_activate_with_workspace (MetaWindow *window,
- guint32 current_time,
- MetaWorkspace *workspace);
-void meta_window_make_fullscreen_internal (MetaWindow *window);
-void meta_window_make_fullscreen (MetaWindow *window);
-void meta_window_unmake_fullscreen (MetaWindow *window);
-void meta_window_update_fullscreen_monitors (MetaWindow *window,
- unsigned long top,
- unsigned long bottom,
- unsigned long left,
- unsigned long right);
-
-/* args to move are window pos, not frame pos */
-void meta_window_move (MetaWindow *window,
- gboolean user_op,
- int root_x_nw,
- int root_y_nw);
-void meta_window_resize (MetaWindow *window,
- gboolean user_op,
- int w,
- int h);
-void meta_window_move_resize (MetaWindow *window,
- gboolean user_op,
- int root_x_nw,
- int root_y_nw,
- int w,
- int h);
-void meta_window_resize_with_gravity (MetaWindow *window,
- gboolean user_op,
- int w,
- int h,
- int gravity);
-
-
-/* Return whether the window would be showing if we were on its workspace */
-gboolean meta_window_showing_on_its_workspace (MetaWindow *window);
-
-/* Return whether the window should be currently mapped */
-gboolean meta_window_should_be_showing (MetaWindow *window);
-
-/* See warning in window.c about this function */
-gboolean __window_is_terminal (MetaWindow *window);
-
-void meta_window_update_struts (MetaWindow *window);
-
-/* this gets root coords */
-void meta_window_get_position (MetaWindow *window,
- int *x,
- int *y);
-
-/* Gets root coords for x, y, width & height of client window; uses
- * meta_window_get_position for x & y.
- */
-void meta_window_get_client_root_coords (MetaWindow *window,
- MetaRectangle *rect);
-
-/* gets position we need to set to stay in current position,
- * assuming position will be gravity-compensated. i.e.
- * this is the position a client would send in a configure
- * request.
- */
-void meta_window_get_gravity_position (MetaWindow *window,
- int gravity,
- int *x,
- int *y);
-/* Get geometry for saving in the session; x/y are gravity
- * position, and w/h are in resize inc above the base size.
- */
-void meta_window_get_geometry (MetaWindow *window,
- int *x,
- int *y,
- int *width,
- int *height);
-void meta_window_get_outer_rect (const MetaWindow *window,
- MetaRectangle *rect);
-void meta_window_get_xor_rect (MetaWindow *window,
- const MetaRectangle *grab_wireframe_rect,
- MetaRectangle *xor_rect);
-void meta_window_begin_wireframe (MetaWindow *window);
-void meta_window_update_wireframe (MetaWindow *window,
- int x,
- int y,
- int width,
- int height);
-void meta_window_end_wireframe (MetaWindow *window);
-
-void meta_window_delete (MetaWindow *window,
- guint32 timestamp);
-void meta_window_kill (MetaWindow *window);
-void meta_window_focus (MetaWindow *window,
- guint32 timestamp);
-void meta_window_raise (MetaWindow *window);
-void meta_window_lower (MetaWindow *window);
-
-void meta_window_update_unfocused_button_grabs (MetaWindow *window);
-
-/* Sends a client message */
-void meta_window_send_icccm_message (MetaWindow *window,
- Atom atom,
- guint32 timestamp);
-
-
-void meta_window_move_resize_request(MetaWindow *window,
- guint value_mask,
- int gravity,
- int x,
- int y,
- int width,
- int height);
-gboolean meta_window_configure_request (MetaWindow *window,
- XEvent *event);
-gboolean meta_window_property_notify (MetaWindow *window,
- XEvent *event);
-gboolean meta_window_client_message (MetaWindow *window,
- XEvent *event);
-gboolean meta_window_notify_focus (MetaWindow *window,
- XEvent *event);
-
-void meta_window_set_current_workspace_hint (MetaWindow *window);
-
-unsigned long meta_window_get_net_wm_desktop (MetaWindow *window);
-
-void meta_window_show_menu (MetaWindow *window,
- int root_x,
- int root_y,
- int button,
- guint32 timestamp);
-
-gboolean meta_window_titlebar_is_onscreen (MetaWindow *window);
-void meta_window_shove_titlebar_onscreen (MetaWindow *window);
-
-void meta_window_set_gravity (MetaWindow *window,
- int gravity);
-
-void meta_window_handle_mouse_grab_op_event (MetaWindow *window,
- XEvent *event);
-
-GList* meta_window_get_workspaces (MetaWindow *window);
-
-gboolean meta_window_located_on_workspace (MetaWindow *window,
- MetaWorkspace *workspace);
-
-void meta_window_get_work_area_current_xinerama (MetaWindow *window,
- MetaRectangle *area);
-void meta_window_get_work_area_for_xinerama (MetaWindow *window,
- int which_xinerama,
- MetaRectangle *area);
-void meta_window_get_work_area_all_xineramas (MetaWindow *window,
- MetaRectangle *area);
-
-
-gboolean meta_window_same_application (MetaWindow *window,
- MetaWindow *other_window);
-
-#define META_WINDOW_IN_NORMAL_TAB_CHAIN_TYPE(w) \
- ((w)->type != META_WINDOW_DOCK && (w)->type != META_WINDOW_DESKTOP)
-#define META_WINDOW_IN_NORMAL_TAB_CHAIN(w) \
- (((w)->input || (w)->take_focus ) && META_WINDOW_IN_NORMAL_TAB_CHAIN_TYPE (w) && (!(w)->skip_taskbar))
-#define META_WINDOW_IN_DOCK_TAB_CHAIN(w) \
- (((w)->input || (w)->take_focus) && (! META_WINDOW_IN_NORMAL_TAB_CHAIN_TYPE (w) || (w)->skip_taskbar))
-#define META_WINDOW_IN_GROUP_TAB_CHAIN(w, g) \
- (((w)->input || (w)->take_focus) && (!g || meta_window_get_group(w)==g))
-
-void meta_window_refresh_resize_popup (MetaWindow *window);
-
-void meta_window_free_delete_dialog (MetaWindow *window);
-
-void meta_window_foreach_transient (MetaWindow *window,
- MetaWindowForeachFunc func,
- void *data);
-gboolean meta_window_is_ancestor_of_transient (MetaWindow *window,
- MetaWindow *transient);
-void meta_window_foreach_ancestor (MetaWindow *window,
- MetaWindowForeachFunc func,
- void *data);
-MetaWindow* meta_window_find_root_ancestor (MetaWindow *window);
-
-
-void meta_window_begin_grab_op (MetaWindow *window,
- MetaGrabOp op,
- gboolean frame_action,
- guint32 timestamp);
-
-void meta_window_update_keyboard_resize (MetaWindow *window,
- gboolean update_cursor);
-void meta_window_update_keyboard_move (MetaWindow *window);
-
-void meta_window_update_layer (MetaWindow *window);
-
-gboolean meta_window_get_icon_geometry (MetaWindow *window,
- MetaRectangle *rect);
-
-const char* meta_window_get_startup_id (MetaWindow *window);
-
-void meta_window_recalc_features (MetaWindow *window);
-void meta_window_recalc_window_type (MetaWindow *window);
-
-void meta_window_stack_just_below (MetaWindow *window,
- MetaWindow *below_this_one);
-
-void meta_window_set_user_time (MetaWindow *window,
- guint32 timestamp);
-
-void meta_window_set_demands_attention (MetaWindow *window);
-
-void meta_window_unset_demands_attention (MetaWindow *window);
-
-void meta_window_update_icon_now (MetaWindow *window);
-
-#endif