mirror of
https://github.com/brl/mutter.git
synced 2024-12-01 04:10:43 -05:00
86de79cfc5
In all places (including src/wayland) we tap into meta_x11_display* focus API, which then calls meta_display* API. This relation is backwards, so rework input focus management so it's the other way around. We now have high-level meta_display_(un)set_input_focus functions, which perform the backend-independent maintenance, and calls into the X11 functions where relevant. These functions are what callers should use. https://gitlab.gnome.org/GNOME/mutter/merge_requests/420
310 lines
10 KiB
C
310 lines
10 KiB
C
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
|
|
|
/*
|
|
* Copyright (C) 2008 Iain Holmes
|
|
*
|
|
* 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, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#ifndef META_DISPLAY_H
|
|
#define META_DISPLAY_H
|
|
|
|
#include <glib-object.h>
|
|
#include <X11/Xlib.h>
|
|
|
|
#include <meta/types.h>
|
|
#include <meta/prefs.h>
|
|
#include <meta/common.h>
|
|
#include <meta/workspace.h>
|
|
#include <meta/meta-sound-player.h>
|
|
#include <meta/meta-startup-notification.h>
|
|
|
|
/**
|
|
* MetaTabList:
|
|
* @META_TAB_LIST_NORMAL: Normal windows
|
|
* @META_TAB_LIST_DOCKS: Dock windows
|
|
* @META_TAB_LIST_GROUP: Groups
|
|
* @META_TAB_LIST_NORMAL_ALL: All windows
|
|
*/
|
|
typedef enum
|
|
{
|
|
META_TAB_LIST_NORMAL,
|
|
META_TAB_LIST_DOCKS,
|
|
META_TAB_LIST_GROUP,
|
|
META_TAB_LIST_NORMAL_ALL
|
|
} MetaTabList;
|
|
|
|
/**
|
|
* MetaTabShowType:
|
|
* @META_TAB_SHOW_ICON: Show icon (Alt-Tab mode)
|
|
* @META_TAB_SHOW_INSTANTLY: Show instantly (Alt-Esc mode)
|
|
*/
|
|
typedef enum
|
|
{
|
|
META_TAB_SHOW_ICON, /* Alt-Tab mode */
|
|
META_TAB_SHOW_INSTANTLY /* Alt-Esc mode */
|
|
} MetaTabShowType;
|
|
|
|
typedef enum
|
|
{
|
|
META_PAD_ACTION_BUTTON, /* Action is a button */
|
|
META_PAD_ACTION_RING, /* Action is a ring */
|
|
META_PAD_ACTION_STRIP, /* Action is a strip */
|
|
} MetaPadActionType;
|
|
|
|
typedef struct _MetaDisplayClass MetaDisplayClass;
|
|
|
|
#define META_TYPE_DISPLAY (meta_display_get_type ())
|
|
#define META_DISPLAY(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), META_TYPE_DISPLAY, MetaDisplay))
|
|
#define META_DISPLAY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), META_TYPE_DISPLAY, MetaDisplayClass))
|
|
#define META_IS_DISPLAY(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), META_TYPE_DISPLAY))
|
|
#define META_IS_DISPLAY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), META_TYPE_DISPLAY))
|
|
#define META_DISPLAY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), META_TYPE_DISPLAY, MetaDisplayClass))
|
|
|
|
META_EXPORT
|
|
GType meta_display_get_type (void) G_GNUC_CONST;
|
|
|
|
#define meta_XFree(p) do { if ((p)) XFree ((p)); } while (0)
|
|
|
|
META_EXPORT
|
|
gboolean meta_display_supports_extended_barriers (MetaDisplay *display);
|
|
|
|
META_EXPORT
|
|
void meta_display_close (MetaDisplay *display,
|
|
guint32 timestamp);
|
|
|
|
META_EXPORT
|
|
MetaCompositor *meta_display_get_compositor (MetaDisplay *display);
|
|
|
|
META_EXPORT
|
|
MetaX11Display *meta_display_get_x11_display (MetaDisplay *display);
|
|
|
|
META_EXPORT
|
|
MetaWindow *meta_display_get_focus_window (MetaDisplay *display);
|
|
|
|
META_EXPORT
|
|
gboolean meta_display_xserver_time_is_before (MetaDisplay *display,
|
|
guint32 time1,
|
|
guint32 time2);
|
|
|
|
META_EXPORT
|
|
guint32 meta_display_get_last_user_time (MetaDisplay *display);
|
|
|
|
META_EXPORT
|
|
guint32 meta_display_get_current_time (MetaDisplay *display);
|
|
|
|
META_EXPORT
|
|
guint32 meta_display_get_current_time_roundtrip (MetaDisplay *display);
|
|
|
|
META_EXPORT
|
|
GList* meta_display_get_tab_list (MetaDisplay *display,
|
|
MetaTabList type,
|
|
MetaWorkspace *workspace);
|
|
|
|
META_EXPORT
|
|
MetaWindow* meta_display_get_tab_next (MetaDisplay *display,
|
|
MetaTabList type,
|
|
MetaWorkspace *workspace,
|
|
MetaWindow *window,
|
|
gboolean backward);
|
|
|
|
META_EXPORT
|
|
MetaWindow* meta_display_get_tab_current (MetaDisplay *display,
|
|
MetaTabList type,
|
|
MetaWorkspace *workspace);
|
|
|
|
META_EXPORT
|
|
gboolean meta_display_begin_grab_op (MetaDisplay *display,
|
|
MetaWindow *window,
|
|
MetaGrabOp op,
|
|
gboolean pointer_already_grabbed,
|
|
gboolean frame_action,
|
|
int button,
|
|
gulong modmask,
|
|
guint32 timestamp,
|
|
int root_x,
|
|
int root_y);
|
|
|
|
META_EXPORT
|
|
void meta_display_end_grab_op (MetaDisplay *display,
|
|
guint32 timestamp);
|
|
|
|
META_EXPORT
|
|
MetaGrabOp meta_display_get_grab_op (MetaDisplay *display);
|
|
|
|
META_EXPORT
|
|
guint meta_display_add_keybinding (MetaDisplay *display,
|
|
const char *name,
|
|
GSettings *settings,
|
|
MetaKeyBindingFlags flags,
|
|
MetaKeyHandlerFunc handler,
|
|
gpointer user_data,
|
|
GDestroyNotify free_data);
|
|
|
|
META_EXPORT
|
|
gboolean meta_display_remove_keybinding (MetaDisplay *display,
|
|
const char *name);
|
|
|
|
META_EXPORT
|
|
guint meta_display_grab_accelerator (MetaDisplay *display,
|
|
const char *accelerator,
|
|
MetaKeyBindingFlags flags);
|
|
|
|
META_EXPORT
|
|
gboolean meta_display_ungrab_accelerator (MetaDisplay *display,
|
|
guint action_id);
|
|
|
|
META_EXPORT
|
|
guint meta_display_get_keybinding_action (MetaDisplay *display,
|
|
unsigned int keycode,
|
|
unsigned long mask);
|
|
|
|
META_EXPORT
|
|
GSList *meta_display_sort_windows_by_stacking (MetaDisplay *display,
|
|
GSList *windows);
|
|
|
|
META_EXPORT
|
|
void meta_display_add_ignored_crossing_serial (MetaDisplay *display,
|
|
unsigned long serial);
|
|
|
|
META_EXPORT
|
|
void meta_display_clear_mouse_mode (MetaDisplay *display);
|
|
|
|
META_EXPORT
|
|
void meta_display_freeze_keyboard (MetaDisplay *display,
|
|
guint32 timestamp);
|
|
|
|
META_EXPORT
|
|
void meta_display_ungrab_keyboard (MetaDisplay *display,
|
|
guint32 timestamp);
|
|
|
|
META_EXPORT
|
|
void meta_display_unfreeze_keyboard (MetaDisplay *display,
|
|
guint32 timestamp);
|
|
|
|
META_EXPORT
|
|
gboolean meta_display_is_pointer_emulating_sequence (MetaDisplay *display,
|
|
ClutterEventSequence *sequence);
|
|
|
|
META_EXPORT
|
|
void meta_display_request_pad_osd (MetaDisplay *display,
|
|
ClutterInputDevice *pad,
|
|
gboolean edition_mode);
|
|
|
|
META_EXPORT
|
|
gchar * meta_display_get_pad_action_label (MetaDisplay *display,
|
|
ClutterInputDevice *pad,
|
|
MetaPadActionType action_type,
|
|
guint action_number);
|
|
|
|
META_EXPORT
|
|
void meta_display_get_size (MetaDisplay *display,
|
|
int *width,
|
|
int *height);
|
|
|
|
META_EXPORT
|
|
void meta_display_set_cursor (MetaDisplay *display,
|
|
MetaCursor cursor);
|
|
|
|
/**
|
|
* MetaDisplayDirection:
|
|
* @META_DISPLAY_UP: up
|
|
* @META_DISPLAY_DOWN: down
|
|
* @META_DISPLAY_LEFT: left
|
|
* @META_DISPLAY_RIGHT: right
|
|
*/
|
|
typedef enum
|
|
{
|
|
META_DISPLAY_UP,
|
|
META_DISPLAY_DOWN,
|
|
META_DISPLAY_LEFT,
|
|
META_DISPLAY_RIGHT
|
|
} MetaDisplayDirection;
|
|
|
|
META_EXPORT
|
|
int meta_display_get_n_monitors (MetaDisplay *display);
|
|
|
|
META_EXPORT
|
|
int meta_display_get_primary_monitor (MetaDisplay *display);
|
|
|
|
META_EXPORT
|
|
int meta_display_get_current_monitor (MetaDisplay *display);
|
|
|
|
META_EXPORT
|
|
void meta_display_get_monitor_geometry (MetaDisplay *display,
|
|
int monitor,
|
|
MetaRectangle *geometry);
|
|
|
|
META_EXPORT
|
|
float meta_display_get_monitor_scale (MetaDisplay *display,
|
|
int monitor);
|
|
|
|
META_EXPORT
|
|
gboolean meta_display_get_monitor_in_fullscreen (MetaDisplay *display,
|
|
int monitor);
|
|
|
|
META_EXPORT
|
|
int meta_display_get_monitor_index_for_rect (MetaDisplay *display,
|
|
MetaRectangle *rect);
|
|
|
|
META_EXPORT
|
|
int meta_display_get_monitor_neighbor_index (MetaDisplay *display,
|
|
int which_monitor,
|
|
MetaDisplayDirection dir);
|
|
|
|
META_EXPORT
|
|
void meta_display_focus_default_window (MetaDisplay *display,
|
|
guint32 timestamp);
|
|
|
|
/**
|
|
* MetaDisplayCorner:
|
|
* @META_DISPLAY_TOPLEFT: top-left corner
|
|
* @META_DISPLAY_TOPRIGHT: top-right corner
|
|
* @META_DISPLAY_BOTTOMLEFT: bottom-left corner
|
|
* @META_DISPLAY_BOTTOMRIGHT: bottom-right corner
|
|
*/
|
|
typedef enum
|
|
{
|
|
META_DISPLAY_TOPLEFT,
|
|
META_DISPLAY_TOPRIGHT,
|
|
META_DISPLAY_BOTTOMLEFT,
|
|
META_DISPLAY_BOTTOMRIGHT
|
|
} MetaDisplayCorner;
|
|
|
|
META_EXPORT
|
|
MetaWorkspaceManager *meta_display_get_workspace_manager (MetaDisplay *display);
|
|
|
|
/**
|
|
* meta_display_get_startup_notification: (skip)
|
|
*/
|
|
META_EXPORT
|
|
MetaStartupNotification * meta_display_get_startup_notification (MetaDisplay *display);
|
|
|
|
META_EXPORT
|
|
MetaSoundPlayer * meta_display_get_sound_player (MetaDisplay *display);
|
|
|
|
META_EXPORT
|
|
MetaSelection * meta_display_get_selection (MetaDisplay *display);
|
|
|
|
META_EXPORT
|
|
void meta_display_set_input_focus (MetaDisplay *display,
|
|
MetaWindow *window,
|
|
gboolean focus_frame,
|
|
guint32 timestamp);
|
|
META_EXPORT
|
|
void meta_display_unset_input_focus (MetaDisplay *display,
|
|
guint32 timestamp);
|
|
|
|
#endif
|