2006-10-01 22:30:10 +00:00
|
|
|
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
|
|
|
|
Comprehensively rename to Mutter
Code:
All references in the code not related to themes, keybindings, or
GConf were changed from 'metacity' to 'mutter'. This includes, among other
things, strings, comments, the atoms used in the message protocol, and
the envvars used for debugging. The GConf schema file was reduced to
the 3 settings new to mutter.
The overall version was brought up to 2.27 to match current gnome.
Structure:
All files named '*metacity*' were renamed '*mutter*' with appropriate
changes in the automake system. Files removed are
doc/creating_themes, src/themes, doc/metacity-theme.dtd,
metacity.doap. These files will eventually end up in an external
gnome-wm-data module.
Installation location:
On the filesystem the mutter-plugindir was change from
$(libdir)/metacity/plugins/clutter to just $(libdir)/mutter/plugins.
The mutter-plugins.pc.in reflects these changes.
Note:
mutter.desktop.in and mutter-wm.desktop both continue to have
X-GNOME-WMSettingsModule=metacity set. This allows
gnome-control-center to continue using libmetacity.so for
configuration. This is fine since most the general keybindings and wm
settings are being read from /apps/metacity/* in gconf.
2009-06-10 10:29:20 +00:00
|
|
|
/* Mutter X display handler */
|
2001-05-30 15:36:31 +00:00
|
|
|
|
2014-05-02 13:34:02 +00:00
|
|
|
/*
|
2001-05-30 15:36:31 +00:00
|
|
|
* Copyright (C) 2001 Havoc Pennington
|
2002-12-10 03:23:04 +00:00
|
|
|
* Copyright (C) 2002 Red Hat, Inc.
|
2004-02-23 01:48:29 +00:00
|
|
|
* Copyright (C) 2003 Rob Adams
|
2006-01-10 19:43:21 +00:00
|
|
|
* Copyright (C) 2004-2006 Elijah Newren
|
2014-05-02 13:34:02 +00:00
|
|
|
*
|
2001-05-30 15:36:31 +00:00
|
|
|
* 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.
|
2014-05-02 13:34:02 +00:00
|
|
|
*
|
2001-05-30 15:36:31 +00:00
|
|
|
* You should have received a copy of the GNU General Public License
|
2014-01-12 01:42:06 +00:00
|
|
|
* along with this program; if not, see <http://www.gnu.org/licenses/>.
|
2001-05-30 15:36:31 +00:00
|
|
|
*/
|
|
|
|
|
2008-05-19 00:00:09 +00:00
|
|
|
#ifndef META_DISPLAY_PRIVATE_H
|
|
|
|
#define META_DISPLAY_PRIVATE_H
|
2001-05-30 15:36:31 +00:00
|
|
|
|
2002-10-27 03:03:32 +00:00
|
|
|
#ifndef PACKAGE
|
|
|
|
#error "config.h not included"
|
|
|
|
#endif
|
|
|
|
|
2001-05-30 15:36:31 +00:00
|
|
|
#include <glib.h>
|
2001-06-02 04:14:18 +00:00
|
|
|
#include <X11/Xlib.h>
|
2011-03-06 00:29:12 +00:00
|
|
|
#include <meta/common.h>
|
|
|
|
#include <meta/boxes.h>
|
|
|
|
#include <meta/display.h>
|
2009-01-29 14:53:03 +00:00
|
|
|
#include "keybindings-private.h"
|
2014-07-08 17:29:22 +00:00
|
|
|
#include "meta-gesture-tracker-private.h"
|
2011-03-06 00:29:12 +00:00
|
|
|
#include <meta/prefs.h>
|
2012-07-30 18:57:53 +00:00
|
|
|
#include <meta/barrier.h>
|
2013-10-03 19:29:44 +00:00
|
|
|
#include <clutter/clutter.h>
|
2001-05-30 15:36:31 +00:00
|
|
|
|
2002-10-25 23:35:50 +00:00
|
|
|
#ifdef HAVE_STARTUP_NOTIFICATION
|
|
|
|
#include <libsn/sn.h>
|
|
|
|
#endif
|
|
|
|
|
2002-12-10 03:23:04 +00:00
|
|
|
#include <X11/extensions/sync.h>
|
|
|
|
|
2002-04-28 04:52:26 +00:00
|
|
|
typedef struct _MetaStack MetaStack;
|
|
|
|
typedef struct _MetaUISlave MetaUISlave;
|
2001-05-30 15:36:31 +00:00
|
|
|
|
2002-12-01 03:58:04 +00:00
|
|
|
typedef struct _MetaGroupPropHooks MetaGroupPropHooks;
|
2009-06-14 12:37:57 +00:00
|
|
|
typedef struct _MetaWindowPropHooks MetaWindowPropHooks;
|
2002-11-03 23:42:21 +00:00
|
|
|
|
Merge of all the changes on the constraints_experiments branch. This is
2005-11-18 Elijah Newren <newren@gmail.com>
Merge of all the changes on the constraints_experiments branch.
This is just a summary, to get the full ChangeLog of those
changes (approx. 2000 lines):
cvs -q -z3 update -Pd -r constraints_experiments
cvs -q -z3 diff -pu -r CONSTRAINTS_EXPERIMENTS_BRANCHPOINT ChangeLog
Bugs fixed:
unfiled - constraints.c is overly complicated[1]
unfiled - constraints.c is not robust when all constraints
cannot simultaneously be met (constraints need to be
prioritized)
unfiled - keep-titlebar-onscreen constraint is decoration
unaware (since get_outermost_onscreen_positions()
forgets to include decorations)
unfiled - keyboard snap-moving and snap-resizing snap to hidden
edges
109553 - gravity w/ simultaneous move & resize doesn't work
113601 - maximize vertical and horizontal should toggle and be
constrained
122196 - windows show up under vertical panels
122670 - jerky/random resizing of window via keyboard[2]
124582 - keyboard and mouse snap-resizing and snap-moving
erroneously moves the window multidimensionally
136307 - don't allow apps to resize themselves off the screen
(*cough* filechooser *cough*)
142016, 143784 - windows should not span multiple xineramas
unless placed there by the user
143145 - clamp new windows to screensize and force them
onscreen, if they'll fit
144126 - Handle pathological strut lists sanely[3]
149867 - fixed aspect ratio windows are difficult to resize[4]
152898 - make screen edges consistent; allow easy slamming of
windows into the left, right, and bottom edges of the
screen too.
154706 - bouncing weirdness at screen edge with keyboard moving
or resizing
156699 - avoid struts when placing windows, if possible (nasty
a11y blocker)
302456 - dragging offscreen too restrictive
304857 - wireframe moving off the top of the screen is misleading
308521 - make uni-directional resizing easier with
alt-middle-drag and prevent the occasional super
annoying resize-the-wrong-side(s) behavior
312007 - snap-resize moves windows with a minimum size
constraint
312104 - resizing the top of a window can cause the bottom to
grow
319351 - don't instantly snap on mouse-move-snapping, remove
braindeadedness of having order of releasing shift and
releasing button press matter so much
[1] fixed in my opinion, anyway.
[2] Actually, it's not totally fixed--it's just annoying
instead of almost completely unusable. Matthias had a
suggestion that may fix the remainder of the problems (see
http://tinyurl.com/bwzuu).
[3] This bug was originally about not-quite-so-pathological
cases but was left open for the worse cases. The code from
the branch handles the remainder of the cases mentioned in
this bug.
[4] Actually, although it's far better there's still some minor
issues left: a slight drift that's only noticeable after
lots of resizing, and potential problems with partially
onscreen constraints due to not clearing any
fixed_directions flags (aspect ratio windows get resized in
both directions and thus aren't fixed in one of them)
New feature:
81704 - edge resistance for user move and resize operations;
in particular 3 different kinds of resistance are
implemented:
Pixel-Distance: window movement is resisted when it
aligns with an edge unless the movement is greater than
a threshold number of pixels
Timeout: window movement past an edge is prevented until
a certain amount of time has elapsed during the
operation since the first request to move it past that
edge
Keyboard-Buildup: when moving or resizing with the
keyboard, once a window is aligned with a certain edge
it cannot move past until the correct direction has
been pressed enough times (e.g. 2 or 3 times)
Major changes:
- constraints.c has been rewritten; very few lines of code from
the old version remain. There is a comment near the top of
the function explaining the basics of how the new framework
works. A more detailed explanation can be found in
doc/how-constraints-works.txt
- edge-resistance.[ch] are new files implementing edge-resistance.
- boxes.[ch] are new files containing low-level error-prone
functions used heavily in constraints.c and edge-resistance.c,
among various places throughout the code. testboxes.c
contains a thorough testsuite for the boxes.[ch] functions
compiled into a program, testboxes.
- meta_window_move_resize_internal() *must* be told the gravity
of the associated operation (if it's just a move operation,
the gravity will be ignored, but for resize and move+resize
the correct value is needed)
- the craziness of different values that
meta_window_move_resize_internal() accepts has been documented
in a large comment at the beginning of the function. It may
be possible to clean this up some, but until then things will
remain as they were before--caller beware.
- screen and xinerama usable areas (i.e. places not covered by
e.g. panels) are cached in the workspace now, as are the
screen and xinerama edges. These get updated with the
workarea in src/workspace.c:ensure_work_areas_validated()
2005-11-19 14:58:50 +00:00
|
|
|
typedef struct MetaEdgeResistanceData MetaEdgeResistanceData;
|
|
|
|
|
2009-06-15 19:32:23 +00:00
|
|
|
typedef enum {
|
|
|
|
META_LIST_DEFAULT = 0, /* normal windows */
|
|
|
|
META_LIST_INCLUDE_OVERRIDE_REDIRECT = 1 << 0, /* normal and O-R */
|
2014-09-29 22:01:17 +00:00
|
|
|
META_LIST_SORTED = 1 << 1, /* sort list by mru */
|
2009-06-15 19:32:23 +00:00
|
|
|
} MetaListWindowsFlags;
|
Screw around with Anders's ping patch so he'll get plenty of CVS
2002-02-26 Havoc Pennington <hp@pobox.com>
Screw around with Anders's ping patch so he'll get plenty of CVS
conflicts. ;-)
* src/display.c (meta_display_ping_window): spew warnings
if we try to call this with CurrentTime
(meta_display_ping_timeout): remove ping from the pending pings
after it times out.
* src/util.h: added PING debug category
* src/display.c (remove_pending_pings_for_window): don't remove
"tmp" just before "tmp->next", don't break out of loop after
finding the first match
(meta_display_open): no trailing comma in array init
(event_callback): move the processing of ping replies into a
separate function
* src/screen.c (set_supported_hint): add _NET_WM_PING to supported
list
* src/display.h: change gpointer to void*
2002-02-26 Anders Carlsson <andersca@gnu.org>
* src/display.c: (ping_data_free),
(remove_pending_pings_for_window), (meta_display_open),
(event_callback), (meta_display_unregister_x_window),
(meta_display_ping_timeout), (meta_display_ping_window),
(meta_display_window_has_pending_pings):
Implement meta_display_ping_window, and filter out scroll wheel
events.
* src/display.h:
Add MetaWindowPingFunc, meta_display_ping_window and
meta_display_window_has_pending_pings.
2002-02-27 02:05:39 +00:00
|
|
|
|
2001-06-09 06:08:44 +00:00
|
|
|
#define _NET_WM_STATE_REMOVE 0 /* remove/unset property */
|
|
|
|
#define _NET_WM_STATE_ADD 1 /* add/set property */
|
|
|
|
#define _NET_WM_STATE_TOGGLE 2 /* toggle property */
|
|
|
|
|
2002-03-02 15:26:07 +00:00
|
|
|
/* This is basically a bogus number, just has to be large enough
|
|
|
|
* to handle the expected case of the alt+tab operation, where
|
|
|
|
* we want to ignore serials from UnmapNotify on the tab popup,
|
2011-09-07 15:19:15 +00:00
|
|
|
* and the LeaveNotify/EnterNotify from the pointer ungrab. It
|
|
|
|
* also has to be big enough to hold ignored serials from the point
|
|
|
|
* where we reshape the stage to the point where we get events back.
|
2002-03-02 15:26:07 +00:00
|
|
|
*/
|
2011-09-12 13:50:30 +00:00
|
|
|
#define N_IGNORED_CROSSING_SERIALS 10
|
2002-03-02 15:26:07 +00:00
|
|
|
|
2011-01-19 16:00:18 +00:00
|
|
|
typedef enum {
|
|
|
|
META_TILE_NONE,
|
|
|
|
META_TILE_LEFT,
|
|
|
|
META_TILE_RIGHT,
|
|
|
|
META_TILE_MAXIMIZED
|
|
|
|
} MetaTileMode;
|
|
|
|
|
2014-08-15 17:12:22 +00:00
|
|
|
typedef enum {
|
|
|
|
/* Normal interaction where you're interacting with windows.
|
|
|
|
* Events go to windows normally. */
|
|
|
|
META_EVENT_ROUTE_NORMAL,
|
|
|
|
|
2015-01-19 19:27:27 +00:00
|
|
|
/* In a window operation like moving or resizing. All events
|
|
|
|
* goes to MetaWindow, but not to the actual client window. */
|
|
|
|
META_EVENT_ROUTE_WINDOW_OP,
|
|
|
|
|
2014-08-15 17:12:22 +00:00
|
|
|
/* In a compositor grab operation. All events go to the
|
|
|
|
* compositor plugin. */
|
|
|
|
META_EVENT_ROUTE_COMPOSITOR_GRAB,
|
|
|
|
|
|
|
|
/* A Wayland application has a popup open. All events go to
|
|
|
|
* the Wayland application. */
|
|
|
|
META_EVENT_ROUTE_WAYLAND_POPUP,
|
|
|
|
|
2015-01-19 19:27:27 +00:00
|
|
|
/* The user is clicking on a window button. */
|
|
|
|
META_EVENT_ROUTE_FRAME_BUTTON,
|
2014-08-15 17:12:22 +00:00
|
|
|
} MetaEventRoute;
|
|
|
|
|
2014-09-11 14:09:43 +00:00
|
|
|
typedef gboolean (*MetaAlarmFilter) (MetaDisplay *display,
|
|
|
|
XSyncAlarmNotifyEvent *event,
|
|
|
|
gpointer data);
|
|
|
|
|
2001-05-30 15:36:31 +00:00
|
|
|
struct _MetaDisplay
|
|
|
|
{
|
2008-12-02 22:58:07 +00:00
|
|
|
GObject parent_instance;
|
2014-05-02 13:34:02 +00:00
|
|
|
|
2001-05-30 15:36:31 +00:00
|
|
|
char *name;
|
|
|
|
Display *xdisplay;
|
2001-06-01 03:00:01 +00:00
|
|
|
|
2013-11-14 17:58:52 +00:00
|
|
|
int clutter_event_filter;
|
|
|
|
|
2001-06-09 21:58:30 +00:00
|
|
|
Window leader_window;
|
2007-03-31 05:19:41 +00:00
|
|
|
Window timestamp_pinging_window;
|
2010-06-04 17:57:41 +00:00
|
|
|
|
2008-05-02 18:49:01 +00:00
|
|
|
/* Pull in all the names of atoms as fields; we will intern them when the
|
|
|
|
* class is constructed.
|
|
|
|
*/
|
|
|
|
#define item(x) Atom atom_##x;
|
2015-04-27 23:36:46 +00:00
|
|
|
#include <x11/atomnames.h>
|
2008-05-02 18:49:01 +00:00
|
|
|
#undef item
|
2004-01-10 17:16:07 +00:00
|
|
|
|
2011-04-26 12:12:04 +00:00
|
|
|
/* The window and serial of the most recent FocusIn event. */
|
|
|
|
Window server_focus_window;
|
|
|
|
gulong server_focus_serial;
|
|
|
|
|
|
|
|
/* Our best guess as to the "currently" focused window (that is, the
|
|
|
|
* window that we expect will be focused at the point when the X
|
|
|
|
* server processes our next request), and the serial of the request
|
|
|
|
* or event that caused this.
|
2001-06-04 04:58:22 +00:00
|
|
|
*/
|
|
|
|
MetaWindow *focus_window;
|
2013-05-24 21:58:55 +00:00
|
|
|
/* For windows we've focused that don't necessarily have an X window,
|
|
|
|
* like the no_focus_window or the stage X window. */
|
|
|
|
Window focus_xwindow;
|
2011-04-26 12:12:04 +00:00
|
|
|
gulong focus_serial;
|
2002-08-08 04:45:13 +00:00
|
|
|
|
Big patch to cover about 6 different issues in order to correct rare
2005-02-20 Elijah Newren <newren@gmail.com>
Big patch to cover about 6 different issues in order to correct
rare problems with timestamps (make sure window selected in
tasklist actually gets focus, sanity check timestamps to avoid
rogue apps hosing the system, correct the updating of
net_wm_user_time, correctly handle timestamps of 0 when comparing
xserver timestamps for those who have had their systems up for
over 25 days or so, add some debugging information to verbose
logs, some code cleanups). Fixes all issues listed in #167358.
* src/display.h: (struct _MetaDisplay): clarify comment on
last_focus_time, introduce a new variable--last_user_time,
(XSERVER_TIME_IS_BEFORE macro): put this functionality into a
separate macro and then introduce a new macro with this name that
uses the old one but adds additional special-case checks for
timestamps that are 0, (comment to
meta_display_set_input_focus_window): add information about how
last_user_time should be used in this function
* src/display.c (santiy_check_timestamps): new function,
(meta_display_open): intialize display->last_user_time,
(meta_display_get_current_time_roundtrip): use the timestamp,
which is known to be good, in order to sanity_check_timestamps,
(event_callback): use the new meta_window_ste_user_time() function
in order to correct problems, use the timestamp of KeyPress and
ButtonPress events, which are known to be good, in order to
sanity_check_timestamps, (timestamp_too_old): new function for
common behavior of meta_display_focus_the_no_focus_window and
meta_display_set_input_focus_window, with added checking for
display->last_user_time in addition to display->last_focus_time,
(meta_display_set_input_focus_window): replace some of the code
with a call to timestamp_too_old(),
(meta_display_focus_the_no_focus_window): replace some of th ecode
with a call to timestamp_too_old()
* src/window.h: (meta_window_set_user_time): new function to
abstract the many things that need to be done when updating the
net_wm_user_time of any window
* src/window.c: (meta_window_activate): add debugging spew, make
sure the comparison is made with last_user_time NOT
last_focus_time, use meta_window_set_user_time() function in order
to correct problems, (meta_window_client_message): add a newline
to a debugging message to make them easier to read,
(meta_window_set_user_time): new function
* src/window-props.c (reload_net_wm_user_time): use the new
meta_window_ste_user_time() function in order to correct problems
2005-02-20 17:14:16 +00:00
|
|
|
/* last timestamp passed to XSetInputFocus */
|
Fix issues on 64-bit machines with timestamps by using guint32 (like gtk+
2006-09-13 Elijah Newren <newren gmail com>
* src/common.h (MetaWindowMenuFunc):
* src/core.[ch] (meta_core_user_lower_and_unfocus,
meta_core_user_focus, meta_core_show_window_menu,
meta_core_begin_grab_op, meta_core_end_grab_op):
* src/delete.c (delete_ping_reply_func, delete_ping_timeout_func,
meta_window_delete):
* src/display.[ch] (struct MetaDisplay, struct MetaPingData,
sanity_check_timestamps, meta_display_open, event_callback,
meta_spew_event, meta_display_set_grab_op_cursor,
meta_display_begin_grab_op, meta_display_end_grab_op,
meta_display_ping_timeout, meta_display_ping_window,
process_pong_message, timestamp_too_old,
meta_display_set_input_focus_window):
* src/keybindings.[ch] (grab_keyboard, ungrab_keyboard,
meta_screen_grab_all_keys, meta_window_grab_all_keys,
meta_window_ungrab_all_keys, error_on_generic_command,
error_on_command, error_on_terminal_command):
* src/metacity-dialog.c (on_realize, warn_about_no_sm_support,
error_about_command, main):
* src/screen.[ch] (struct _MetaScreen, meta_screen_new,
meta_screen_show_desktop, meta_screen_apply_startup_properties):
* src/session.c (warn_about_lame_clients_and_finish_interact):
* src/window.[ch] (struct _MetaWindow,
intervening_user_event_occurred, window_activate,
meta_window_delete, meta_window_focus,
meta_window_send_icccm_message, meta_window_client_message,
menu_callback, meta_window_show_menu, struct EventScannerData,
check_use_this_motion_notify, meta_window_begin_grab_op,
meta_window_set_user_time):
* src/workspace.[ch] (focus_ancestor_or_mru_window,
meta_workspace_activate_with_focus, meta_workspace_activate,
meta_workspace_focus_default_window,
focus_ancestor_or_mru_window):
Fix issues on 64-bit machines with timestamps by using guint32
(like gtk+ does) instead of Time. #348305
2006-09-13 16:32:33 +00:00
|
|
|
guint32 last_focus_time;
|
2004-12-23 06:44:56 +00:00
|
|
|
|
Big patch to cover about 6 different issues in order to correct rare
2005-02-20 Elijah Newren <newren@gmail.com>
Big patch to cover about 6 different issues in order to correct
rare problems with timestamps (make sure window selected in
tasklist actually gets focus, sanity check timestamps to avoid
rogue apps hosing the system, correct the updating of
net_wm_user_time, correctly handle timestamps of 0 when comparing
xserver timestamps for those who have had their systems up for
over 25 days or so, add some debugging information to verbose
logs, some code cleanups). Fixes all issues listed in #167358.
* src/display.h: (struct _MetaDisplay): clarify comment on
last_focus_time, introduce a new variable--last_user_time,
(XSERVER_TIME_IS_BEFORE macro): put this functionality into a
separate macro and then introduce a new macro with this name that
uses the old one but adds additional special-case checks for
timestamps that are 0, (comment to
meta_display_set_input_focus_window): add information about how
last_user_time should be used in this function
* src/display.c (santiy_check_timestamps): new function,
(meta_display_open): intialize display->last_user_time,
(meta_display_get_current_time_roundtrip): use the timestamp,
which is known to be good, in order to sanity_check_timestamps,
(event_callback): use the new meta_window_ste_user_time() function
in order to correct problems, use the timestamp of KeyPress and
ButtonPress events, which are known to be good, in order to
sanity_check_timestamps, (timestamp_too_old): new function for
common behavior of meta_display_focus_the_no_focus_window and
meta_display_set_input_focus_window, with added checking for
display->last_user_time in addition to display->last_focus_time,
(meta_display_set_input_focus_window): replace some of the code
with a call to timestamp_too_old(),
(meta_display_focus_the_no_focus_window): replace some of th ecode
with a call to timestamp_too_old()
* src/window.h: (meta_window_set_user_time): new function to
abstract the many things that need to be done when updating the
net_wm_user_time of any window
* src/window.c: (meta_window_activate): add debugging spew, make
sure the comparison is made with last_user_time NOT
last_focus_time, use meta_window_set_user_time() function in order
to correct problems, (meta_window_client_message): add a newline
to a debugging message to make them easier to read,
(meta_window_set_user_time): new function
* src/window-props.c (reload_net_wm_user_time): use the new
meta_window_ste_user_time() function in order to correct problems
2005-02-20 17:14:16 +00:00
|
|
|
/* last user interaction time in any app */
|
Fix issues on 64-bit machines with timestamps by using guint32 (like gtk+
2006-09-13 Elijah Newren <newren gmail com>
* src/common.h (MetaWindowMenuFunc):
* src/core.[ch] (meta_core_user_lower_and_unfocus,
meta_core_user_focus, meta_core_show_window_menu,
meta_core_begin_grab_op, meta_core_end_grab_op):
* src/delete.c (delete_ping_reply_func, delete_ping_timeout_func,
meta_window_delete):
* src/display.[ch] (struct MetaDisplay, struct MetaPingData,
sanity_check_timestamps, meta_display_open, event_callback,
meta_spew_event, meta_display_set_grab_op_cursor,
meta_display_begin_grab_op, meta_display_end_grab_op,
meta_display_ping_timeout, meta_display_ping_window,
process_pong_message, timestamp_too_old,
meta_display_set_input_focus_window):
* src/keybindings.[ch] (grab_keyboard, ungrab_keyboard,
meta_screen_grab_all_keys, meta_window_grab_all_keys,
meta_window_ungrab_all_keys, error_on_generic_command,
error_on_command, error_on_terminal_command):
* src/metacity-dialog.c (on_realize, warn_about_no_sm_support,
error_about_command, main):
* src/screen.[ch] (struct _MetaScreen, meta_screen_new,
meta_screen_show_desktop, meta_screen_apply_startup_properties):
* src/session.c (warn_about_lame_clients_and_finish_interact):
* src/window.[ch] (struct _MetaWindow,
intervening_user_event_occurred, window_activate,
meta_window_delete, meta_window_focus,
meta_window_send_icccm_message, meta_window_client_message,
menu_callback, meta_window_show_menu, struct EventScannerData,
check_use_this_motion_notify, meta_window_begin_grab_op,
meta_window_set_user_time):
* src/workspace.[ch] (focus_ancestor_or_mru_window,
meta_workspace_activate_with_focus, meta_workspace_activate,
meta_workspace_focus_default_window,
focus_ancestor_or_mru_window):
Fix issues on 64-bit machines with timestamps by using guint32
(like gtk+ does) instead of Time. #348305
2006-09-13 16:32:33 +00:00
|
|
|
guint32 last_user_time;
|
Big patch to cover about 6 different issues in order to correct rare
2005-02-20 Elijah Newren <newren@gmail.com>
Big patch to cover about 6 different issues in order to correct
rare problems with timestamps (make sure window selected in
tasklist actually gets focus, sanity check timestamps to avoid
rogue apps hosing the system, correct the updating of
net_wm_user_time, correctly handle timestamps of 0 when comparing
xserver timestamps for those who have had their systems up for
over 25 days or so, add some debugging information to verbose
logs, some code cleanups). Fixes all issues listed in #167358.
* src/display.h: (struct _MetaDisplay): clarify comment on
last_focus_time, introduce a new variable--last_user_time,
(XSERVER_TIME_IS_BEFORE macro): put this functionality into a
separate macro and then introduce a new macro with this name that
uses the old one but adds additional special-case checks for
timestamps that are 0, (comment to
meta_display_set_input_focus_window): add information about how
last_user_time should be used in this function
* src/display.c (santiy_check_timestamps): new function,
(meta_display_open): intialize display->last_user_time,
(meta_display_get_current_time_roundtrip): use the timestamp,
which is known to be good, in order to sanity_check_timestamps,
(event_callback): use the new meta_window_ste_user_time() function
in order to correct problems, use the timestamp of KeyPress and
ButtonPress events, which are known to be good, in order to
sanity_check_timestamps, (timestamp_too_old): new function for
common behavior of meta_display_focus_the_no_focus_window and
meta_display_set_input_focus_window, with added checking for
display->last_user_time in addition to display->last_focus_time,
(meta_display_set_input_focus_window): replace some of the code
with a call to timestamp_too_old(),
(meta_display_focus_the_no_focus_window): replace some of th ecode
with a call to timestamp_too_old()
* src/window.h: (meta_window_set_user_time): new function to
abstract the many things that need to be done when updating the
net_wm_user_time of any window
* src/window.c: (meta_window_activate): add debugging spew, make
sure the comparison is made with last_user_time NOT
last_focus_time, use meta_window_set_user_time() function in order
to correct problems, (meta_window_client_message): add a newline
to a debugging message to make them easier to read,
(meta_window_set_user_time): new function
* src/window-props.c (reload_net_wm_user_time): use the new
meta_window_ste_user_time() function in order to correct problems
2005-02-20 17:14:16 +00:00
|
|
|
|
2005-02-22 02:11:25 +00:00
|
|
|
/* whether we're using mousenav (only relevant for sloppy&mouse focus modes;
|
|
|
|
* !mouse_mode means "keynav mode")
|
|
|
|
*/
|
|
|
|
guint mouse_mode : 1;
|
|
|
|
|
2006-04-12 18:01:20 +00:00
|
|
|
/* Helper var used when focus_new_windows setting is 'strict'; only
|
|
|
|
* relevant in 'strict' mode and if the focus window is a terminal.
|
|
|
|
* In that case, we don't allow new windows to take focus away from
|
|
|
|
* a terminal, but if the user explicitly did something that should
|
|
|
|
* allow a different window to gain focus (e.g. global keybinding or
|
|
|
|
* clicking on a dock), then we will allow the transfer.
|
2006-01-15 17:03:57 +00:00
|
|
|
*/
|
|
|
|
guint allow_terminal_deactivation : 1;
|
|
|
|
|
2013-12-16 21:01:04 +00:00
|
|
|
/* If true, server->focus_serial refers to us changing the focus; in
|
|
|
|
* this case, we can ignore focus events that have exactly focus_serial,
|
|
|
|
* since we take care to make another request immediately afterwards.
|
|
|
|
* But if focus is being changed by another client, we have to accept
|
|
|
|
* multiple events with the same serial.
|
|
|
|
*/
|
|
|
|
guint focused_by_us : 1;
|
2014-05-02 13:34:02 +00:00
|
|
|
|
2001-06-01 03:00:01 +00:00
|
|
|
/*< private-ish >*/
|
2013-10-03 22:31:09 +00:00
|
|
|
MetaScreen *screen;
|
2013-02-06 22:02:59 +00:00
|
|
|
GHashTable *xids;
|
2014-09-09 01:20:14 +00:00
|
|
|
GHashTable *stamps;
|
2013-09-16 09:24:01 +00:00
|
|
|
GHashTable *wayland_windows;
|
2014-04-06 19:54:47 +00:00
|
|
|
|
2002-03-02 15:26:07 +00:00
|
|
|
/* serials of leave/unmap events that may
|
|
|
|
* correspond to an enter event we should
|
|
|
|
* ignore
|
|
|
|
*/
|
2011-09-12 13:50:30 +00:00
|
|
|
unsigned long ignored_crossing_serials[N_IGNORED_CROSSING_SERIALS];
|
2014-05-02 13:34:02 +00:00
|
|
|
|
2002-01-03 23:28:19 +00:00
|
|
|
guint32 current_time;
|
Screw around with Anders's ping patch so he'll get plenty of CVS
2002-02-26 Havoc Pennington <hp@pobox.com>
Screw around with Anders's ping patch so he'll get plenty of CVS
conflicts. ;-)
* src/display.c (meta_display_ping_window): spew warnings
if we try to call this with CurrentTime
(meta_display_ping_timeout): remove ping from the pending pings
after it times out.
* src/util.h: added PING debug category
* src/display.c (remove_pending_pings_for_window): don't remove
"tmp" just before "tmp->next", don't break out of loop after
finding the first match
(meta_display_open): no trailing comma in array init
(event_callback): move the processing of ping replies into a
separate function
* src/screen.c (set_supported_hint): add _NET_WM_PING to supported
list
* src/display.h: change gpointer to void*
2002-02-26 Anders Carlsson <andersca@gnu.org>
* src/display.c: (ping_data_free),
(remove_pending_pings_for_window), (meta_display_open),
(event_callback), (meta_display_unregister_x_window),
(meta_display_ping_timeout), (meta_display_ping_window),
(meta_display_window_has_pending_pings):
Implement meta_display_ping_window, and filter out scroll wheel
events.
* src/display.h:
Add MetaWindowPingFunc, meta_display_ping_window and
meta_display_window_has_pending_pings.
2002-02-27 02:05:39 +00:00
|
|
|
|
2009-09-19 00:50:11 +00:00
|
|
|
/* We maintain a sequence counter, incremented for each #MetaWindow
|
|
|
|
* created. This is exposed by meta_window_get_stable_sequence()
|
|
|
|
* but is otherwise not used inside mutter.
|
|
|
|
*
|
|
|
|
* It can be useful to plugins which want to sort windows in a
|
|
|
|
* stable fashion.
|
|
|
|
*/
|
|
|
|
guint32 window_sequence_counter;
|
|
|
|
|
Screw around with Anders's ping patch so he'll get plenty of CVS
2002-02-26 Havoc Pennington <hp@pobox.com>
Screw around with Anders's ping patch so he'll get plenty of CVS
conflicts. ;-)
* src/display.c (meta_display_ping_window): spew warnings
if we try to call this with CurrentTime
(meta_display_ping_timeout): remove ping from the pending pings
after it times out.
* src/util.h: added PING debug category
* src/display.c (remove_pending_pings_for_window): don't remove
"tmp" just before "tmp->next", don't break out of loop after
finding the first match
(meta_display_open): no trailing comma in array init
(event_callback): move the processing of ping replies into a
separate function
* src/screen.c (set_supported_hint): add _NET_WM_PING to supported
list
* src/display.h: change gpointer to void*
2002-02-26 Anders Carlsson <andersca@gnu.org>
* src/display.c: (ping_data_free),
(remove_pending_pings_for_window), (meta_display_open),
(event_callback), (meta_display_unregister_x_window),
(meta_display_ping_timeout), (meta_display_ping_window),
(meta_display_window_has_pending_pings):
Implement meta_display_ping_window, and filter out scroll wheel
events.
* src/display.h:
Add MetaWindowPingFunc, meta_display_ping_window and
meta_display_window_has_pending_pings.
2002-02-27 02:05:39 +00:00
|
|
|
/* Pings which we're waiting for a reply from */
|
2014-02-15 16:33:12 +00:00
|
|
|
GSList *pending_pings;
|
2002-05-24 02:23:46 +00:00
|
|
|
|
2012-08-29 02:38:54 +00:00
|
|
|
/* Pending focus change */
|
|
|
|
guint focus_timeout_id;
|
|
|
|
|
2002-05-24 02:23:46 +00:00
|
|
|
/* Pending autoraise */
|
|
|
|
guint autoraise_timeout_id;
|
2004-10-04 21:09:08 +00:00
|
|
|
MetaWindow* autoraise_window;
|
2002-10-07 23:14:40 +00:00
|
|
|
|
2014-08-15 17:12:22 +00:00
|
|
|
/* Event routing */
|
|
|
|
MetaEventRoute event_route;
|
|
|
|
|
2001-07-11 06:22:00 +00:00
|
|
|
/* current window operation */
|
|
|
|
MetaGrabOp grab_op;
|
|
|
|
MetaWindow *grab_window;
|
|
|
|
int grab_button;
|
2003-10-12 06:25:38 +00:00
|
|
|
int grab_anchor_root_x;
|
|
|
|
int grab_anchor_root_y;
|
|
|
|
MetaRectangle grab_anchor_window_pos;
|
2011-01-19 16:00:18 +00:00
|
|
|
MetaTileMode grab_tile_mode;
|
2011-10-08 15:00:16 +00:00
|
|
|
int grab_tile_monitor_number;
|
2002-12-10 03:23:04 +00:00
|
|
|
int grab_latest_motion_x;
|
|
|
|
int grab_latest_motion_y;
|
2001-07-11 06:22:00 +00:00
|
|
|
guint grab_have_pointer : 1;
|
|
|
|
guint grab_have_keyboard : 1;
|
2006-10-13 00:28:34 +00:00
|
|
|
guint grab_frame_action : 1;
|
2001-07-12 05:53:56 +00:00
|
|
|
MetaRectangle grab_initial_window_pos;
|
2006-01-20 23:02:24 +00:00
|
|
|
int grab_initial_x, grab_initial_y; /* These are only relevant for */
|
|
|
|
gboolean grab_threshold_movement_reached; /* raise_on_click == FALSE. */
|
2002-08-10 05:27:17 +00:00
|
|
|
GTimeVal grab_last_moveresize_time;
|
Merge of all the changes on the constraints_experiments branch. This is
2005-11-18 Elijah Newren <newren@gmail.com>
Merge of all the changes on the constraints_experiments branch.
This is just a summary, to get the full ChangeLog of those
changes (approx. 2000 lines):
cvs -q -z3 update -Pd -r constraints_experiments
cvs -q -z3 diff -pu -r CONSTRAINTS_EXPERIMENTS_BRANCHPOINT ChangeLog
Bugs fixed:
unfiled - constraints.c is overly complicated[1]
unfiled - constraints.c is not robust when all constraints
cannot simultaneously be met (constraints need to be
prioritized)
unfiled - keep-titlebar-onscreen constraint is decoration
unaware (since get_outermost_onscreen_positions()
forgets to include decorations)
unfiled - keyboard snap-moving and snap-resizing snap to hidden
edges
109553 - gravity w/ simultaneous move & resize doesn't work
113601 - maximize vertical and horizontal should toggle and be
constrained
122196 - windows show up under vertical panels
122670 - jerky/random resizing of window via keyboard[2]
124582 - keyboard and mouse snap-resizing and snap-moving
erroneously moves the window multidimensionally
136307 - don't allow apps to resize themselves off the screen
(*cough* filechooser *cough*)
142016, 143784 - windows should not span multiple xineramas
unless placed there by the user
143145 - clamp new windows to screensize and force them
onscreen, if they'll fit
144126 - Handle pathological strut lists sanely[3]
149867 - fixed aspect ratio windows are difficult to resize[4]
152898 - make screen edges consistent; allow easy slamming of
windows into the left, right, and bottom edges of the
screen too.
154706 - bouncing weirdness at screen edge with keyboard moving
or resizing
156699 - avoid struts when placing windows, if possible (nasty
a11y blocker)
302456 - dragging offscreen too restrictive
304857 - wireframe moving off the top of the screen is misleading
308521 - make uni-directional resizing easier with
alt-middle-drag and prevent the occasional super
annoying resize-the-wrong-side(s) behavior
312007 - snap-resize moves windows with a minimum size
constraint
312104 - resizing the top of a window can cause the bottom to
grow
319351 - don't instantly snap on mouse-move-snapping, remove
braindeadedness of having order of releasing shift and
releasing button press matter so much
[1] fixed in my opinion, anyway.
[2] Actually, it's not totally fixed--it's just annoying
instead of almost completely unusable. Matthias had a
suggestion that may fix the remainder of the problems (see
http://tinyurl.com/bwzuu).
[3] This bug was originally about not-quite-so-pathological
cases but was left open for the worse cases. The code from
the branch handles the remainder of the cases mentioned in
this bug.
[4] Actually, although it's far better there's still some minor
issues left: a slight drift that's only noticeable after
lots of resizing, and potential problems with partially
onscreen constraints due to not clearing any
fixed_directions flags (aspect ratio windows get resized in
both directions and thus aren't fixed in one of them)
New feature:
81704 - edge resistance for user move and resize operations;
in particular 3 different kinds of resistance are
implemented:
Pixel-Distance: window movement is resisted when it
aligns with an edge unless the movement is greater than
a threshold number of pixels
Timeout: window movement past an edge is prevented until
a certain amount of time has elapsed during the
operation since the first request to move it past that
edge
Keyboard-Buildup: when moving or resizing with the
keyboard, once a window is aligned with a certain edge
it cannot move past until the correct direction has
been pressed enough times (e.g. 2 or 3 times)
Major changes:
- constraints.c has been rewritten; very few lines of code from
the old version remain. There is a comment near the top of
the function explaining the basics of how the new framework
works. A more detailed explanation can be found in
doc/how-constraints-works.txt
- edge-resistance.[ch] are new files implementing edge-resistance.
- boxes.[ch] are new files containing low-level error-prone
functions used heavily in constraints.c and edge-resistance.c,
among various places throughout the code. testboxes.c
contains a thorough testsuite for the boxes.[ch] functions
compiled into a program, testboxes.
- meta_window_move_resize_internal() *must* be told the gravity
of the associated operation (if it's just a move operation,
the gravity will be ignored, but for resize and move+resize
the correct value is needed)
- the craziness of different values that
meta_window_move_resize_internal() accepts has been documented
in a large comment at the beginning of the function. It may
be possible to clean this up some, but until then things will
remain as they were before--caller beware.
- screen and xinerama usable areas (i.e. places not covered by
e.g. panels) are cached in the workspace now, as are the
screen and xinerama edges. These get updated with the
workarea in src/workspace.c:ensure_work_areas_validated()
2005-11-19 14:58:50 +00:00
|
|
|
MetaEdgeResistanceData *grab_edge_resistance_data;
|
2006-04-15 22:58:07 +00:00
|
|
|
unsigned int grab_last_user_action_was_snap;
|
|
|
|
|
2003-05-30 20:24:00 +00:00
|
|
|
/* we use property updates as sentinels for certain window focus events
|
|
|
|
* to avoid some race conditions on EnterNotify events
|
|
|
|
*/
|
|
|
|
int sentinel_counter;
|
|
|
|
|
2003-01-28 15:07:43 +00:00
|
|
|
int xkb_base_event_type;
|
Fix issues on 64-bit machines with timestamps by using guint32 (like gtk+
2006-09-13 Elijah Newren <newren gmail com>
* src/common.h (MetaWindowMenuFunc):
* src/core.[ch] (meta_core_user_lower_and_unfocus,
meta_core_user_focus, meta_core_show_window_menu,
meta_core_begin_grab_op, meta_core_end_grab_op):
* src/delete.c (delete_ping_reply_func, delete_ping_timeout_func,
meta_window_delete):
* src/display.[ch] (struct MetaDisplay, struct MetaPingData,
sanity_check_timestamps, meta_display_open, event_callback,
meta_spew_event, meta_display_set_grab_op_cursor,
meta_display_begin_grab_op, meta_display_end_grab_op,
meta_display_ping_timeout, meta_display_ping_window,
process_pong_message, timestamp_too_old,
meta_display_set_input_focus_window):
* src/keybindings.[ch] (grab_keyboard, ungrab_keyboard,
meta_screen_grab_all_keys, meta_window_grab_all_keys,
meta_window_ungrab_all_keys, error_on_generic_command,
error_on_command, error_on_terminal_command):
* src/metacity-dialog.c (on_realize, warn_about_no_sm_support,
error_about_command, main):
* src/screen.[ch] (struct _MetaScreen, meta_screen_new,
meta_screen_show_desktop, meta_screen_apply_startup_properties):
* src/session.c (warn_about_lame_clients_and_finish_interact):
* src/window.[ch] (struct _MetaWindow,
intervening_user_event_occurred, window_activate,
meta_window_delete, meta_window_focus,
meta_window_send_icccm_message, meta_window_client_message,
menu_callback, meta_window_show_menu, struct EventScannerData,
check_use_this_motion_notify, meta_window_begin_grab_op,
meta_window_set_user_time):
* src/workspace.[ch] (focus_ancestor_or_mru_window,
meta_workspace_activate_with_focus, meta_workspace_activate,
meta_workspace_focus_default_window,
focus_ancestor_or_mru_window):
Fix issues on 64-bit machines with timestamps by using guint32
(like gtk+ does) instead of Time. #348305
2006-09-13 16:32:33 +00:00
|
|
|
guint32 last_bell_time;
|
Fix bug 143333, support for update counter spec, and 109362, schedule
Sat Jun 19 02:21:08 2004 Soeren Sandmann <sandmann@daimi.au.dk>
Fix bug 143333, support for update counter spec, and 109362,
schedule compensation events when events are ignored.
* src/display.c (meta_display_open): Add _NET_WM_SYNC_REQUEST and
_NET_WM_SYNC_REQUEST_COUNTER atoms. Remove the old
METACITY_SYNC_COUNTER stuff.
(meta_display_begin_op): Setup the sync counter
* src/xprops.c, src/xprops.h, src/window-props.c, src/display.h:
Add new atoms.
* src/window.c (send_sync_request): new function.
(meta_window_move_resize_internal): send a sync request before
resizing.
(check_move_resize_frequence): Rework logic to also check the SYNC
case. If an event is ignored return the remaining time.
(update_resize_timeout): Timeout that gets called when a
compensation event is scheduled.
(uddate_resize): schedule compensation events when an event is
ignored.
(meta_window_handle_mouse_grap_op_event): When an alarm is
received and sync was turned off, turn it back on.
* src/window.h (struct MetaWindow) Add some variables
2004-06-19 00:45:24 +00:00
|
|
|
int grab_resize_timeout_id;
|
2002-04-28 04:52:26 +00:00
|
|
|
|
2014-08-14 19:33:45 +00:00
|
|
|
MetaKeyBindingManager key_binding_manager;
|
2014-05-02 13:34:02 +00:00
|
|
|
|
2009-08-31 13:52:16 +00:00
|
|
|
/* Monitor cache */
|
|
|
|
unsigned int monitor_cache_invalidated : 1;
|
2002-06-22 05:11:04 +00:00
|
|
|
|
2006-10-01 21:59:09 +00:00
|
|
|
/* Opening the display */
|
|
|
|
unsigned int display_opening : 1;
|
|
|
|
|
2002-06-22 05:11:04 +00:00
|
|
|
/* Closing down the display */
|
|
|
|
int closing;
|
2002-08-12 21:32:13 +00:00
|
|
|
|
|
|
|
/* Managed by group.c */
|
|
|
|
GHashTable *groups_by_leader;
|
2002-10-27 03:03:32 +00:00
|
|
|
|
2002-11-03 23:42:21 +00:00
|
|
|
/* Managed by window-props.c */
|
2009-06-14 12:37:57 +00:00
|
|
|
MetaWindowPropHooks *prop_hooks_table;
|
2009-01-29 14:32:31 +00:00
|
|
|
GHashTable *prop_hooks;
|
2009-06-14 12:37:57 +00:00
|
|
|
int n_prop_hooks;
|
2002-12-01 03:58:04 +00:00
|
|
|
|
|
|
|
/* Managed by group-props.c */
|
|
|
|
MetaGroupPropHooks *group_prop_hooks;
|
2003-11-21 02:32:05 +00:00
|
|
|
|
|
|
|
/* Managed by compositor.c */
|
|
|
|
MetaCompositor *compositor;
|
2009-05-07 21:56:27 +00:00
|
|
|
|
2014-06-19 20:28:48 +00:00
|
|
|
MetaGestureTracker *gesture_tracker;
|
2014-07-21 23:14:14 +00:00
|
|
|
ClutterEventSequence *pointer_emulating_sequence;
|
2014-06-19 20:28:48 +00:00
|
|
|
|
2014-09-11 14:09:43 +00:00
|
|
|
MetaAlarmFilter alarm_filter;
|
|
|
|
gpointer alarm_filter_data;
|
|
|
|
|
2009-05-07 21:56:27 +00:00
|
|
|
int composite_event_base;
|
|
|
|
int composite_error_base;
|
|
|
|
int composite_major_version;
|
|
|
|
int composite_minor_version;
|
|
|
|
int damage_event_base;
|
|
|
|
int damage_error_base;
|
|
|
|
int xfixes_event_base;
|
|
|
|
int xfixes_error_base;
|
2012-11-15 20:57:08 +00:00
|
|
|
int xinput_error_base;
|
|
|
|
int xinput_event_base;
|
|
|
|
int xinput_opcode;
|
|
|
|
|
2002-10-27 03:03:32 +00:00
|
|
|
#ifdef HAVE_STARTUP_NOTIFICATION
|
|
|
|
SnDisplay *sn_display;
|
|
|
|
#endif
|
2002-12-10 03:23:04 +00:00
|
|
|
int xsync_event_base;
|
|
|
|
int xsync_error_base;
|
2003-01-05 07:51:02 +00:00
|
|
|
int shape_event_base;
|
|
|
|
int shape_error_base;
|
2004-08-27 02:17:49 +00:00
|
|
|
unsigned int have_xsync : 1;
|
|
|
|
#define META_DISPLAY_HAS_XSYNC(display) ((display)->have_xsync)
|
|
|
|
unsigned int have_shape : 1;
|
|
|
|
#define META_DISPLAY_HAS_SHAPE(display) ((display)->have_shape)
|
Merge compositor branch.
2007-12-18 Iain Holmes <iain@gnome.org>
* configure.in, src/theme.c, src/display.c,
src/theme.h, src/display.h, src/theme-parser.c,
src/compositor.c, src/c-screen.c, src/compositor.h,
src/c-screen.h, src/ui.c, src/screen.c, src/ui.h,
src/screen.h, src/c-window.c, src/c-window.h,
src/theme-viewer.c, src/Makefile.am: Merge compositor branch.
svn path=/trunk/; revision=3483
2007-12-19 03:49:50 +00:00
|
|
|
unsigned int have_composite : 1;
|
|
|
|
unsigned int have_damage : 1;
|
|
|
|
#define META_DISPLAY_HAS_COMPOSITE(display) ((display)->have_composite)
|
|
|
|
#define META_DISPLAY_HAS_DAMAGE(display) ((display)->have_damage)
|
2012-07-30 18:57:53 +00:00
|
|
|
#ifdef HAVE_XI23
|
|
|
|
gboolean have_xinput_23 : 1;
|
|
|
|
#define META_DISPLAY_HAS_XINPUT_23(display) ((display)->have_xinput_23)
|
|
|
|
#else
|
|
|
|
#define META_DISPLAY_HAS_XINPUT_23(display) FALSE
|
|
|
|
#endif /* HAVE_XI23 */
|
2001-05-30 15:36:31 +00:00
|
|
|
};
|
|
|
|
|
2008-12-02 22:58:07 +00:00
|
|
|
struct _MetaDisplayClass
|
|
|
|
{
|
|
|
|
GObjectClass parent_class;
|
|
|
|
};
|
|
|
|
|
Big patch to cover about 6 different issues in order to correct rare
2005-02-20 Elijah Newren <newren@gmail.com>
Big patch to cover about 6 different issues in order to correct
rare problems with timestamps (make sure window selected in
tasklist actually gets focus, sanity check timestamps to avoid
rogue apps hosing the system, correct the updating of
net_wm_user_time, correctly handle timestamps of 0 when comparing
xserver timestamps for those who have had their systems up for
over 25 days or so, add some debugging information to verbose
logs, some code cleanups). Fixes all issues listed in #167358.
* src/display.h: (struct _MetaDisplay): clarify comment on
last_focus_time, introduce a new variable--last_user_time,
(XSERVER_TIME_IS_BEFORE macro): put this functionality into a
separate macro and then introduce a new macro with this name that
uses the old one but adds additional special-case checks for
timestamps that are 0, (comment to
meta_display_set_input_focus_window): add information about how
last_user_time should be used in this function
* src/display.c (santiy_check_timestamps): new function,
(meta_display_open): intialize display->last_user_time,
(meta_display_get_current_time_roundtrip): use the timestamp,
which is known to be good, in order to sanity_check_timestamps,
(event_callback): use the new meta_window_ste_user_time() function
in order to correct problems, use the timestamp of KeyPress and
ButtonPress events, which are known to be good, in order to
sanity_check_timestamps, (timestamp_too_old): new function for
common behavior of meta_display_focus_the_no_focus_window and
meta_display_set_input_focus_window, with added checking for
display->last_user_time in addition to display->last_focus_time,
(meta_display_set_input_focus_window): replace some of the code
with a call to timestamp_too_old(),
(meta_display_focus_the_no_focus_window): replace some of th ecode
with a call to timestamp_too_old()
* src/window.h: (meta_window_set_user_time): new function to
abstract the many things that need to be done when updating the
net_wm_user_time of any window
* src/window.c: (meta_window_activate): add debugging spew, make
sure the comparison is made with last_user_time NOT
last_focus_time, use meta_window_set_user_time() function in order
to correct problems, (meta_window_client_message): add a newline
to a debugging message to make them easier to read,
(meta_window_set_user_time): new function
* src/window-props.c (reload_net_wm_user_time): use the new
meta_window_ste_user_time() function in order to correct problems
2005-02-20 17:14:16 +00:00
|
|
|
#define XSERVER_TIME_IS_BEFORE_ASSUMING_REAL_TIMESTAMPS(time1, time2) \
|
2006-01-20 22:08:52 +00:00
|
|
|
( (( (time1) < (time2) ) && ( (time2) - (time1) < ((guint32)-1)/2 )) || \
|
|
|
|
(( (time1) > (time2) ) && ( (time1) - (time2) > ((guint32)-1)/2 )) \
|
Big patch to cover about 6 different issues in order to correct rare
2005-02-20 Elijah Newren <newren@gmail.com>
Big patch to cover about 6 different issues in order to correct
rare problems with timestamps (make sure window selected in
tasklist actually gets focus, sanity check timestamps to avoid
rogue apps hosing the system, correct the updating of
net_wm_user_time, correctly handle timestamps of 0 when comparing
xserver timestamps for those who have had their systems up for
over 25 days or so, add some debugging information to verbose
logs, some code cleanups). Fixes all issues listed in #167358.
* src/display.h: (struct _MetaDisplay): clarify comment on
last_focus_time, introduce a new variable--last_user_time,
(XSERVER_TIME_IS_BEFORE macro): put this functionality into a
separate macro and then introduce a new macro with this name that
uses the old one but adds additional special-case checks for
timestamps that are 0, (comment to
meta_display_set_input_focus_window): add information about how
last_user_time should be used in this function
* src/display.c (santiy_check_timestamps): new function,
(meta_display_open): intialize display->last_user_time,
(meta_display_get_current_time_roundtrip): use the timestamp,
which is known to be good, in order to sanity_check_timestamps,
(event_callback): use the new meta_window_ste_user_time() function
in order to correct problems, use the timestamp of KeyPress and
ButtonPress events, which are known to be good, in order to
sanity_check_timestamps, (timestamp_too_old): new function for
common behavior of meta_display_focus_the_no_focus_window and
meta_display_set_input_focus_window, with added checking for
display->last_user_time in addition to display->last_focus_time,
(meta_display_set_input_focus_window): replace some of the code
with a call to timestamp_too_old(),
(meta_display_focus_the_no_focus_window): replace some of th ecode
with a call to timestamp_too_old()
* src/window.h: (meta_window_set_user_time): new function to
abstract the many things that need to be done when updating the
net_wm_user_time of any window
* src/window.c: (meta_window_activate): add debugging spew, make
sure the comparison is made with last_user_time NOT
last_focus_time, use meta_window_set_user_time() function in order
to correct problems, (meta_window_client_message): add a newline
to a debugging message to make them easier to read,
(meta_window_set_user_time): new function
* src/window-props.c (reload_net_wm_user_time): use the new
meta_window_ste_user_time() function in order to correct problems
2005-02-20 17:14:16 +00:00
|
|
|
)
|
2010-04-17 18:43:08 +00:00
|
|
|
/**
|
|
|
|
* XSERVER_TIME_IS_BEFORE:
|
|
|
|
*
|
|
|
|
* See the docs for meta_display_xserver_time_is_before().
|
|
|
|
*/
|
Big patch to cover about 6 different issues in order to correct rare
2005-02-20 Elijah Newren <newren@gmail.com>
Big patch to cover about 6 different issues in order to correct
rare problems with timestamps (make sure window selected in
tasklist actually gets focus, sanity check timestamps to avoid
rogue apps hosing the system, correct the updating of
net_wm_user_time, correctly handle timestamps of 0 when comparing
xserver timestamps for those who have had their systems up for
over 25 days or so, add some debugging information to verbose
logs, some code cleanups). Fixes all issues listed in #167358.
* src/display.h: (struct _MetaDisplay): clarify comment on
last_focus_time, introduce a new variable--last_user_time,
(XSERVER_TIME_IS_BEFORE macro): put this functionality into a
separate macro and then introduce a new macro with this name that
uses the old one but adds additional special-case checks for
timestamps that are 0, (comment to
meta_display_set_input_focus_window): add information about how
last_user_time should be used in this function
* src/display.c (santiy_check_timestamps): new function,
(meta_display_open): intialize display->last_user_time,
(meta_display_get_current_time_roundtrip): use the timestamp,
which is known to be good, in order to sanity_check_timestamps,
(event_callback): use the new meta_window_ste_user_time() function
in order to correct problems, use the timestamp of KeyPress and
ButtonPress events, which are known to be good, in order to
sanity_check_timestamps, (timestamp_too_old): new function for
common behavior of meta_display_focus_the_no_focus_window and
meta_display_set_input_focus_window, with added checking for
display->last_user_time in addition to display->last_focus_time,
(meta_display_set_input_focus_window): replace some of the code
with a call to timestamp_too_old(),
(meta_display_focus_the_no_focus_window): replace some of th ecode
with a call to timestamp_too_old()
* src/window.h: (meta_window_set_user_time): new function to
abstract the many things that need to be done when updating the
net_wm_user_time of any window
* src/window.c: (meta_window_activate): add debugging spew, make
sure the comparison is made with last_user_time NOT
last_focus_time, use meta_window_set_user_time() function in order
to correct problems, (meta_window_client_message): add a newline
to a debugging message to make them easier to read,
(meta_window_set_user_time): new function
* src/window-props.c (reload_net_wm_user_time): use the new
meta_window_ste_user_time() function in order to correct problems
2005-02-20 17:14:16 +00:00
|
|
|
#define XSERVER_TIME_IS_BEFORE(time1, time2) \
|
2006-01-20 22:08:52 +00:00
|
|
|
( (time1) == 0 || \
|
Big patch to cover about 6 different issues in order to correct rare
2005-02-20 Elijah Newren <newren@gmail.com>
Big patch to cover about 6 different issues in order to correct
rare problems with timestamps (make sure window selected in
tasklist actually gets focus, sanity check timestamps to avoid
rogue apps hosing the system, correct the updating of
net_wm_user_time, correctly handle timestamps of 0 when comparing
xserver timestamps for those who have had their systems up for
over 25 days or so, add some debugging information to verbose
logs, some code cleanups). Fixes all issues listed in #167358.
* src/display.h: (struct _MetaDisplay): clarify comment on
last_focus_time, introduce a new variable--last_user_time,
(XSERVER_TIME_IS_BEFORE macro): put this functionality into a
separate macro and then introduce a new macro with this name that
uses the old one but adds additional special-case checks for
timestamps that are 0, (comment to
meta_display_set_input_focus_window): add information about how
last_user_time should be used in this function
* src/display.c (santiy_check_timestamps): new function,
(meta_display_open): intialize display->last_user_time,
(meta_display_get_current_time_roundtrip): use the timestamp,
which is known to be good, in order to sanity_check_timestamps,
(event_callback): use the new meta_window_ste_user_time() function
in order to correct problems, use the timestamp of KeyPress and
ButtonPress events, which are known to be good, in order to
sanity_check_timestamps, (timestamp_too_old): new function for
common behavior of meta_display_focus_the_no_focus_window and
meta_display_set_input_focus_window, with added checking for
display->last_user_time in addition to display->last_focus_time,
(meta_display_set_input_focus_window): replace some of the code
with a call to timestamp_too_old(),
(meta_display_focus_the_no_focus_window): replace some of th ecode
with a call to timestamp_too_old()
* src/window.h: (meta_window_set_user_time): new function to
abstract the many things that need to be done when updating the
net_wm_user_time of any window
* src/window.c: (meta_window_activate): add debugging spew, make
sure the comparison is made with last_user_time NOT
last_focus_time, use meta_window_set_user_time() function in order
to correct problems, (meta_window_client_message): add a newline
to a debugging message to make them easier to read,
(meta_window_set_user_time): new function
* src/window-props.c (reload_net_wm_user_time): use the new
meta_window_ste_user_time() function in order to correct problems
2005-02-20 17:14:16 +00:00
|
|
|
(XSERVER_TIME_IS_BEFORE_ASSUMING_REAL_TIMESTAMPS(time1, time2) && \
|
2006-01-20 22:08:52 +00:00
|
|
|
(time2) != 0) \
|
2004-12-23 06:44:56 +00:00
|
|
|
)
|
|
|
|
|
2006-05-04 17:32:26 +00:00
|
|
|
gboolean meta_display_open (void);
|
Partial audit to fix timestamp usage. One step towards fixing #355180; see
2006-09-18 Elijah Newren <newren gmail com>
Partial audit to fix timestamp usage. One step towards fixing
#355180; see important comments in that bug.
* src/core.[ch] (meta_core_unshade, meta_core_shade):
* src/delete.c (meta_window_present_delete_dialog,
delete_ping_timeout_func):
* src/display.[ch] (meta_display_open, meta_display_close,
event_callback, meta_display_begin_grab_op,
process_selection_clear, meta_display_unmanage_screen,
meta_display_unmanage_windows_for_screen):
* src/frames.c (meta_frames_button_press_event):
* src/keybindings.c (handle_toggle_shade):
* src/main.c (main):
* src/screen.[ch] (update_num_workspaces, meta_screen_new,
meta_screen_free, prefs_changed_callback):
* src/window.[ch] (meta_window_free, finish_minimize,
implement_showing, meta_window_show, meta_window_maximize,
meta_window_make_fullscreen_internal,
meta_window_unmake_fullscreen, meta_window_shade,
meta_window_unshade, window_activate, send_sync_request,
meta_window_client_message, menu_callback,
meta_window_update_keyboard_resize):
Remove usage of CurrentTime, meta_display_get_current_time() and
meta_display_get_current_time_roundtrip() where possible, or
document why it isn't possible, or at very least add a FIXME with
some explanation of my laziness and what needs to be done.
2006-09-18 17:27:24 +00:00
|
|
|
void meta_display_close (MetaDisplay *display,
|
|
|
|
guint32 timestamp);
|
2001-06-01 03:00:01 +00:00
|
|
|
|
2002-06-08 23:55:27 +00:00
|
|
|
void meta_display_unmanage_windows_for_screen (MetaDisplay *display,
|
Partial audit to fix timestamp usage. One step towards fixing #355180; see
2006-09-18 Elijah Newren <newren gmail com>
Partial audit to fix timestamp usage. One step towards fixing
#355180; see important comments in that bug.
* src/core.[ch] (meta_core_unshade, meta_core_shade):
* src/delete.c (meta_window_present_delete_dialog,
delete_ping_timeout_func):
* src/display.[ch] (meta_display_open, meta_display_close,
event_callback, meta_display_begin_grab_op,
process_selection_clear, meta_display_unmanage_screen,
meta_display_unmanage_windows_for_screen):
* src/frames.c (meta_frames_button_press_event):
* src/keybindings.c (handle_toggle_shade):
* src/main.c (main):
* src/screen.[ch] (update_num_workspaces, meta_screen_new,
meta_screen_free, prefs_changed_callback):
* src/window.[ch] (meta_window_free, finish_minimize,
implement_showing, meta_window_show, meta_window_maximize,
meta_window_make_fullscreen_internal,
meta_window_unmake_fullscreen, meta_window_shade,
meta_window_unshade, window_activate, send_sync_request,
meta_window_client_message, menu_callback,
meta_window_update_keyboard_resize):
Remove usage of CurrentTime, meta_display_get_current_time() and
meta_display_get_current_time_roundtrip() where possible, or
document why it isn't possible, or at very least add a FIXME with
some explanation of my laziness and what needs to be done.
2006-09-18 17:27:24 +00:00
|
|
|
MetaScreen *screen,
|
|
|
|
guint32 timestamp);
|
2002-06-08 23:55:27 +00:00
|
|
|
|
2007-04-16 04:57:32 +00:00
|
|
|
/* Utility function to compare the stacking of two windows */
|
|
|
|
int meta_display_stack_cmp (const void *a,
|
|
|
|
const void *b);
|
|
|
|
|
2001-05-31 06:42:58 +00:00
|
|
|
/* A given MetaWindow may have various X windows that "belong"
|
|
|
|
* to it, such as the frame window.
|
|
|
|
*/
|
|
|
|
MetaWindow* meta_display_lookup_x_window (MetaDisplay *display,
|
|
|
|
Window xwindow);
|
|
|
|
void meta_display_register_x_window (MetaDisplay *display,
|
|
|
|
Window *xwindowp,
|
|
|
|
MetaWindow *window);
|
|
|
|
void meta_display_unregister_x_window (MetaDisplay *display,
|
|
|
|
Window xwindow);
|
|
|
|
|
2014-09-09 01:20:14 +00:00
|
|
|
/* Each MetaWindow is uniquely identified by a 64-bit "stamp"; unlike a
|
|
|
|
* a MetaWindow *, a stamp will never be recycled
|
|
|
|
*/
|
|
|
|
MetaWindow* meta_display_lookup_stamp (MetaDisplay *display,
|
|
|
|
guint64 stamp);
|
|
|
|
void meta_display_register_stamp (MetaDisplay *display,
|
|
|
|
guint64 *stampp,
|
|
|
|
MetaWindow *window);
|
|
|
|
void meta_display_unregister_stamp (MetaDisplay *display,
|
|
|
|
guint64 stamp);
|
|
|
|
|
|
|
|
/* A "stack id" is a XID or a stamp */
|
|
|
|
|
|
|
|
#define META_STACK_ID_IS_X11(id) ((id) < G_GUINT64_CONSTANT(0x100000000))
|
|
|
|
MetaWindow* meta_display_lookup_stack_id (MetaDisplay *display,
|
|
|
|
guint64 stack_id);
|
|
|
|
|
|
|
|
/* for debug logging only; returns a human-description of the stack
|
|
|
|
* ID - a small number of buffers are recycled, so the result must
|
|
|
|
* be used immediately or copied */
|
|
|
|
const char *meta_display_describe_stack_id (MetaDisplay *display,
|
|
|
|
guint64 stack_id);
|
|
|
|
|
2013-09-16 09:24:01 +00:00
|
|
|
void meta_display_register_wayland_window (MetaDisplay *display,
|
|
|
|
MetaWindow *window);
|
|
|
|
void meta_display_unregister_wayland_window (MetaDisplay *display,
|
|
|
|
MetaWindow *window);
|
|
|
|
|
2011-06-08 15:26:03 +00:00
|
|
|
MetaWindow* meta_display_lookup_sync_alarm (MetaDisplay *display,
|
|
|
|
XSyncAlarm alarm);
|
|
|
|
void meta_display_register_sync_alarm (MetaDisplay *display,
|
|
|
|
XSyncAlarm *alarmp,
|
|
|
|
MetaWindow *window);
|
|
|
|
void meta_display_unregister_sync_alarm (MetaDisplay *display,
|
|
|
|
XSyncAlarm alarm);
|
|
|
|
|
2009-10-13 14:34:34 +00:00
|
|
|
void meta_display_notify_window_created (MetaDisplay *display,
|
|
|
|
MetaWindow *window);
|
|
|
|
|
2009-06-15 19:32:23 +00:00
|
|
|
GSList* meta_display_list_windows (MetaDisplay *display,
|
|
|
|
MetaListWindowsFlags flags);
|
2001-05-30 15:36:31 +00:00
|
|
|
|
2001-05-31 03:30:58 +00:00
|
|
|
MetaDisplay* meta_display_for_x_display (Display *xdisplay);
|
MetaDisplay becomes a singleton. The static variable which holds this
2008-03-25 Thomas Thurman <tthurman@gnome.org>
* src/core/display.c (meta_display_queue_retheme_all_windows,
meta_set_syncing, meta_display_set_cursor_theme, disable_compositor,
meta_display_for_x_display, meta_display_open, meta_display_close,
meta_display_ungrab): MetaDisplay becomes a singleton. The static
variable which holds this singleton is renamed "the_display" so as
not to mask the this parameter in the methods.
* src/core/main.c (main):
* src/core/session.c (warn_about_lame_clients_and_finish_inte,
save_state, io_from_warning_dialog):
* src/core/core.c (meta_core_increment_event_serial):
* src/core/delete.c (release_window_with_fd, search_and_destroy_window):
sympathy changes for this, and consequent simplification.
Closes #499301.
svn path=/trunk/; revision=3663
2008-03-25 03:39:13 +00:00
|
|
|
MetaDisplay* meta_get_display (void);
|
2001-05-30 15:36:31 +00:00
|
|
|
|
2001-07-26 03:14:45 +00:00
|
|
|
Cursor meta_display_create_x_cursor (MetaDisplay *display,
|
|
|
|
MetaCursor cursor);
|
|
|
|
|
2014-05-14 13:16:20 +00:00
|
|
|
void meta_display_update_cursor (MetaDisplay *display);
|
Patch to provide extra cues to the user when using window menu move and
2002-08-08 Craig Black <blackc@speakeasy.net>
Patch to provide extra cues to the user when using
window menu move and resize, #85724.
* src/common.h: add new cursors
* src/display.c: (grab_op_is_mouse)
(meta_display_create_x_cursor), (xcursor_for_op),
(meta_display_set_grab_op_cursor),
(meta_display_begin_grab_op):
The keyboard move and resize grab ops now also use the mouse.
Allow the grab cursor to be changed during the grab op.
Hold onto the initial grab position in case of reset.
* src/display.h: save the initial grab position
* src/keybindings.c: (process_keyboard_move_grab),
(process_keyboard_resize_grab), (handle_begin_move),
(handle_begin_resize):
The keyboard move and resize grab ops now also use the mouse.
* src/window.c: (meta_window_client_message), (menu_callback),
(update_move), (update_resize),
(meta_window_handle_mouse_grab_op_event), (warp_pointer),
(meta_window_warp_pointer), (meta_window_begin_grab_op),
(meta_window_update_resize_grab_op):
When moving or resizing a window use the last grab position
in computing change increment.
Provide support for warping the mouse pointer.
* src/window.h: new warp pointer and grab op helper functions
2002-08-09 04:27:23 +00:00
|
|
|
|
Add a raise on click option, basically only because all the major distros
2006-01-10 Elijah Newren <newren@gmail.com>
Add a raise on click option, basically only because all the major
distros are patching it in anyway. See #326156.
* src/metacity.schemas.in: add the new gconf key and explanation
* src/prefs.[ch] (#define KEY_RAISE_ON_CLICK, static gboolean
raise_on_click, update_raise_on_click, meta_prefs_init,
change_notify, meta_prefs_get_raise_on_click,
meta_preference_to_string):
Add all the normal preference handling stuff for this new
raise-on-click option.
* src/core.c (meta_core_show_window_menu):
* src/display.c (event_callback, meta_display_begin_grab_op):
* src/window.c (window_activate, meta_window_configure_request, ):
Only raise the window if in raise_on_click mode.
* src/display.c (meta_display_begin_grab_op,
meta_display_end_grab_op, meta_display_check_threshold_reached):
* src/display.h (struct MetaDisplay):
* src/window.c (meta_window_handle_mouse_grab_op_event):
if not in raise-on-click mode only raise on button release if the
click didn't start a move or resize operation; needs a few extra
MetaDisplay fields to handle this
* src/core.c (meta_core_user_lower_and_unfocus):
no need to do the MRU shuffling if not maintaining the stacking
order == MRU order invariant
* src/frames.c (meta_frames_button_press_event):
* src/window.c (meta_window_begin_grab_op):
remove an unneeded window raising that is already handled elsewhere
2006-01-10 19:35:03 +00:00
|
|
|
void meta_display_check_threshold_reached (MetaDisplay *display,
|
|
|
|
int x,
|
|
|
|
int y);
|
2001-07-26 03:14:45 +00:00
|
|
|
void meta_display_grab_window_buttons (MetaDisplay *display,
|
|
|
|
Window xwindow);
|
|
|
|
void meta_display_ungrab_window_buttons (MetaDisplay *display,
|
|
|
|
Window xwindow);
|
2001-07-11 06:22:00 +00:00
|
|
|
|
2001-12-11 04:03:58 +00:00
|
|
|
void meta_display_grab_focus_window_button (MetaDisplay *display,
|
2003-10-13 20:15:40 +00:00
|
|
|
MetaWindow *window);
|
2001-12-11 04:03:58 +00:00
|
|
|
void meta_display_ungrab_focus_window_button (MetaDisplay *display,
|
2003-10-13 20:15:40 +00:00
|
|
|
MetaWindow *window);
|
2001-12-10 07:48:21 +00:00
|
|
|
|
2010-02-09 21:44:16 +00:00
|
|
|
/* Next function is defined in edge-resistance.c */
|
|
|
|
void meta_display_cleanup_edges (MetaDisplay *display);
|
Merge of all the changes on the constraints_experiments branch. This is
2005-11-18 Elijah Newren <newren@gmail.com>
Merge of all the changes on the constraints_experiments branch.
This is just a summary, to get the full ChangeLog of those
changes (approx. 2000 lines):
cvs -q -z3 update -Pd -r constraints_experiments
cvs -q -z3 diff -pu -r CONSTRAINTS_EXPERIMENTS_BRANCHPOINT ChangeLog
Bugs fixed:
unfiled - constraints.c is overly complicated[1]
unfiled - constraints.c is not robust when all constraints
cannot simultaneously be met (constraints need to be
prioritized)
unfiled - keep-titlebar-onscreen constraint is decoration
unaware (since get_outermost_onscreen_positions()
forgets to include decorations)
unfiled - keyboard snap-moving and snap-resizing snap to hidden
edges
109553 - gravity w/ simultaneous move & resize doesn't work
113601 - maximize vertical and horizontal should toggle and be
constrained
122196 - windows show up under vertical panels
122670 - jerky/random resizing of window via keyboard[2]
124582 - keyboard and mouse snap-resizing and snap-moving
erroneously moves the window multidimensionally
136307 - don't allow apps to resize themselves off the screen
(*cough* filechooser *cough*)
142016, 143784 - windows should not span multiple xineramas
unless placed there by the user
143145 - clamp new windows to screensize and force them
onscreen, if they'll fit
144126 - Handle pathological strut lists sanely[3]
149867 - fixed aspect ratio windows are difficult to resize[4]
152898 - make screen edges consistent; allow easy slamming of
windows into the left, right, and bottom edges of the
screen too.
154706 - bouncing weirdness at screen edge with keyboard moving
or resizing
156699 - avoid struts when placing windows, if possible (nasty
a11y blocker)
302456 - dragging offscreen too restrictive
304857 - wireframe moving off the top of the screen is misleading
308521 - make uni-directional resizing easier with
alt-middle-drag and prevent the occasional super
annoying resize-the-wrong-side(s) behavior
312007 - snap-resize moves windows with a minimum size
constraint
312104 - resizing the top of a window can cause the bottom to
grow
319351 - don't instantly snap on mouse-move-snapping, remove
braindeadedness of having order of releasing shift and
releasing button press matter so much
[1] fixed in my opinion, anyway.
[2] Actually, it's not totally fixed--it's just annoying
instead of almost completely unusable. Matthias had a
suggestion that may fix the remainder of the problems (see
http://tinyurl.com/bwzuu).
[3] This bug was originally about not-quite-so-pathological
cases but was left open for the worse cases. The code from
the branch handles the remainder of the cases mentioned in
this bug.
[4] Actually, although it's far better there's still some minor
issues left: a slight drift that's only noticeable after
lots of resizing, and potential problems with partially
onscreen constraints due to not clearing any
fixed_directions flags (aspect ratio windows get resized in
both directions and thus aren't fixed in one of them)
New feature:
81704 - edge resistance for user move and resize operations;
in particular 3 different kinds of resistance are
implemented:
Pixel-Distance: window movement is resisted when it
aligns with an edge unless the movement is greater than
a threshold number of pixels
Timeout: window movement past an edge is prevented until
a certain amount of time has elapsed during the
operation since the first request to move it past that
edge
Keyboard-Buildup: when moving or resizing with the
keyboard, once a window is aligned with a certain edge
it cannot move past until the correct direction has
been pressed enough times (e.g. 2 or 3 times)
Major changes:
- constraints.c has been rewritten; very few lines of code from
the old version remain. There is a comment near the top of
the function explaining the basics of how the new framework
works. A more detailed explanation can be found in
doc/how-constraints-works.txt
- edge-resistance.[ch] are new files implementing edge-resistance.
- boxes.[ch] are new files containing low-level error-prone
functions used heavily in constraints.c and edge-resistance.c,
among various places throughout the code. testboxes.c
contains a thorough testsuite for the boxes.[ch] functions
compiled into a program, testboxes.
- meta_window_move_resize_internal() *must* be told the gravity
of the associated operation (if it's just a move operation,
the gravity will be ignored, but for resize and move+resize
the correct value is needed)
- the craziness of different values that
meta_window_move_resize_internal() accepts has been documented
in a large comment at the beginning of the function. It may
be possible to clean this up some, but until then things will
remain as they were before--caller beware.
- screen and xinerama usable areas (i.e. places not covered by
e.g. panels) are cached in the workspace now, as are the
screen and xinerama edges. These get updated with the
workarea in src/workspace.c:ensure_work_areas_validated()
2005-11-19 14:58:50 +00:00
|
|
|
|
2001-08-30 04:01:38 +00:00
|
|
|
/* make a request to ensure the event serial has changed */
|
|
|
|
void meta_display_increment_event_serial (MetaDisplay *display);
|
2001-06-06 04:47:37 +00:00
|
|
|
|
2001-10-07 23:06:19 +00:00
|
|
|
void meta_display_update_active_window_hint (MetaDisplay *display);
|
|
|
|
|
2002-01-06 03:15:49 +00:00
|
|
|
/* utility goo */
|
2002-03-02 15:26:07 +00:00
|
|
|
const char* meta_event_mode_to_string (int m);
|
|
|
|
const char* meta_event_detail_to_string (int d);
|
2002-01-06 03:15:49 +00:00
|
|
|
|
2002-02-07 03:25:34 +00:00
|
|
|
void meta_display_queue_retheme_all_windows (MetaDisplay *display);
|
|
|
|
void meta_display_retheme_all (void);
|
|
|
|
|
2014-05-20 18:48:08 +00:00
|
|
|
void meta_display_ping_window (MetaWindow *window,
|
|
|
|
guint32 serial);
|
|
|
|
void meta_display_pong_for_serial (MetaDisplay *display,
|
|
|
|
guint32 serial);
|
2014-02-15 16:33:12 +00:00
|
|
|
|
2002-03-17 17:22:23 +00:00
|
|
|
int meta_resize_gravity_from_grab_op (MetaGrabOp op);
|
|
|
|
|
2002-12-10 03:23:04 +00:00
|
|
|
gboolean meta_grab_op_is_moving (MetaGrabOp op);
|
|
|
|
gboolean meta_grab_op_is_resizing (MetaGrabOp op);
|
2014-04-20 15:45:38 +00:00
|
|
|
gboolean meta_grab_op_is_mouse (MetaGrabOp op);
|
2014-03-20 19:29:30 +00:00
|
|
|
gboolean meta_grab_op_is_keyboard (MetaGrabOp op);
|
2002-12-10 03:23:04 +00:00
|
|
|
|
2003-05-30 20:24:00 +00:00
|
|
|
void meta_display_increment_focus_sentinel (MetaDisplay *display);
|
|
|
|
void meta_display_decrement_focus_sentinel (MetaDisplay *display);
|
|
|
|
gboolean meta_display_focus_sentinel_clear (MetaDisplay *display);
|
|
|
|
|
2004-10-04 21:09:08 +00:00
|
|
|
void meta_display_queue_autoraise_callback (MetaDisplay *display,
|
|
|
|
MetaWindow *window);
|
|
|
|
void meta_display_remove_autoraise_callback (MetaDisplay *display);
|
|
|
|
|
2008-12-02 23:13:11 +00:00
|
|
|
void meta_display_overlay_key_activate (MetaDisplay *display);
|
2013-10-03 22:03:53 +00:00
|
|
|
void meta_display_accelerator_activate (MetaDisplay *display,
|
|
|
|
guint action,
|
|
|
|
ClutterKeyEvent *event);
|
2013-04-10 11:34:26 +00:00
|
|
|
gboolean meta_display_modifiers_accelerator_activate (MetaDisplay *display);
|
2008-12-02 23:13:11 +00:00
|
|
|
|
2012-07-30 18:57:53 +00:00
|
|
|
#ifdef HAVE_XI23
|
2015-01-07 08:53:38 +00:00
|
|
|
gboolean meta_display_process_barrier_xevent (MetaDisplay *display,
|
|
|
|
XIEvent *event);
|
2012-07-30 18:57:53 +00:00
|
|
|
#endif /* HAVE_XI23 */
|
|
|
|
|
2014-02-23 17:28:51 +00:00
|
|
|
void meta_display_set_input_focus_xwindow (MetaDisplay *display,
|
|
|
|
MetaScreen *screen,
|
|
|
|
Window window,
|
|
|
|
guint32 timestamp);
|
2013-05-23 20:21:24 +00:00
|
|
|
|
2014-03-11 17:45:39 +00:00
|
|
|
void meta_display_sync_wayland_input_focus (MetaDisplay *display);
|
2014-03-20 19:29:30 +00:00
|
|
|
void meta_display_update_focus_window (MetaDisplay *display,
|
|
|
|
MetaWindow *window,
|
|
|
|
Window xwindow,
|
|
|
|
gulong serial,
|
|
|
|
gboolean focused_by_us);
|
|
|
|
|
|
|
|
void meta_display_sanity_check_timestamps (MetaDisplay *display,
|
|
|
|
guint32 timestamp);
|
2014-03-20 20:06:24 +00:00
|
|
|
gboolean meta_display_timestamp_too_old (MetaDisplay *display,
|
|
|
|
guint32 *timestamp);
|
2014-03-11 17:45:39 +00:00
|
|
|
|
2014-07-08 16:16:11 +00:00
|
|
|
void meta_display_remove_pending_pings_for_window (MetaDisplay *display,
|
|
|
|
MetaWindow *window);
|
|
|
|
|
2014-06-19 20:28:48 +00:00
|
|
|
MetaGestureTracker * meta_display_get_gesture_tracker (MetaDisplay *display);
|
|
|
|
|
2014-05-08 22:35:49 +00:00
|
|
|
gboolean meta_display_show_restart_message (MetaDisplay *display,
|
|
|
|
const char *message);
|
|
|
|
gboolean meta_display_request_restart (MetaDisplay *display);
|
|
|
|
|
2014-12-30 01:20:07 +00:00
|
|
|
gboolean meta_display_show_resize_popup (MetaDisplay *display,
|
|
|
|
gboolean show,
|
|
|
|
MetaRectangle *rect,
|
|
|
|
int display_w,
|
|
|
|
int display_h);
|
|
|
|
|
2014-05-08 22:35:49 +00:00
|
|
|
void meta_restart_init (void);
|
|
|
|
void meta_restart_finish (void);
|
|
|
|
|
2014-07-22 00:07:19 +00:00
|
|
|
void meta_display_cancel_touch (MetaDisplay *display);
|
|
|
|
|
2014-08-15 17:12:22 +00:00
|
|
|
gboolean meta_display_windows_are_interactable (MetaDisplay *display);
|
|
|
|
|
2014-09-12 19:12:09 +00:00
|
|
|
void meta_display_set_alarm_filter (MetaDisplay *display,
|
2014-09-12 18:55:07 +00:00
|
|
|
MetaAlarmFilter filter,
|
|
|
|
gpointer data);
|
2014-09-11 14:09:43 +00:00
|
|
|
|
2001-05-30 15:36:31 +00:00
|
|
|
#endif
|