diff options
| -rw-r--r-- | trashapplet/src/xstuff.c | 346 | ||||
| -rw-r--r-- | trashapplet/src/xstuff.h | 24 | 
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__ */  | 
