Use gdk to get/set X11 properties
This commit is contained in:
		
							parent
							
								
									c999a3ca80
								
							
						
					
					
						commit
						6d2828e54e
					
				@ -31,9 +31,7 @@ _sugarext_la_SOURCES =			\
 | 
				
			|||||||
	sugar-key-grabber.c		\
 | 
						sugar-key-grabber.c		\
 | 
				
			||||||
	sugar-key-grabber.h		\
 | 
						sugar-key-grabber.h		\
 | 
				
			||||||
	sugar-menu.h			\
 | 
						sugar-menu.h			\
 | 
				
			||||||
	sugar-menu.c			\
 | 
						sugar-menu.c
 | 
				
			||||||
	sugar-x11-util.c		\
 | 
					 | 
				
			||||||
	sugar-x11-util.h
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
BUILT_SOURCES = 			\
 | 
					BUILT_SOURCES = 			\
 | 
				
			||||||
	_sugarext.c			\
 | 
						_sugarext.c			\
 | 
				
			||||||
 | 
				
			|||||||
@ -92,25 +92,6 @@
 | 
				
			|||||||
    '("guint" "state")
 | 
					    '("guint" "state")
 | 
				
			||||||
  )
 | 
					  )
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
; functions
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
(define-function x11_set_string_property
 | 
					 | 
				
			||||||
  (c-name "sugar_x11_util_set_string_property")
 | 
					 | 
				
			||||||
  (parameters
 | 
					 | 
				
			||||||
    '("GdkWindow*" "window")
 | 
					 | 
				
			||||||
    '("const-char*" "property")
 | 
					 | 
				
			||||||
    '("const-char*" "value")
 | 
					 | 
				
			||||||
  )
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
(define-function x11_get_string_property
 | 
					 | 
				
			||||||
  (c-name "sugar_x11_util_get_string_property")
 | 
					 | 
				
			||||||
  (return-type "char*")
 | 
					 | 
				
			||||||
  (parameters
 | 
					 | 
				
			||||||
    '("GdkWindow*" "window")
 | 
					 | 
				
			||||||
    '("const-char*" "property")
 | 
					 | 
				
			||||||
  )
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
;; From sexy-icon-entry.h
 | 
					;; From sexy-icon-entry.h
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -7,7 +7,6 @@ headers
 | 
				
			|||||||
#include "sugar-address-entry.h"
 | 
					#include "sugar-address-entry.h"
 | 
				
			||||||
#include "sugar-key-grabber.h"
 | 
					#include "sugar-key-grabber.h"
 | 
				
			||||||
#include "sugar-menu.h"
 | 
					#include "sugar-menu.h"
 | 
				
			||||||
#include "sugar-x11-util.h"
 | 
					 | 
				
			||||||
#include "sexy-icon-entry.h"
 | 
					#include "sexy-icon-entry.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <pygtk/pygtk.h>
 | 
					#include <pygtk/pygtk.h>
 | 
				
			||||||
 | 
				
			|||||||
@ -1,88 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 * Copyright (C) 2006-2007 Red Hat, Inc.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * This library is free software; you can redistribute it and/or
 | 
					 | 
				
			||||||
 * modify it under the terms of the GNU Lesser General Public
 | 
					 | 
				
			||||||
 * License as published by the Free Software Foundation; either
 | 
					 | 
				
			||||||
 * version 2 of the License, or (at your option) any later version.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * This library 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
 | 
					 | 
				
			||||||
 * Lesser General Public License for more details.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * You should have received a copy of the GNU Lesser General Public
 | 
					 | 
				
			||||||
 * License along with this library; if not, write to the
 | 
					 | 
				
			||||||
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 | 
					 | 
				
			||||||
 * Boston, MA 02111-1307, USA.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include <gdk/gdkproperty.h>
 | 
					 | 
				
			||||||
#include <X11/Xatom.h>
 | 
					 | 
				
			||||||
#include <glib/gstrfuncs.h>
 | 
					 | 
				
			||||||
#include <string.h>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include "sugar-x11-util.h"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void
 | 
					 | 
				
			||||||
sugar_x11_util_set_string_property(GdkWindow  *window,
 | 
					 | 
				
			||||||
                                   const char *property,
 | 
					 | 
				
			||||||
                                   const char *value)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    Atom prop_atom;
 | 
					 | 
				
			||||||
    Atom string_atom;
 | 
					 | 
				
			||||||
    GdkDisplay *display;
 | 
					 | 
				
			||||||
    char *prop_text;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    display = gdk_drawable_get_display(window);
 | 
					 | 
				
			||||||
    prop_atom = gdk_x11_get_xatom_by_name_for_display(display, property);
 | 
					 | 
				
			||||||
    string_atom = gdk_x11_get_xatom_by_name_for_display(display, "STRING");
 | 
					 | 
				
			||||||
    prop_text = gdk_utf8_to_string_target(value);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    XChangeProperty(GDK_DISPLAY_XDISPLAY(display),
 | 
					 | 
				
			||||||
                    GDK_WINDOW_XID(window),
 | 
					 | 
				
			||||||
                    prop_atom,
 | 
					 | 
				
			||||||
                    string_atom, 8,
 | 
					 | 
				
			||||||
                    PropModeReplace, prop_text,
 | 
					 | 
				
			||||||
                    strlen(prop_text));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    g_free(prop_text);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
char *
 | 
					 | 
				
			||||||
sugar_x11_util_get_string_property(GdkWindow  *window,
 | 
					 | 
				
			||||||
                                   const char *property)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    Atom type;    
 | 
					 | 
				
			||||||
    Atom prop_atom;
 | 
					 | 
				
			||||||
    Atom string_atom;
 | 
					 | 
				
			||||||
    int format;
 | 
					 | 
				
			||||||
    int result;
 | 
					 | 
				
			||||||
    unsigned long bytes_after, n_items;
 | 
					 | 
				
			||||||
    unsigned char *str = NULL;
 | 
					 | 
				
			||||||
    char *value = NULL;
 | 
					 | 
				
			||||||
    GdkDisplay *display;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    display = gdk_drawable_get_display(window);
 | 
					 | 
				
			||||||
    prop_atom = gdk_x11_get_xatom_by_name_for_display(display, property);
 | 
					 | 
				
			||||||
    string_atom = gdk_x11_get_xatom_by_name_for_display(display, "STRING");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    result = XGetWindowProperty(GDK_DISPLAY_XDISPLAY(display),
 | 
					 | 
				
			||||||
                                GDK_WINDOW_XID(window),
 | 
					 | 
				
			||||||
                                prop_atom,
 | 
					 | 
				
			||||||
                                0, 1024L,
 | 
					 | 
				
			||||||
                                False, string_atom,
 | 
					 | 
				
			||||||
                                &type, &format, &n_items,
 | 
					 | 
				
			||||||
                                &bytes_after, (unsigned char **)&str);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (result == Success && str != NULL && type == string_atom &&
 | 
					 | 
				
			||||||
        format == 8 && n_items > 0) {
 | 
					 | 
				
			||||||
        value = g_strdup(str);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (str) {
 | 
					 | 
				
			||||||
        XFree(str);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return value;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,36 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 * Copyright (C) 2006-2007 Red Hat, Inc.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * This library is free software; you can redistribute it and/or
 | 
					 | 
				
			||||||
 * modify it under the terms of the GNU Lesser General Public
 | 
					 | 
				
			||||||
 * License as published by the Free Software Foundation; either
 | 
					 | 
				
			||||||
 * version 2 of the License, or (at your option) any later version.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * This library 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
 | 
					 | 
				
			||||||
 * Lesser General Public License for more details.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * You should have received a copy of the GNU Lesser General Public
 | 
					 | 
				
			||||||
 * License along with this library; if not, write to the
 | 
					 | 
				
			||||||
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 | 
					 | 
				
			||||||
 * Boston, MA 02111-1307, USA.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifndef __SUGAR_X11_UTIL_H__
 | 
					 | 
				
			||||||
#define __SUGAR_X11_UTIL_H__
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include <gdk/gdkx.h>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
G_BEGIN_DECLS
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void    sugar_x11_util_set_string_property(GdkWindow  *window,
 | 
					 | 
				
			||||||
                                           const char *property,
 | 
					 | 
				
			||||||
                                           const char *value);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
char   *sugar_x11_util_get_string_property(GdkWindow  *window,
 | 
					 | 
				
			||||||
                                           const char *property);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
G_END_DECLS
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif /* __SUGAR_ADDRESS_ENTRY_H__ */
 | 
					 | 
				
			||||||
@ -17,22 +17,26 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import gtk
 | 
					import gtk
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import _sugarext
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def get_activity_id(wnck_window):
 | 
					def get_activity_id(wnck_window):
 | 
				
			||||||
    window = gtk.gdk.window_foreign_new(wnck_window.get_xid())
 | 
					    window = gtk.gdk.window_foreign_new(wnck_window.get_xid())
 | 
				
			||||||
    return _sugarext.x11_get_string_property(
 | 
					    prop_info = window.property_get('_SUGAR_ACTIVITY_ID', 'STRING')
 | 
				
			||||||
                            window, '_SUGAR_ACTIVITY_ID')
 | 
					    if prop_info is None:
 | 
				
			||||||
 | 
					        return None
 | 
				
			||||||
 | 
					    else:
 | 
				
			||||||
 | 
					        return prop_info[2]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def get_bundle_id(wnck_window):
 | 
					def get_bundle_id(wnck_window):
 | 
				
			||||||
    window = gtk.gdk.window_foreign_new(wnck_window.get_xid())
 | 
					    window = gtk.gdk.window_foreign_new(wnck_window.get_xid())
 | 
				
			||||||
    return _sugarext.x11_get_string_property(
 | 
					    prop_info = window.property_get('_SUGAR_BUNDLE_ID', 'STRING')
 | 
				
			||||||
                            window, '_SUGAR_BUNDLE_ID')
 | 
					    if prop_info is None:
 | 
				
			||||||
 | 
					        return None
 | 
				
			||||||
 | 
					    else:
 | 
				
			||||||
 | 
					        return prop_info[2]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def set_activity_id(window, activity_id):
 | 
					def set_activity_id(window, activity_id):
 | 
				
			||||||
    _sugarext.x11_set_string_property(
 | 
					    window.property_change('_SUGAR_ACTIVITY_ID', 'STRING', 8,
 | 
				
			||||||
            window, '_SUGAR_ACTIVITY_ID', activity_id)
 | 
					                           gtk.gdk.PROP_MODE_REPLACE, activity_id)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def set_bundle_id(window, bundle_id):
 | 
					def set_bundle_id(window, bundle_id):
 | 
				
			||||||
    _sugarext.x11_set_string_property(
 | 
					    window.property_change('_SUGAR_BUNDLE_ID', 'STRING', 8,
 | 
				
			||||||
            window, '_SUGAR_BUNDLE_ID', bundle_id)
 | 
					                           gtk.gdk.PROP_MODE_REPLACE, bundle_id)
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user