~ubuntu-desktop/libcanberra/karmic

« back to all changes in this revision

Viewing changes to debian/patches/0020-gtk-initialize-window.desktop-property-by-default.patch

  • Committer: Luke Yelavich
  • Date: 2009-09-21 03:49:49 UTC
  • Revision ID: luke.yelavich@canonical.com-20090921034949-3q6p5h4dx4i35aei
Only ship fixes that do not depend on other commits that introduce code that
      is not desired at this late stage in karmic

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
From e15e168484dbdad0466216cdffe0f899db747d21 Mon Sep 17 00:00:00 2001
2
 
From: Lennart Poettering <lennart@poettering.net>
3
 
Date: Sat, 19 Sep 2009 20:32:33 +0200
4
 
Subject: [PATCH 09/11] gtk: initialize window.desktop property by default
5
 
 
6
 
---
7
 
 src/Makefile.am           |    3 +-
8
 
 src/canberra-gtk-module.c |   14 +++++-----
9
 
 src/canberra-gtk.c        |   59 ++++++++++++++++++++++++++++++++++++--------
10
 
 3 files changed, 57 insertions(+), 19 deletions(-)
11
 
 
12
 
diff --git a/src/Makefile.am b/src/Makefile.am
13
 
index ee7bf57..8da9334 100644
14
 
--- a/src/Makefile.am
15
 
+++ b/src/Makefile.am
16
 
@@ -26,7 +26,8 @@ gnomeautostartdir = $(datadir)/gnome/autostart
17
 
 
18
 
 gdmautostartdir = $(datadir)/gdm/autostart/LoginWindow/
19
 
 
20
 
-AM_CFLAGS = $(PTHREAD_CFLAGS) -DCA_PLUGIN_PATH=\"$(plugindir)\"
21
 
+#AM_CFLAGS = $(PTHREAD_CFLAGS) -DCA_PLUGIN_PATH=\"$(plugindir)\"
22
 
+AM_CFLAGS = $(PTHREAD_CFLAGS) -DCA_PLUGIN_PATH=\"/home/lennart/projects/libcanberra/src/.libs\"
23
 
 AM_CXXFLAGS = $(PTHREAD_CFLAGS)
24
 
 AM_LDADD = $(PTHREAD_LIBS)
25
 
 
26
 
diff --git a/src/canberra-gtk-module.c b/src/canberra-gtk-module.c
27
 
index d0070c1..f9b5463 100644
28
 
--- a/src/canberra-gtk-module.c
29
 
+++ b/src/canberra-gtk-module.c
30
 
@@ -306,9 +306,9 @@ static gint window_get_desktop(GdkDisplay *d, GdkWindow *w) {
31
 
     gint ret = -1;
32
 
 
33
 
     if (XGetWindowProperty(GDK_DISPLAY_XDISPLAY(d), GDK_WINDOW_XID(w),
34
 
-                            gdk_x11_get_xatom_by_name_for_display(d, "_NET_WM_DESKTOP"),
35
 
-                            0, G_MAXLONG, False, XA_CARDINAL, &type_return,
36
 
-                            &format_return, &nitems_return, &bytes_after_return,
37
 
+                           gdk_x11_get_xatom_by_name_for_display(d, "_NET_WM_DESKTOP"),
38
 
+                           0, G_MAXLONG, False, XA_CARDINAL, &type_return,
39
 
+                           &format_return, &nitems_return, &bytes_after_return,
40
 
                            &data) != Success)
41
 
         return -1;
42
 
 
43
 
@@ -334,10 +334,10 @@ static gint display_get_desktop(GdkDisplay *d) {
44
 
     gint ret = -1;
45
 
 
46
 
     if (XGetWindowProperty(GDK_DISPLAY_XDISPLAY(d), DefaultRootWindow(GDK_DISPLAY_XDISPLAY(d)),
47
 
-                            gdk_x11_get_xatom_by_name_for_display(d, "_NET_CURRENT_DESKTOP"),
48
 
-                            0, G_MAXLONG, False, XA_CARDINAL, &type_return,
49
 
-                            &format_return, &nitems_return, &bytes_after_return,
50
 
-                            &data) != Success)
51
 
+                           gdk_x11_get_xatom_by_name_for_display(d, "_NET_CURRENT_DESKTOP"),
52
 
+                           0, G_MAXLONG, False, XA_CARDINAL, &type_return,
53
 
+                           &format_return, &nitems_return, &bytes_after_return,
54
 
+                           &data) != Success)
55
 
         return -1;
