X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fprop.c;h=44d0f2bf064c9aae0b76aa6b9702fc98d824e641;hb=3424de66b2fa48f259e3892da3ad0a6427f389b4;hp=cb432ac3d38f4a0aff6681edaac9e229dfc7543b;hpb=7886b797a36f5a035a75a19424e0b3cf7825baf8;p=chaz%2Fopenbox diff --git a/openbox/prop.c b/openbox/prop.c index cb432ac3..44d0f2bf 100644 --- a/openbox/prop.c +++ b/openbox/prop.c @@ -45,6 +45,7 @@ void prop_startup() CREATE(net_close_window, "_NET_CLOSE_WINDOW"); CREATE(net_wm_moveresize, "_NET_WM_MOVERESIZE"); + CREATE(net_moveresize_window, "_NET_MOVERESIZE_WINDOW"); CREATE(net_wm_name, "_NET_WM_NAME"); CREATE(net_wm_visible_name, "_NET_WM_VISIBLE_NAME"); @@ -185,7 +186,7 @@ static gboolean get_prealloc(Window win, Atom prop, Atom type, int size, ((guint16*)data)[i] = ((guint16*)xdata)[i]; break; case 32: - ((guint32*)data)[i] = ((guint32*)xdata)[i]; + ((guint32*)data)[i] = ((gulong*)xdata)[i]; break; default: g_assert_not_reached(); /* unhandled size */ @@ -224,7 +225,7 @@ static gboolean get_all(Window win, Atom prop, Atom type, int size, ((guint16*)*data)[i] = ((guint16*)xdata)[i]; break; case 32: - ((guint32*)*data)[i] = ((guint32*)xdata)[i]; + ((guint32*)*data)[i] = ((gulong*)xdata)[i]; break; default: g_assert_not_reached(); /* unhandled size */ @@ -267,9 +268,10 @@ gboolean prop_get_string_locale(Window win, Atom prop, char **ret) int nstr; if (get_stringlist(win, prop, &list, &nstr) && nstr) { - *ret = g_locale_to_utf8(list[0], -1, NULL, NULL, NULL); + *ret = g_convert(list[0], strlen(list[0]), "UTF-8", "ISO-8859-1", + NULL, NULL, NULL); XFreeStringList(list); - if (ret) return TRUE; + if (*ret) return TRUE; } return FALSE; } @@ -285,13 +287,14 @@ gboolean prop_get_strings_locale(Window win, Atom prop, char ***ret) p = raw; for (i = 0; i < num; ++i) { - (*ret)[i] = g_locale_to_utf8(p, -1, NULL, NULL, NULL); + (*ret)[i] = g_convert(p, strlen(p), "UTF-8", "ISO-8859-1", + NULL, NULL, NULL); /* make sure translation did not fail */ if (!(*ret)[i]) { g_strfreev(*ret); /* free what we did so far */ break; /* the force is not strong with us */ } - p = strchr(p, '\0'); + p += strlen(p) + 1; } g_free(raw); if (i == num) @@ -303,12 +306,17 @@ gboolean prop_get_strings_locale(Window win, Atom prop, char ***ret) gboolean prop_get_string_utf8(Window win, Atom prop, char **ret) { char *raw; + char *str; guint num; if (get_all(win, prop, prop_atoms.utf8, 8, (guchar**)&raw, &num)) { - *ret = g_strndup(raw, num); /* grab the first string from the list */ + str = g_strndup(raw, num); /* grab the first string from the list */ g_free(raw); - return TRUE; + if (g_utf8_validate(str, -1, NULL)) { + *ret = str; + return TRUE; + } + g_free(str); } return FALSE; } @@ -324,8 +332,11 @@ gboolean prop_get_strings_utf8(Window win, Atom prop, char ***ret) p = raw; for (i = 0; i < num; ++i) { - (*ret)[i] = g_strdup(p); - p = strchr(p, '\0'); + if (g_utf8_validate(p, -1, NULL)) + (*ret)[i] = g_strdup(p); + else + (*ret)[i] = g_strdup(""); + p += strlen(p) + 1; } g_free(raw); return TRUE;