[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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Devilspie2-discuss] (no subject),
Tobias Umbach <=