summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--trashapplet/src/xstuff.c346
-rw-r--r--trashapplet/src/xstuff.h24
2 files changed, 0 insertions, 370 deletions
diff --git a/trashapplet/src/xstuff.c b/trashapplet/src/xstuff.c
index ccd26cc4..9e58ca10 100644
--- a/trashapplet/src/xstuff.c
+++ b/trashapplet/src/xstuff.c
@@ -13,294 +13,15 @@
*/
#include <config.h>
-#include <string.h>
#include <unistd.h>
#include <gdk/gdk.h>
#include <gdk/gdkx.h>
#include <X11/Xlib.h>
-#include <X11/Xatom.h>
#include "xstuff.h"
-static Atom
-panel_atom_get (const char *atom_name)
-{
- static GHashTable *atom_hash;
- Display *xdisplay;
- Atom retval;
-
- g_return_val_if_fail (atom_name != NULL, None);
-
- xdisplay = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ());
-
- if (!atom_hash)
- atom_hash = g_hash_table_new_full (
- g_str_hash, g_str_equal, g_free, NULL);
-
- retval = GPOINTER_TO_UINT (g_hash_table_lookup (atom_hash, atom_name));
- if (!retval) {
- retval = XInternAtom (xdisplay, atom_name, FALSE);
-
- if (retval != None)
- g_hash_table_insert (atom_hash, g_strdup (atom_name),
- GUINT_TO_POINTER (retval));
- }
-
- return retval;
-}
-
-/* Stolen from deskguide */
-static gpointer
-get_typed_property_data (Display *xdisplay,
- Window xwindow,
- Atom property,
- Atom requested_type,
- gint *size_p,
- guint expected_format)
-{
- static const guint prop_buffer_lengh = 1024 * 1024;
- unsigned char *prop_data = NULL;
- Atom type_returned = 0;
- unsigned long nitems_return = 0, bytes_after_return = 0;
- int format_returned = 0;
- gpointer data = NULL;
- gboolean abort = FALSE;
-
- g_return_val_if_fail (size_p != NULL, NULL);
- *size_p = 0;
-
- gdk_error_trap_push ();
-
- abort = XGetWindowProperty (xdisplay,
- xwindow,
- property,
- 0, prop_buffer_lengh,
- False,
- requested_type,
- &type_returned, &format_returned,
- &nitems_return,
- &bytes_after_return,
- &prop_data) != Success;
- if (gdk_error_trap_pop () ||
- type_returned == None)
- abort++;
- if (!abort &&
- requested_type != AnyPropertyType &&
- requested_type != type_returned)
- {
- g_warning ("%s(): Property has wrong type, probably on crack", G_STRFUNC);
- abort++;
- }
- if (!abort && bytes_after_return)
- {
- g_warning ("%s(): Eeek, property has more than %u bytes, stored on harddisk?",
- G_STRFUNC, prop_buffer_lengh);
- abort++;
- }
- if (!abort && expected_format && expected_format != format_returned)
- {
- g_warning ("%s(): Expected format (%u) unmatched (%d), programmer was drunk?",
- G_STRFUNC, expected_format, format_returned);
- abort++;
- }
- if (!abort && prop_data && nitems_return && format_returned)
- {
- switch (format_returned)
- {
- case 32:
- *size_p = nitems_return * 4;
- if (sizeof (gulong) == 8)
- {
- guint32 i, *mem = g_malloc0 (*size_p + 1);
- gulong *prop_longs = (gulong*) prop_data;
-
- for (i = 0; i < *size_p / 4; i++)
- mem[i] = prop_longs[i];
- data = mem;
- }
- break;
- case 16:
- *size_p = nitems_return * 2;
- break;
- case 8:
- *size_p = nitems_return;
- break;
- default:
- g_warning ("Unknown property data format with %d bits (extraterrestrial?)",
- format_returned);
- break;
- }
- if (!data && *size_p)
- {
- guint8 *mem = g_malloc (*size_p + 1);
-
- memcpy (mem, prop_data, *size_p);
- mem[*size_p] = 0;
- data = mem;
- }
- }
-
- if (prop_data)
- XFree (prop_data);
-
- return data;
-}
-
-gboolean
-xstuff_is_compliant_wm (void)
-{
- Display *xdisplay;
- Window root_window;
- gpointer data;
- int size;
-
- xdisplay = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ());
- root_window = GDK_WINDOW_XID (
- gdk_get_default_root_window ());
-
- /* FIXME this is totally broken; should be using
- * gdk_net_wm_supports() on particular hints when we rely
- * on those particular hints
- */
- data = get_typed_property_data (
- xdisplay, root_window,
- panel_atom_get ("_NET_SUPPORTED"),
- XA_ATOM, &size, 32);
-
- if (!data)
- return FALSE;
-
- /* Actually checks for some of these */
- g_free (data);
- return TRUE;
-}
-
-void
-xstuff_set_no_group (GdkWindow *win)
-{
- XWMHints *old_wmhints;
- XWMHints wmhints = {0};
-
- XDeleteProperty (GDK_WINDOW_XDISPLAY (win),
- GDK_WINDOW_XID (win),
- panel_atom_get ("WM_CLIENT_LEADER"));
-
- old_wmhints = XGetWMHints (GDK_WINDOW_XDISPLAY (win),
- GDK_WINDOW_XID (win));
- /* General paranoia */
- if (old_wmhints != NULL) {
- memcpy (&wmhints, old_wmhints, sizeof (XWMHints));
- XFree (old_wmhints);
-
- wmhints.flags &= ~WindowGroupHint;
- wmhints.window_group = 0;
- } else {
- /* General paranoia */
- wmhints.flags = StateHint;
- wmhints.window_group = 0;
- wmhints.initial_state = NormalState;
- }
-
- XSetWMHints (GDK_WINDOW_XDISPLAY (win),
- GDK_WINDOW_XID (win),
- &wmhints);
-}
-
-/* This is such a broken stupid function. */
-void
-xstuff_set_pos_size (GdkWindow *window, int x, int y, int w, int h)
-{
- XSizeHints size_hints;
- int old_x, old_y, old_w, old_h;
-
- old_x = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (window), "xstuff-cached-x"));
- old_y = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (window), "xstuff-cached-y"));
- old_w = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (window), "xstuff-cached-w"));
- old_h = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (window), "xstuff-cached-h"));
-
- if (x == old_x && y == old_y && w == old_w && h == old_h)
- return;
-
- /* Do not add USPosition / USSize here, fix the damn WM */
- size_hints.flags = PPosition | PSize | PMaxSize | PMinSize;
- size_hints.x = 0; /* window managers aren't supposed to and */
- size_hints.y = 0; /* don't use these fields */
- size_hints.width = w;
- size_hints.height = h;
- size_hints.min_width = w;
- size_hints.min_height = h;
- size_hints.max_width = w;
- size_hints.max_height = h;
-
- gdk_error_trap_push ();
-
- XSetWMNormalHints (GDK_WINDOW_XDISPLAY (window),
- GDK_WINDOW_XID (window),
- &size_hints);
-
- gdk_window_move_resize (window, x, y, w, h);
-
- gdk_error_trap_pop_ignored ();
-
- g_object_set_data (G_OBJECT (window), "xstuff-cached-x", GINT_TO_POINTER (x));
- g_object_set_data (G_OBJECT (window), "xstuff-cached-y", GINT_TO_POINTER (y));
- g_object_set_data (G_OBJECT (window), "xstuff-cached-w", GINT_TO_POINTER (w));
- g_object_set_data (G_OBJECT (window), "xstuff-cached-h", GINT_TO_POINTER (h));
-}
-
-void
-xstuff_set_wmspec_dock_hints (GdkWindow *window,
- gboolean autohide)
-{
- Atom atoms [2] = { None, None };
-
- if (!autohide)
- atoms [0] = panel_atom_get ("_NET_WM_WINDOW_TYPE_DOCK");
- else {
- atoms [0] = panel_atom_get ("_MATE_WINDOW_TYPE_AUTOHIDE_PANEL");
- atoms [1] = panel_atom_get ("_NET_WM_WINDOW_TYPE_DOCK");
- }
-
- XChangeProperty (GDK_WINDOW_XDISPLAY (window),
- GDK_WINDOW_XID (window),
- panel_atom_get ("_NET_WM_WINDOW_TYPE"),
- XA_ATOM, 32, PropModeReplace,
- (unsigned char *) atoms,
- autohide ? 2 : 1);
-}
-
-void
-xstuff_set_wmspec_strut (GdkWindow *window,
- int left,
- int right,
- int top,
- int bottom)
-{
- long vals [4];
-
- vals [0] = left;
- vals [1] = right;
- vals [2] = top;
- vals [3] = bottom;
-
- XChangeProperty (GDK_WINDOW_XDISPLAY (window),
- GDK_WINDOW_XID (window),
- panel_atom_get ("_NET_WM_STRUT"),
- XA_CARDINAL, 32, PropModeReplace,
- (unsigned char *) vals, 4);
-}
-
-void
-xstuff_delete_property (GdkWindow *window, const char *name)
-{
- Display *xdisplay = GDK_WINDOW_XDISPLAY (window);
- Window xwindow = GDK_WINDOW_XID (window);
-
- XDeleteProperty (xdisplay, xwindow,
- panel_atom_get (name));
-}
/* Zoom animation */
#define MINIATURIZE_ANIMATION_FRAMES_Z 1
@@ -456,70 +177,3 @@ xstuff_zoom_animate (GtkWidget *widget, GdkRectangle *opt_rect)
dest.x, dest.y, dest.width, dest.height,
MINIATURIZE_ANIMATION_STEPS_Z);
}
-
-int
-xstuff_get_current_workspace (GdkScreen *screen)
-{
- Window root_window;
- Atom type = None;
- gulong nitems;
- gulong bytes_after;
- gulong *num;
- int format;
- int result;
- int retval;
-
- root_window = GDK_WINDOW_XID (
- gdk_screen_get_root_window (screen));
-
- gdk_error_trap_push ();
- result = XGetWindowProperty (GDK_SCREEN_XDISPLAY (screen),
- root_window,
- panel_atom_get ("_NET_CURRENT_DESKTOP"),
- 0, G_MAXLONG,
- False, XA_CARDINAL, &type, &format, &nitems,
- &bytes_after, (gpointer) &num);
- if (gdk_error_trap_pop () || result != Success)
- return -1;
-
- if (type != XA_CARDINAL) {
- XFree (num);
- return -1;
- }
-
- retval = *num;
-
- XFree (num);
-
- return retval;
-}
-
-void
-xstuff_grab_key_on_all_screens (int keycode,
- guint modifiers,
- gboolean grab)
-{
- GdkDisplay *display;
- int n_screens;
- int i;
-
- display = gdk_display_get_default ();
- n_screens = 1; /* gdk-3.10, The number of screens is always 1 */
-
- for (i = 0; i < n_screens; i++) {
- GdkWindow *root;
-
- root = gdk_screen_get_root_window (
- gdk_display_get_screen (display, i));
-
- if (grab)
- XGrabKey (gdk_x11_display_get_xdisplay (display),
- keycode, modifiers,
- GDK_WINDOW_XID (root),
- True, GrabModeAsync, GrabModeAsync);
- else
- XUngrabKey (gdk_x11_display_get_xdisplay (display),
- keycode, modifiers,
- GDK_WINDOW_XID (root));
- }
-}
diff --git a/trashapplet/src/xstuff.h b/trashapplet/src/xstuff.h
index 5791cafa..0431ce79 100644
--- a/trashapplet/src/xstuff.h
+++ b/trashapplet/src/xstuff.h
@@ -4,31 +4,7 @@
#include <gdk/gdk.h>
#include <gtk/gtk.h>
-void xstuff_delete_property (GdkWindow *window,
- const char *name);
-gboolean xstuff_is_compliant_wm (void);
-
-void xstuff_set_no_group (GdkWindow *win);
-
-void xstuff_unsetup_desktop_area (void);
-void xstuff_set_pos_size (GdkWindow *window,
- int x, int y,
- int w, int h);
-void xstuff_set_wmspec_dock_hints (GdkWindow *window,
- gboolean autohide);
-void xstuff_set_wmspec_strut (GdkWindow *window,
- int left,
- int right,
- int top,
- int bottom);
-
void xstuff_zoom_animate (GtkWidget *widget,
GdkRectangle *opt_src_rect);
-int xstuff_get_current_workspace (GdkScreen *screen);
-
-void xstuff_grab_key_on_all_screens (int keycode,
- guint modifiers,
- gboolean grab);
-
#endif /* __XSTUFF_H__ */