[libwnck/wip/muktupavels/wnck-handle: 2/9] add wnck_handle_new and deprecate wnck_set_client_type
- From: Alberts Muktupāvels <muktupavels src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libwnck/wip/muktupavels/wnck-handle: 2/9] add wnck_handle_new and deprecate wnck_set_client_type
- Date: Mon, 19 Aug 2019 19:12:24 +0000 (UTC)
commit bf197b07d402812bc6bd4bb78075cd9d085a4288
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date: Mon Aug 19 17:29:54 2019 +0300
add wnck_handle_new and deprecate wnck_set_client_type
libwnck/private.h | 3 +-
libwnck/screen.c | 20 +++++++
libwnck/screen.h | 4 ++
libwnck/util.c | 25 +++++---
libwnck/util.h | 1 +
libwnck/window.c | 89 ++++++++++++++--------------
libwnck/wnck-handle-private.h | 2 +
libwnck/wnck-handle.c | 106 ++++++++++++++++++++++++++++++++-
libwnck/wnck-handle.h | 3 +
libwnck/xutils.c | 134 +++++++++++++++++++++++++-----------------
libwnck/xutils.h | 42 +++++++------
11 files changed, 302 insertions(+), 127 deletions(-)
---
diff --git a/libwnck/private.h b/libwnck/private.h
index 1122f34..270ad99 100644
--- a/libwnck/private.h
+++ b/libwnck/private.h
@@ -30,6 +30,7 @@
#include "xutils.h"
#include "pager.h"
#include "util.h"
+#include "wnck-handle.h"
#ifdef HAVE_STARTUP_NOTIFICATION
#include <libsn/sn.h>
#endif
@@ -38,7 +39,7 @@ G_BEGIN_DECLS
#define WNCK_ACTIVATE_TIMEOUT 1
-WnckClientType _wnck_get_client_type (void);
+WnckHandle *_wnck_get_handle (void);
gsize _wnck_get_default_icon_size (void);
gsize _wnck_get_default_mini_icon_size (void);
diff --git a/libwnck/screen.c b/libwnck/screen.c
index 96325a1..1105099 100644
--- a/libwnck/screen.c
+++ b/libwnck/screen.c
@@ -69,6 +69,8 @@ static WnckScreen** screens = NULL;
struct _WnckScreenPrivate
{
+ WnckHandle *handle;
+
int number;
Window xroot;
Screen *xscreen;
@@ -529,6 +531,8 @@ wnck_screen_construct (Display *display,
WnckScreen *screen,
int number)
{
+ screen->priv->handle = _wnck_get_handle ();
+
/* Create the initial state of the screen. */
screen->priv->xroot = RootWindow (display, number);
screen->priv->xscreen = ScreenOfDisplay (display, number);
@@ -675,6 +679,22 @@ wnck_screen_get_for_root (gulong root_window_id)
return NULL;
}
+/**
+ * wnck_screen_get_handle:
+ * @screen: a #WnckScreen.
+ *
+ * Gets the handle.
+ *
+ * Returns: (transfer none): a #WnckHandle, or %NULL.
+ */
+WnckHandle *
+wnck_screen_get_handle (WnckScreen *screen)
+{
+ g_return_val_if_fail (WNCK_IS_SCREEN (screen), NULL);
+
+ return screen->priv->handle;
+}
+
/**
* wnck_screen_get_number:
* @screen: a #WnckScreen.
diff --git a/libwnck/screen.h b/libwnck/screen.h
index 3140ea5..153cf5f 100644
--- a/libwnck/screen.h
+++ b/libwnck/screen.h
@@ -33,6 +33,7 @@ G_BEGIN_DECLS
/* forward decls */
typedef struct _WnckApplication WnckApplication;
typedef struct _WnckClassGroup WnckClassGroup;
+typedef struct _WnckHandle WnckHandle;
typedef struct _WnckWindow WnckWindow;
typedef struct _WnckWorkspace WnckWorkspace;
@@ -196,6 +197,9 @@ GType wnck_screen_get_type (void) G_GNUC_CONST;
WnckScreen* wnck_screen_get_default (void);
WnckScreen* wnck_screen_get (int index);
WnckScreen* wnck_screen_get_for_root (gulong root_window_id);
+
+WnckHandle* wnck_screen_get_handle (WnckScreen *screen);
+
int wnck_screen_get_number (WnckScreen *screen);
WnckWorkspace* wnck_screen_get_workspace (WnckScreen *screen,
int workspace);
diff --git a/libwnck/util.c b/libwnck/util.c
index c8e0e6e..e08fabc 100644
--- a/libwnck/util.c
+++ b/libwnck/util.c
@@ -655,16 +655,23 @@ wnck_set_client_type (WnckClientType ewmh_sourceindication_client_type)
client_type = ewmh_sourceindication_client_type;
}
-WnckClientType
-_wnck_get_client_type (void)
+static WnckHandle *wnck_handle = NULL;
+
+WnckHandle *
+_wnck_get_handle (void)
{
- /* If the type hasn't been set yet, use the default--treat it as a
- * normal application.
- */
- if (client_type == 0)
- client_type = WNCK_CLIENT_TYPE_APPLICATION;
+ if (wnck_handle == NULL)
+ {
+ /* If the type hasn't been set yet, use the default--treat it as a
+ * normal application.
+ */
+ if (client_type == 0)
+ client_type = WNCK_CLIENT_TYPE_APPLICATION;
- return client_type;
+ wnck_handle = wnck_handle_new (client_type);
+ }
+
+ return wnck_handle;
}
static gsize default_icon_size = WNCK_DEFAULT_ICON_SIZE;
@@ -844,6 +851,8 @@ wnck_shutdown (void)
_wnck_screen_shutdown_all ();
_wnck_window_shutdown_all ();
+ g_clear_object (&wnck_handle);
+
#ifdef HAVE_XRES
if (xres_removeid != 0)
g_source_remove (xres_removeid);
diff --git a/libwnck/util.h b/libwnck/util.h
index 8d0c77b..f17d37a 100644
--- a/libwnck/util.h
+++ b/libwnck/util.h
@@ -100,6 +100,7 @@ typedef enum {
WNCK_CLIENT_TYPE_PAGER = 2
} WnckClientType;
+G_DEPRECATED_FOR(wnck_handle_new)
void wnck_set_client_type (WnckClientType ewmh_sourceindication_client_type);
#define WNCK_DEFAULT_ICON_SIZE 32
diff --git a/libwnck/window.c b/libwnck/window.c
index 315bf67..7190077 100644
--- a/libwnck/window.c
+++ b/libwnck/window.c
@@ -33,6 +33,7 @@
#include "xutils.h"
#include "private.h"
#include "wnck-enum-types.h"
+#include "wnck-handle-private.h"
/**
* SECTION:window
@@ -1344,8 +1345,8 @@ wnck_window_set_skip_pager (WnckWindow *window,
gboolean skip)
{
g_return_if_fail (WNCK_IS_WINDOW (window));
- _wnck_change_state (WNCK_SCREEN_XSCREEN (window->priv->screen),
- window->priv->xwindow,
+ _wnck_change_state (window->priv->screen,
+ window->priv->xwindow,
skip,
_wnck_atom_get ("_NET_WM_STATE_SKIP_PAGER"),
0);
@@ -1400,8 +1401,8 @@ wnck_window_set_skip_tasklist (WnckWindow *window,
gboolean skip)
{
g_return_if_fail (WNCK_IS_WINDOW (window));
- _wnck_change_state (WNCK_SCREEN_XSCREEN (window->priv->screen),
- window->priv->xwindow,
+ _wnck_change_state (window->priv->screen,
+ window->priv->xwindow,
skip,
_wnck_atom_get ("_NET_WM_STATE_SKIP_TASKBAR"),
0);
@@ -1422,8 +1423,8 @@ wnck_window_set_fullscreen (WnckWindow *window,
gboolean fullscreen)
{
g_return_if_fail (WNCK_IS_WINDOW (window));
- _wnck_change_state (WNCK_SCREEN_XSCREEN (window->priv->screen),
- window->priv->xwindow,
+ _wnck_change_state (window->priv->screen,
+ window->priv->xwindow,
fullscreen,
_wnck_atom_get ("_NET_WM_STATE_FULLSCREEN"),
0);
@@ -1470,8 +1471,7 @@ wnck_window_close (WnckWindow *window,
{
g_return_if_fail (WNCK_IS_WINDOW (window));
- _wnck_close (WNCK_SCREEN_XSCREEN (window->priv->screen),
- window->priv->xwindow, timestamp);
+ _wnck_close (window->priv->screen, window->priv->xwindow, timestamp);
}
/**
@@ -1518,8 +1518,8 @@ wnck_window_maximize (WnckWindow *window)
{
g_return_if_fail (WNCK_IS_WINDOW (window));
- _wnck_change_state (WNCK_SCREEN_XSCREEN (window->priv->screen),
- window->priv->xwindow,
+ _wnck_change_state (window->priv->screen,
+ window->priv->xwindow,
TRUE,
_wnck_atom_get ("_NET_WM_STATE_MAXIMIZED_VERT"),
_wnck_atom_get ("_NET_WM_STATE_MAXIMIZED_HORZ"));
@@ -1536,8 +1536,8 @@ wnck_window_unmaximize (WnckWindow *window)
{
g_return_if_fail (WNCK_IS_WINDOW (window));
- _wnck_change_state (WNCK_SCREEN_XSCREEN (window->priv->screen),
- window->priv->xwindow,
+ _wnck_change_state (window->priv->screen,
+ window->priv->xwindow,
FALSE,
_wnck_atom_get ("_NET_WM_STATE_MAXIMIZED_VERT"),
_wnck_atom_get ("_NET_WM_STATE_MAXIMIZED_HORZ"));
@@ -1554,8 +1554,8 @@ wnck_window_maximize_horizontally (WnckWindow *window)
{
g_return_if_fail (WNCK_IS_WINDOW (window));
- _wnck_change_state (WNCK_SCREEN_XSCREEN (window->priv->screen),
- window->priv->xwindow,
+ _wnck_change_state (window->priv->screen,
+ window->priv->xwindow,
TRUE,
_wnck_atom_get ("_NET_WM_STATE_MAXIMIZED_HORZ"),
0);
@@ -1572,8 +1572,8 @@ wnck_window_unmaximize_horizontally (WnckWindow *window)
{
g_return_if_fail (WNCK_IS_WINDOW (window));
- _wnck_change_state (WNCK_SCREEN_XSCREEN (window->priv->screen),
- window->priv->xwindow,
+ _wnck_change_state (window->priv->screen,
+ window->priv->xwindow,
FALSE,
_wnck_atom_get ("_NET_WM_STATE_MAXIMIZED_HORZ"),
0);
@@ -1590,8 +1590,8 @@ wnck_window_maximize_vertically (WnckWindow *window)
{
g_return_if_fail (WNCK_IS_WINDOW (window));
- _wnck_change_state (WNCK_SCREEN_XSCREEN (window->priv->screen),
- window->priv->xwindow,
+ _wnck_change_state (window->priv->screen,
+ window->priv->xwindow,
TRUE,
_wnck_atom_get ("_NET_WM_STATE_MAXIMIZED_VERT"),
0);
@@ -1608,8 +1608,8 @@ wnck_window_unmaximize_vertically (WnckWindow *window)
{
g_return_if_fail (WNCK_IS_WINDOW (window));
- _wnck_change_state (WNCK_SCREEN_XSCREEN (window->priv->screen),
- window->priv->xwindow,
+ _wnck_change_state (window->priv->screen,
+ window->priv->xwindow,
FALSE,
_wnck_atom_get ("_NET_WM_STATE_MAXIMIZED_VERT"),
0);
@@ -1626,8 +1626,8 @@ wnck_window_shade (WnckWindow *window)
{
g_return_if_fail (WNCK_IS_WINDOW (window));
- _wnck_change_state (WNCK_SCREEN_XSCREEN (window->priv->screen),
- window->priv->xwindow,
+ _wnck_change_state (window->priv->screen,
+ window->priv->xwindow,
TRUE,
_wnck_atom_get ("_NET_WM_STATE_SHADED"),
0);
@@ -1644,8 +1644,8 @@ wnck_window_unshade (WnckWindow *window)
{
g_return_if_fail (WNCK_IS_WINDOW (window));
- _wnck_change_state (WNCK_SCREEN_XSCREEN (window->priv->screen),
- window->priv->xwindow,
+ _wnck_change_state (window->priv->screen,
+ window->priv->xwindow,
FALSE,
_wnck_atom_get ("_NET_WM_STATE_SHADED"),
0);
@@ -1666,7 +1666,7 @@ wnck_window_make_above (WnckWindow *window)
{
g_return_if_fail (WNCK_IS_WINDOW (window));
- _wnck_change_state (WNCK_SCREEN_XSCREEN (window->priv->screen),
+ _wnck_change_state (window->priv->screen,
window->priv->xwindow,
TRUE,
_wnck_atom_get ("_NET_WM_STATE_ABOVE"),
@@ -1687,7 +1687,7 @@ wnck_window_unmake_above (WnckWindow *window)
{
g_return_if_fail (WNCK_IS_WINDOW (window));
- _wnck_change_state (WNCK_SCREEN_XSCREEN (window->priv->screen),
+ _wnck_change_state (window->priv->screen,
window->priv->xwindow,
FALSE,
_wnck_atom_get ("_NET_WM_STATE_ABOVE"),
@@ -1707,7 +1707,7 @@ wnck_window_make_below (WnckWindow *window)
{
g_return_if_fail (WNCK_IS_WINDOW (window));
- _wnck_change_state (WNCK_SCREEN_XSCREEN (window->priv->screen),
+ _wnck_change_state (window->priv->screen,
window->priv->xwindow,
TRUE,
_wnck_atom_get ("_NET_WM_STATE_BELOW"),
@@ -1728,7 +1728,7 @@ wnck_window_unmake_below (WnckWindow *window)
{
g_return_if_fail (WNCK_IS_WINDOW (window));
- _wnck_change_state (WNCK_SCREEN_XSCREEN (window->priv->screen),
+ _wnck_change_state (window->priv->screen,
window->priv->xwindow,
FALSE,
_wnck_atom_get ("_NET_WM_STATE_BELOW"),
@@ -1747,8 +1747,8 @@ wnck_window_stick (WnckWindow *window)
{
g_return_if_fail (WNCK_IS_WINDOW (window));
- _wnck_change_state (WNCK_SCREEN_XSCREEN (window->priv->screen),
- window->priv->xwindow,
+ _wnck_change_state (window->priv->screen,
+ window->priv->xwindow,
TRUE,
_wnck_atom_get ("_NET_WM_STATE_STICKY"),
0);
@@ -1766,8 +1766,8 @@ wnck_window_unstick (WnckWindow *window)
{
g_return_if_fail (WNCK_IS_WINDOW (window));
- _wnck_change_state (WNCK_SCREEN_XSCREEN (window->priv->screen),
- window->priv->xwindow,
+ _wnck_change_state (window->priv->screen,
+ window->priv->xwindow,
FALSE,
_wnck_atom_get ("_NET_WM_STATE_STICKY"),
0);
@@ -1784,8 +1784,7 @@ wnck_window_keyboard_move (WnckWindow *window)
{
g_return_if_fail (WNCK_IS_WINDOW (window));
- _wnck_keyboard_move (WNCK_SCREEN_XSCREEN (window->priv->screen),
- window->priv->xwindow);
+ _wnck_keyboard_move (window->priv->screen, window->priv->xwindow);
}
/**
@@ -1799,8 +1798,7 @@ wnck_window_keyboard_size (WnckWindow *window)
{
g_return_if_fail (WNCK_IS_WINDOW (window));
- _wnck_keyboard_size (WNCK_SCREEN_XSCREEN (window->priv->screen),
- window->priv->xwindow);
+ _wnck_keyboard_size (window->priv->screen, window->priv->xwindow);
}
/**
@@ -1840,8 +1838,8 @@ wnck_window_move_to_workspace (WnckWindow *window,
g_return_if_fail (WNCK_IS_WINDOW (window));
g_return_if_fail (WNCK_IS_WORKSPACE (space));
- _wnck_change_workspace (WNCK_SCREEN_XSCREEN (window->priv->screen),
- window->priv->xwindow,
+ _wnck_change_workspace (window->priv->screen,
+ window->priv->xwindow,
wnck_workspace_get_number (space));
}
@@ -1874,8 +1872,8 @@ wnck_window_pin (WnckWindow *window)
{
g_return_if_fail (WNCK_IS_WINDOW (window));
- _wnck_change_workspace (WNCK_SCREEN_XSCREEN (window->priv->screen),
- window->priv->xwindow,
+ _wnck_change_workspace (window->priv->screen,
+ window->priv->xwindow,
ALL_WORKSPACES);
}
@@ -1901,8 +1899,8 @@ wnck_window_unpin (WnckWindow *window)
active = wnck_screen_get_active_workspace (window->priv->screen);
- _wnck_change_workspace (WNCK_SCREEN_XSCREEN (window->priv->screen),
- window->priv->xwindow,
+ _wnck_change_workspace (window->priv->screen,
+ window->priv->xwindow,
active ? wnck_workspace_get_number (active) : 0);
}
@@ -1928,7 +1926,7 @@ wnck_window_activate (WnckWindow *window,
{
g_return_if_fail (WNCK_IS_WINDOW (window));
- _wnck_activate (WNCK_SCREEN_XSCREEN (window->priv->screen),
+ _wnck_activate (window->priv->screen,
window->priv->xwindow,
timestamp);
}
@@ -2357,12 +2355,15 @@ wnck_window_set_geometry (WnckWindow *window,
int width,
int height)
{
+ WnckHandle *handle;
int gravity_and_flags;
int source;
g_return_if_fail (WNCK_IS_WINDOW (window));
- source = _wnck_get_client_type();
+ handle = wnck_screen_get_handle (window->priv->screen);
+ source = wnck_handle_get_client_type (handle);
+
gravity_and_flags = gravity;
gravity_and_flags |= geometry_mask << 8;
gravity_and_flags |= source << 12;
diff --git a/libwnck/wnck-handle-private.h b/libwnck/wnck-handle-private.h
index 163d673..13ff70f 100644
--- a/libwnck/wnck-handle-private.h
+++ b/libwnck/wnck-handle-private.h
@@ -22,6 +22,8 @@
G_BEGIN_DECLS
+WnckClientType wnck_handle_get_client_type (WnckHandle *self);
+
G_END_DECLS
#endif
diff --git a/libwnck/wnck-handle.c b/libwnck/wnck-handle.c
index f38e631..1625c10 100644
--- a/libwnck/wnck-handle.c
+++ b/libwnck/wnck-handle.c
@@ -25,19 +25,123 @@
#include "config.h"
#include "wnck-handle-private.h"
+#include "wnck-enum-types.h"
+
struct _WnckHandle
{
- GObject parent;
+ GObject parent;
+
+ WnckClientType client_type;
};
+enum
+{
+ PROP_0,
+
+ PROP_CLIENT_TYPE,
+
+ LAST_PROP
+};
+
+static GParamSpec *handle_properties[LAST_PROP] = { NULL };
+
G_DEFINE_TYPE (WnckHandle, wnck_handle, G_TYPE_OBJECT)
+static void
+wnck_handle_get_property (GObject *object,
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ WnckHandle *self;
+
+ self = WNCK_HANDLE (object);
+
+ switch (property_id)
+ {
+ case PROP_CLIENT_TYPE:
+ g_value_set_enum (value, self->client_type);
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ break;
+ }
+}
+
+static void
+wnck_handle_set_property (GObject *object,
+ guint property_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ WnckHandle *self;
+
+ self = WNCK_HANDLE (object);
+
+ switch (property_id)
+ {
+ case PROP_CLIENT_TYPE:
+ self->client_type = g_value_get_enum (value);
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ break;
+ }
+}
+
+static void
+install_properties (GObjectClass *object_class)
+{
+ handle_properties[PROP_CLIENT_TYPE] =
+ g_param_spec_enum ("client-type", "client-type", "client-type",
+ WNCK_TYPE_CLIENT_TYPE,
+ WNCK_CLIENT_TYPE_APPLICATION,
+ G_PARAM_CONSTRUCT | G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS);
+
+ g_object_class_install_properties (object_class, LAST_PROP, handle_properties);
+}
+
static void
wnck_handle_class_init (WnckHandleClass *self_class)
{
+ GObjectClass *object_class;
+
+ object_class = G_OBJECT_CLASS (self_class);
+
+ object_class->get_property = wnck_handle_get_property;
+ object_class->set_property = wnck_handle_set_property;
+
+ install_properties (object_class);
}
static void
wnck_handle_init (WnckHandle *self)
{
}
+
+/**
+ * wnck_handle_new:
+ * @client_type: a role for the client
+ *
+ * Creates a new #WnckHandle object with a given @client_type.
+ *
+ * Returns: (transfer full): newly created #WnckHandle.
+ */
+WnckHandle *
+wnck_handle_new (WnckClientType client_type)
+{
+ return g_object_new (WNCK_TYPE_HANDLE,
+ "client-type", client_type,
+ NULL);
+}
+
+WnckClientType
+wnck_handle_get_client_type (WnckHandle *self)
+{
+ g_return_val_if_fail (WNCK_IS_HANDLE (self), WNCK_CLIENT_TYPE_APPLICATION);
+
+ return self->client_type;
+}
diff --git a/libwnck/wnck-handle.h b/libwnck/wnck-handle.h
index 12362d8..874d3ba 100644
--- a/libwnck/wnck-handle.h
+++ b/libwnck/wnck-handle.h
@@ -23,12 +23,15 @@
#define WNCK_HANDLE_H
#include <glib-object.h>
+#include <libwnck/util.h>
G_BEGIN_DECLS
#define WNCK_TYPE_HANDLE (wnck_handle_get_type ())
G_DECLARE_FINAL_TYPE (WnckHandle, wnck_handle, WNCK, HANDLE, GObject)
+WnckHandle *wnck_handle_new (WnckClientType client_type);
+
G_END_DECLS
#endif
diff --git a/libwnck/xutils.c b/libwnck/xutils.c
index 58bbe97..2340373 100644
--- a/libwnck/xutils.c
+++ b/libwnck/xutils.c
@@ -30,6 +30,7 @@
#include "screen.h"
#include "window.h"
#include "private.h"
+#include "wnck-handle-private.h"
gboolean
_wnck_get_cardinal (Screen *screen,
@@ -882,16 +883,20 @@ _wnck_deiconify (Screen *screen,
}
void
-_wnck_close (Screen *screen,
- Window xwindow,
- Time timestamp)
+_wnck_close (WnckScreen *screen,
+ Window xwindow,
+ Time timestamp)
{
- Display *display;
- Window root;
- XEvent xev;
+ WnckHandle *handle;
+ Screen *xscreen;
+ Display *display;
+ Window root;
+ XEvent xev;
- display = DisplayOfScreen (screen);
- root = RootWindowOfScreen (screen);
+ handle = wnck_screen_get_handle (screen);
+ xscreen = WNCK_SCREEN_XSCREEN (screen);
+ display = DisplayOfScreen (xscreen);
+ root = RootWindowOfScreen (xscreen);
xev.xclient.type = ClientMessage;
xev.xclient.serial = 0;
@@ -901,7 +906,7 @@ _wnck_close (Screen *screen,
xev.xclient.message_type = _wnck_atom_get ("_NET_CLOSE_WINDOW");
xev.xclient.format = 32;
xev.xclient.data.l[0] = timestamp;
- xev.xclient.data.l[1] = _wnck_get_client_type ();
+ xev.xclient.data.l[1] = wnck_handle_get_client_type (handle);
xev.xclient.data.l[2] = 0;
xev.xclient.data.l[3] = 0;
xev.xclient.data.l[4] = 0;
@@ -928,15 +933,19 @@ _wnck_close (Screen *screen,
#define _NET_WM_MOVERESIZE_MOVE_KEYBOARD 10
void
-_wnck_keyboard_move (Screen *screen,
- Window xwindow)
+_wnck_keyboard_move (WnckScreen *screen,
+ Window xwindow)
{
- Display *display;
- Window root;
- XEvent xev;
+ WnckHandle *handle;
+ Screen *xscreen;
+ Display *display;
+ Window root;
+ XEvent xev;
- display = DisplayOfScreen (screen);
- root = RootWindowOfScreen (screen);
+ handle = wnck_screen_get_handle (screen);
+ xscreen = WNCK_SCREEN_XSCREEN (screen);
+ display = DisplayOfScreen (xscreen);
+ root = RootWindowOfScreen (xscreen);
xev.xclient.type = ClientMessage;
xev.xclient.serial = 0;
@@ -949,7 +958,7 @@ _wnck_keyboard_move (Screen *screen,
xev.xclient.data.l[1] = 0; /* unused */
xev.xclient.data.l[2] = _NET_WM_MOVERESIZE_MOVE_KEYBOARD;
xev.xclient.data.l[3] = 0; /* unused */
- xev.xclient.data.l[4] = _wnck_get_client_type ();
+ xev.xclient.data.l[4] = wnck_handle_get_client_type (handle);
_wnck_error_trap_push (display);
XSendEvent (display,
@@ -961,15 +970,19 @@ _wnck_keyboard_move (Screen *screen,
}
void
-_wnck_keyboard_size (Screen *screen,
- Window xwindow)
+_wnck_keyboard_size (WnckScreen *screen,
+ Window xwindow)
{
- Display *display;
- Window root;
- XEvent xev;
+ WnckHandle *handle;
+ Screen *xscreen;
+ Display *display;
+ Window root;
+ XEvent xev;
- display = DisplayOfScreen (screen);
- root = RootWindowOfScreen (screen);
+ handle = wnck_screen_get_handle (screen);
+ xscreen = WNCK_SCREEN_XSCREEN (screen);
+ display = DisplayOfScreen (xscreen);
+ root = RootWindowOfScreen (xscreen);
xev.xclient.type = ClientMessage;
xev.xclient.serial = 0;
@@ -982,7 +995,7 @@ _wnck_keyboard_size (Screen *screen,
xev.xclient.data.l[1] = 0; /* unused */
xev.xclient.data.l[2] = _NET_WM_MOVERESIZE_SIZE_KEYBOARD;
xev.xclient.data.l[3] = 0; /* unused */
- xev.xclient.data.l[4] = _wnck_get_client_type ();
+ xev.xclient.data.l[4] = wnck_handle_get_client_type (handle);
_wnck_error_trap_push (display);
XSendEvent (display,
@@ -994,22 +1007,26 @@ _wnck_keyboard_size (Screen *screen,
}
void
-_wnck_change_state (Screen *screen,
- Window xwindow,
- gboolean add,
- Atom state1,
- Atom state2)
-{
- Display *display;
- Window root;
- XEvent xev;
+_wnck_change_state (WnckScreen *screen,
+ Window xwindow,
+ gboolean add,
+ Atom state1,
+ Atom state2)
+{
+ WnckHandle *handle;
+ Screen *xscreen;
+ Display *display;
+ Window root;
+ XEvent xev;
#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 */
- display = DisplayOfScreen (screen);
- root = RootWindowOfScreen (screen);
+ handle = wnck_screen_get_handle (screen);
+ xscreen = WNCK_SCREEN_XSCREEN (screen);
+ display = DisplayOfScreen (xscreen);
+ root = RootWindowOfScreen (xscreen);
xev.xclient.type = ClientMessage;
xev.xclient.serial = 0;
@@ -1021,7 +1038,7 @@ _wnck_change_state (Screen *screen,
xev.xclient.data.l[0] = add ? _NET_WM_STATE_ADD : _NET_WM_STATE_REMOVE;
xev.xclient.data.l[1] = state1;
xev.xclient.data.l[2] = state2;
- xev.xclient.data.l[3] = _wnck_get_client_type ();
+ xev.xclient.data.l[3] = wnck_handle_get_client_type (handle);
xev.xclient.data.l[4] = 0;
_wnck_error_trap_push (display);
@@ -1034,16 +1051,20 @@ _wnck_change_state (Screen *screen,
}
void
-_wnck_change_workspace (Screen *screen,
- Window xwindow,
+_wnck_change_workspace (WnckScreen *screen,
+ Window xwindow,
int new_space)
{
- Display *display;
- Window root;
- XEvent xev;
+ WnckHandle *handle;
+ Screen *xscreen;
+ Display *display;
+ Window root;
+ XEvent xev;
- display = DisplayOfScreen (screen);
- root = RootWindowOfScreen (screen);
+ handle = wnck_screen_get_handle (screen);
+ xscreen = WNCK_SCREEN_XSCREEN (screen);
+ display = DisplayOfScreen (xscreen);
+ root = RootWindowOfScreen (xscreen);
xev.xclient.type = ClientMessage;
xev.xclient.serial = 0;
@@ -1053,7 +1074,7 @@ _wnck_change_workspace (Screen *screen,
xev.xclient.message_type = _wnck_atom_get ("_NET_WM_DESKTOP");
xev.xclient.format = 32;
xev.xclient.data.l[0] = new_space;
- xev.xclient.data.l[1] = _wnck_get_client_type ();
+ xev.xclient.data.l[1] = wnck_handle_get_client_type (handle);
xev.xclient.data.l[2] = 0;
xev.xclient.data.l[3] = 0;
xev.xclient.data.l[4] = 0;
@@ -1068,20 +1089,25 @@ _wnck_change_workspace (Screen *screen,
}
void
-_wnck_activate (Screen *screen,
- Window xwindow,
- Time timestamp)
+_wnck_activate (WnckScreen *screen,
+ Window xwindow,
+ Time timestamp)
{
- Display *display;
- Window root;
- XEvent xev;
+
+ WnckHandle *handle;
+ Screen *xscreen;
+ Display *display;
+ Window root;
+ XEvent xev;
if (timestamp == 0)
g_warning ("Received a timestamp of 0; window activation may not "
"function properly.\n");
- display = DisplayOfScreen (screen);
- root = RootWindowOfScreen (screen);
+ handle = wnck_screen_get_handle (screen);
+ xscreen = WNCK_SCREEN_XSCREEN (screen);
+ display = DisplayOfScreen (xscreen);
+ root = RootWindowOfScreen (xscreen);
xev.xclient.type = ClientMessage;
xev.xclient.serial = 0;
@@ -1090,7 +1116,7 @@ _wnck_activate (Screen *screen,
xev.xclient.window = xwindow;
xev.xclient.message_type = _wnck_atom_get ("_NET_ACTIVE_WINDOW");
xev.xclient.format = 32;
- xev.xclient.data.l[0] = _wnck_get_client_type ();
+ xev.xclient.data.l[0] = wnck_handle_get_client_type (handle);
xev.xclient.data.l[1] = timestamp;
xev.xclient.data.l[2] = 0;
xev.xclient.data.l[3] = 0;
diff --git a/libwnck/xutils.h b/libwnck/xutils.h
index 6426d8d..bc415e2 100644
--- a/libwnck/xutils.h
+++ b/libwnck/xutils.h
@@ -30,6 +30,9 @@
G_BEGIN_DECLS
+/* forward decls */
+typedef struct _WnckScreen WnckScreen;
+
#define WNCK_APP_WINDOW_EVENT_MASK (PropertyChangeMask | StructureNotifyMask)
gboolean _wnck_get_cardinal (Screen *screen,
@@ -98,21 +101,22 @@ void _wnck_iconify (Screen *screen,
void _wnck_deiconify (Screen *screen,
Window xwindow);
-void _wnck_close (Screen *screen,
- Window xwindow,
- Time timestamp);
-
-void _wnck_change_state (Screen *screen,
- Window xwindow,
- gboolean add,
- Atom state1,
- Atom state2);
-void _wnck_change_workspace (Screen *screen,
- Window xwindow,
- int new_space);
-void _wnck_activate (Screen *screen,
- Window xwindow,
- Time timestamp);
+void _wnck_close (WnckScreen *screen,
+ Window xwindow,
+ Time timestamp);
+
+void _wnck_change_state (WnckScreen *screen,
+ Window xwindow,
+ gboolean add,
+ Atom state1,
+ Atom state2);
+void _wnck_change_workspace (WnckScreen *screen,
+ Window xwindow,
+ int new_space);
+void _wnck_activate (WnckScreen *screen,
+ Window xwindow,
+ Time timestamp);
+
void _wnck_activate_workspace (Screen *screen,
int new_active_space,
Time timestamp);
@@ -146,11 +150,11 @@ int _wnck_select_input (Screen *screen,
int mask,
gboolean update);
-void _wnck_keyboard_move (Screen *screen,
- Window xwindow);
+void _wnck_keyboard_move (WnckScreen *screen,
+ Window xwindow);
-void _wnck_keyboard_size (Screen *screen,
- Window xwindow);
+void _wnck_keyboard_size (WnckScreen *screen,
+ Window xwindow);
void _wnck_toggle_showing_desktop (Screen *screen,
gboolean show);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]