diff options
author | Jasper St. Pierre <jstpierre@mecheye.net> | 2014-04-06 17:03:53 -0400 |
---|---|---|
committer | Alberts Muktupāvels <alberts.muktupavels@gmail.com> | 2015-01-07 13:22:41 +0200 |
commit | fd65a64082f8bfbbba0ccf49b3c40d0ade74a2f4 (patch) | |
tree | c8a8bee4bb11a8e00d1df40a6b0f2e9e72759891 | |
parent | 4763561cfc2841ec0866201946299178b2e46571 (diff) | |
download | metacity-fd65a64082f8bfbbba0ccf49b3c40d0ade74a2f4.tar.gz |
xprop: Don't use GDK for reading text properties
-rw-r--r-- | src/core/xprops.c | 26 | ||||
-rw-r--r-- | src/include/ui.h | 3 | ||||
-rw-r--r-- | src/ui/ui.c | 32 |
3 files changed, 24 insertions, 37 deletions
diff --git a/src/core/xprops.c b/src/core/xprops.c index f1560ca0..8b162d7f 100644 --- a/src/core/xprops.c +++ b/src/core/xprops.c @@ -644,6 +644,29 @@ meta_prop_get_cardinal_with_atom_type (MetaDisplay *display, return cardinal_with_atom_type_from_results (&results, prop_type, cardinal_p); } +static char * +text_property_to_utf8 (Display *xdisplay, + const XTextProperty *prop) +{ + char *ret = NULL; + char **local_list = NULL; + int count = 0; + int res; + + res = XmbTextPropertyToTextList (xdisplay, prop, &local_list, &count); + if (res == XNoMemory || res == XLocaleNotSupported || res == XConverterNotFound) + goto out; + + if (count == 0) + goto out; + + ret = g_strdup (local_list[0]); + + out: + meta_XFree (local_list); + return ret; +} + static gboolean text_property_from_results (GetPropertyResults *results, char **utf8_str_p) @@ -658,8 +681,7 @@ text_property_from_results (GetPropertyResults *results, tp.format = results->format; tp.nitems = results->n_items; - *utf8_str_p = meta_text_property_to_utf8 (results->display->xdisplay, - &tp); + *utf8_str_p = text_property_to_utf8 (results->display->xdisplay, &tp); if (tp.value != NULL) XFree (tp.value); diff --git a/src/include/ui.h b/src/include/ui.h index 6f9e9c08..76525270 100644 --- a/src/include/ui.h +++ b/src/include/ui.h @@ -148,9 +148,6 @@ GdkPixbuf* meta_ui_get_default_mini_icon (MetaUI *ui); gboolean meta_ui_window_should_not_cause_focus (Display *xdisplay, Window xwindow); -char* meta_text_property_to_utf8 (Display *xdisplay, - const XTextProperty *prop); - void meta_ui_set_current_theme (const char *name, gboolean force_reload); gboolean meta_ui_have_a_theme (void); diff --git a/src/ui/ui.c b/src/ui/ui.c index a4cb4440..2d28ce1e 100644 --- a/src/ui/ui.c +++ b/src/ui/ui.c @@ -663,38 +663,6 @@ meta_ui_window_should_not_cause_focus (Display *xdisplay, return FALSE; } -char* -meta_text_property_to_utf8 (Display *xdisplay, - const XTextProperty *prop) -{ - GdkDisplay *display; - char **list; - int count; - char *retval; - - list = NULL; - - display = gdk_x11_lookup_xdisplay (xdisplay); - count = gdk_text_property_to_utf8_list_for_display (display, - gdk_x11_xatom_to_atom_for_display (display, prop->encoding), - prop->format, - prop->value, - prop->nitems, - &list); - - if (count == 0) - retval = NULL; - else - { - retval = list[0]; - list[0] = g_strdup (""); /* something to free */ - } - - g_strfreev (list); - - return retval; -} - void meta_ui_theme_get_frame_borders (MetaUI *ui, MetaFrameType type, |