devilspie2-discuss
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Devilspie2-discuss] (no subject)


From: Tobias Umbach
Subject: [Devilspie2-discuss] (no subject)
Date: Tue, 18 Jun 2019 16:30:32 +0200
User-agent: Mutt/1.10.1 (2018-07-13)

>From dcb500115054228d37883e973ccbbcb3798e4d70 Mon Sep 17 00:00:00 2001
From: Flisk <address@hidden>
Date: Tue, 18 Jun 2019 15:52:32 +0200
Subject: [PATCH] Support UTF8_STRING window property setting

---
 README                 |  4 +++-
 src/error_strings.c    |  9 +++++++++
 src/error_strings.h    |  1 +
 src/script_functions.c | 13 +++++++++----
 src/xutils.c           |  8 ++++----
 src/xutils.h           |  2 +-
 6 files changed, 27 insertions(+), 10 deletions(-)

diff --git a/README b/README
index f736f58..eeb208b 100644
--- a/README
+++ b/README
@@ -238,10 +238,12 @@ set_window_position2(xpos, ypos)
    (Available from version 0.21)
 
 
-set_window_property(property, value)
+set_window_property(property, value, [utf8])
 
    Set a property of a window to a string or a cardinal (32-bit integer or
    boolean).
+   Optionally takes a boolean to indicate UTF8_STRING properties. Ignored
+   for non-string values.
    (Available from version 0.??)
 
 
diff --git a/src/error_strings.c b/src/error_strings.c
index 931a6b5..1812aa4 100644
--- a/src/error_strings.c
+++ b/src/error_strings.c
@@ -30,6 +30,7 @@ gchar *two_indata_expected_error = NULL;
 gchar *four_indata_expected_error = NULL;
 
 gchar *one_or_two_indata_expected_error = NULL;
+gchar *two_or_three_indata_expected_error = NULL;
 
 gchar *number_expected_as_indata_error = NULL;
 gchar *boolean_expected_as_indata_error = NULL;
@@ -85,6 +86,13 @@ int init_script_error_messages()
                return -1;
        }
 
+       two_or_three_indata_expected_error = g_strdup_printf(_("Two or three 
indata expected"));
+       if (!two_or_three_indata_expected_error) {
+               printf("%s", ALLOCATE_ERROR_STRING);
+               printf("\n");
+               return -1;
+       }
+
        number_expected_as_indata_error=
            g_strdup_printf(_("Number expected as indata"));
        if (!number_expected_as_indata_error) {
@@ -155,6 +163,7 @@ void done_script_error_messages()
        g_free(four_indata_expected_error);
 
        g_free(one_or_two_indata_expected_error);
+       g_free(two_or_three_indata_expected_error);
 
        g_free(number_expected_as_indata_error);
        g_free(boolean_expected_as_indata_error);
diff --git a/src/error_strings.h b/src/error_strings.h
index efb5a09..0b3995e 100644
--- a/src/error_strings.h
+++ b/src/error_strings.h
@@ -28,6 +28,7 @@ extern gchar *two_indata_expected_error;
 extern gchar *four_indata_expected_error;
 
 extern gchar *one_or_two_indata_expected_error;
+extern gchar *two_or_three_indata_expected_error;
 
 extern gchar *number_expected_as_indata_error;
 extern gchar *boolean_expected_as_indata_error;
diff --git a/src/script_functions.c b/src/script_functions.c
index 9b7d92d..80c8851 100644
--- a/src/script_functions.c
+++ b/src/script_functions.c
@@ -1439,8 +1439,8 @@ int c_set_window_property(lua_State *lua)
 {
        int top = lua_gettop(lua);
 
-       if (top != 2) {
-               luaL_error(lua, "set_window_property: %s", 
two_indata_expected_error);
+       if (top < 2 || top > 3) {
+               luaL_error(lua, "set_window_property: %s", 
two_or_three_indata_expected_error);
                return 0;
        }
 
@@ -1459,8 +1459,13 @@ int c_set_window_property(lua_State *lua)
 
        switch (type) {
        case LUA_TSTRING:
-               my_wnck_set_string_property_latin1(wnck_window_get_xid(window), 
my_wnck_atom_get(property),
-                                                  lua_tostring(lua, 2));
+               type = lua_type(lua, 3);
+               if (type != LUA_TBOOLEAN) {
+                       luaL_error(lua, "set_window_property: %s", 
boolean_expected_as_indata_error);
+                       return 0;
+               }
+               my_wnck_set_string_property(wnck_window_get_xid(window), 
my_wnck_atom_get(property),
+                                           lua_tostring(lua, 2), 
lua_toboolean(lua, 3));
                break;
 
        case LUA_TNUMBER:
diff --git a/src/xutils.c b/src/xutils.c
index ff8268c..db4111a 100644
--- a/src/xutils.c
+++ b/src/xutils.c
@@ -309,14 +309,14 @@ char* my_wnck_get_string_property_latin1(Window xwindow, 
Atom atom)
 /**
  *
  */
-void my_wnck_set_string_property_latin1(Window xwindow, Atom atom, const gchar 
*const string)
+void my_wnck_set_string_property(Window xwindow, Atom atom, const gchar *const 
string, gboolean utf8)
 {
        const unsigned char *const str = (const unsigned char *)string;
+       Display *display = gdk_x11_get_default_xdisplay();
+       Atom type = utf8 ? XInternAtom(display, "UTF8_STRING", False) : 
XA_STRING;
 
        devilspie2_error_trap_push();
-       XChangeProperty (gdk_x11_get_default_xdisplay (),
-                        xwindow, atom, XA_STRING, 8,
-                        PropModeReplace, str, strlen(string));
+       XChangeProperty (display, xwindow, atom, type, 8, PropModeReplace, str, 
strlen(string));
        devilspie2_error_trap_pop ();
 }
 
diff --git a/src/xutils.h b/src/xutils.h
index 51af79e..ea7fb36 100644
--- a/src/xutils.h
+++ b/src/xutils.h
@@ -40,7 +40,7 @@ gboolean decorate_window(Window xid);
 gboolean undecorate_window(Window xid);
 
 char* my_wnck_get_string_property_latin1 (Window xwindow, Atom atom);
-void my_wnck_set_string_property_latin1 (Window xwindow, Atom atom, const 
gchar *const value);
+void my_wnck_set_string_property(Window xwindow, Atom atom, const gchar *const 
value, gboolean utf8);
 void my_wnck_set_cardinal_property (Window xwindow, Atom atom, int32_t value);
 void my_wnck_delete_property (Window xwindow, Atom atom);
 
-- 
2.21.0




reply via email to

[Prev in Thread] Current Thread [Next in Thread]