summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Udaltsov <svu@gnome.org>2009-10-12 20:28:55 +0000
committerSergey Udaltsov <svu@gnome.org>2009-10-12 20:28:55 +0000
commitc4a650f9a9dd8e672ddecb5fbd96dccf35931484 (patch)
treec1d616eedb77bf1dd8103d305c1afda5681dd084
parent9ea4cbefa5cfeac7f8b77a17380d682bf8741d16 (diff)
downloadlibxklavier-c4a650f9a9dd8e672ddecb5fbd96dccf35931484.tar.gz
handling for transient windows, group derived from the parent window. By Paul Sokolovsky
-rw-r--r--ChangeLog6
-rw-r--r--libxklavier/xklavier_toplevel.c16
2 files changed, 22 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index a326340..7bf0343 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2009-10-12 svu
+
+ * libxklavier/xklavier_toplevel.c: using transient property for smart
+ handling of the popup windows (for the per-window layout scenario).
+ Nice idea by Paul Sokolovsky
+
2009-09-30 svu
* libxklavier/xklavier_evt.c: ignore BadDrawable error,
diff --git a/libxklavier/xklavier_toplevel.c b/libxklavier/xklavier_toplevel.c
index e48de9d..651dc1a 100644
--- a/libxklavier/xklavier_toplevel.c
+++ b/libxklavier/xklavier_toplevel.c
@@ -114,6 +114,22 @@ xkl_engine_add_toplevel_window(XklEngine * engine, Window toplevel_win,
g_signal_lookup("new-toplevel-window", xkl_engine_get_type());
g_signal_emitv(params, signal_id, 0, &rv);
default_group_to_use = g_value_get_int(&rv);
+
+ if (default_group_to_use == -1) {
+ Window transient_for = 0;
+ if (XGetTransientForHint(xkl_engine_get_display(engine), toplevel_win, &transient_for)) {
+ if (transient_for) {
+ XklState trans_state;
+ gboolean have_state =
+ xkl_engine_get_toplevel_window_state(engine,
+ transient_for,
+ &trans_state);
+ if (have_state) {
+ default_group_to_use = trans_state.group;
+ }
+ }
+ }
+ }
if (default_group_to_use == -1)
default_group_to_use =