56
 
 
57
 
     if (type_return == XA_CARDINAL && format_return == 32 && data) {
58
 
diff --git a/src/canberra-gtk.c b/src/canberra-gtk.c
59
 
index b03eba6..cc6719b 100644
60
 
--- a/src/canberra-gtk.c
61
 
+++ b/src/canberra-gtk.c
62
 
@@ -25,6 +25,7 @@
63
 
 #include <gtk/gtk.h>
64
 
 #include <gdk/gdk.h>
65
 
 #include <gdk/gdkx.h>
66
 
+#include <X11/Xatom.h>
67
 
 
68
 
 #include "canberra.h"
69
 
 #include "canberra-gtk.h"
70
 
@@ -167,6 +168,34 @@ static GtkWindow* get_toplevel(GtkWidget *w) {
71
 
     return GTK_WINDOW(w);
72
 
 }
73
 
 
74
 
+static gint window_get_desktop(GdkDisplay *d, GdkWindow *w) {
75
 
+    Atom type_return;
76
 
+    gint format_return;
77
 
+    gulong nitems_return;
78
 
+    gulong bytes_after_return;
79
 
+    guchar *data = NULL;
80
 
+    gint ret = -1;
81
 
+
82
 
+    if (XGetWindowProperty(GDK_DISPLAY_XDISPLAY(d), GDK_WINDOW_XID(w),
83
 
+                           gdk_x11_get_xatom_by_name_for_display(d, "_NET_WM_DESKTOP"),
84
 
+                           0, G_MAXLONG, False, XA_CARDINAL, &type_return,
85
 
+                           &format_return, &nitems_return, &bytes_after_return,
86
 
+                           &data) != Success)
87
 
+        return -1;
88
 
+
89
 
+    if (type_return == XA_CARDINAL && format_return == 32 && data) {
90
 
+        guint32 desktop = *(guint32*) data;
91
 
+
92
 
+        if (desktop != 0xFFFFFFFF)
93
 
+            ret = (gint) desktop;
94
 
+    }
95
 
+
96
 
+    if (type_return != None && data != NULL)
97
 
+        XFree(data);
98
 
+
99
 
+    return ret;
100
 
+}
101
 
+
102
 
 /**
103
 
  * ca_gtk_proplist_set_for_widget:
104
 
  * @p: The proplist to store these sound event properties in
105
 
@@ -217,19 +246,29 @@ int ca_gtk_proplist_set_for_widget(ca_proplist *p, GtkWidget *widget) {
106
 
     if (GTK_WIDGET_REALIZED(GTK_WIDGET(w))) {
107
 
         GdkWindow *dw = NULL;
108
 
         GdkScreen *screen = NULL;
109
 
-        gint x = 0, y = 0, width = 0, height = 0, screen_width = 0, screen_height = 0;
110
 
+        GdkDisplay *display = NULL;
111
 
+        gint x = -1, y = -1, width = -1, height = -1, screen_width = -1, screen_height = -1;
112
 
 
113
 
         if ((dw = gtk_widget_get_window(GTK_WIDGET(w))))
114
 
             if ((ret = ca_proplist_setf(p, CA_PROP_WINDOW_X11_XID, "%lu", (unsigned long) GDK_WINDOW_XID(dw))) < 0)
115
 
                 return ret;
116
 
 
117
 
-
118
 
-        if ((screen = gtk_widget_get_screen(GTK_WIDGET(w)))) {
119
 
-
120
 
-            if ((t = gdk_display_get_name(gdk_screen_get_display(screen))))
121
 
+        if ((display = gtk_widget_get_display(GTK_WIDGET(w)))) {
122
 
+            if ((t = gdk_display_get_name(display)))
123
 
                 if ((ret = ca_proplist_sets(p, CA_PROP_WINDOW_X11_DISPLAY, t)) < 0)
124
 
                     return ret;
125
 
 
126
 
+            if (dw)  {
127
 
+                gint desktop = window_get_desktop(display, dw);
128
 
+
129
 
+                if (desktop >= 0)
130
 
+                    if ((ret = ca_proplist_setf(p, CA_PROP_WINDOW_DESKTOP, "%i", desktop)) < 0)
131
 
+                        return ret;
132
 
+            }
133
 
+        }
134
 
+
135
 
+        if ((screen = gtk_widget_get_screen(GTK_WIDGET(w)))) {
136
 
+
137
 
             if ((ret = ca_proplist_setf(p, CA_PROP_WINDOW_X11_SCREEN, "%i", gdk_screen_get_number(screen))) < 0)
138
 
                 return ret;
139
 
 
140
 
@@ -260,11 +299,10 @@ int ca_gtk_proplist_set_for_widget(ca_proplist *p, GtkWidget *widget) {
141
 
             if ((ret = ca_proplist_setf(p, CA_PROP_WINDOW_HEIGHT, "%i", height)) < 0)
142
 
                 return ret;
143
 
 
144
 
-        if (x > 0 && width > 0) {
145
 
-            x += width/2;
146
 
-
147
 
+        if (x >= 0 && width > 0) {
148
 
             screen_width = gdk_screen_get_width(gtk_widget_get_screen(GTK_WIDGET(w)));
149
 
 
150
 
+            x += width/2;
151
 
             x = CA_CLAMP(x, 0, screen_width-1);
152
 
 
153
 
             /* We use these strange format strings here to avoid that libc
154
 
@@ -275,11 +313,10 @@ int ca_gtk_proplist_set_for_widget(ca_proplist *p, GtkWidget *widget) {
155
 
                 return ret;
156
 
         }
157
 
 
158
 
-        if (y > 0 && height > 0) {
159
 
-            y += height/2;
160
 
-
161
 
+        if (y >= 0 && height > 0) {
162
 
             screen_height = gdk_screen_get_height(gtk_widget_get_screen(GTK_WIDGET(w)));
163
 
 
164
 
+            y += height/2;
165
 
             y = CA_CLAMP(y, 0, screen_height-1);
166
 
 
167
 
             if ((ret = ca_proplist_setf(p, CA_PROP_WINDOW_VPOS, "%i.%03i", (int) (y/(screen_height-1)), (int) (1000.0*y/(screen_height-1)) % 1000)) < 0)
168
 
1.6.3.3
169