rpms/libgxim/devel libgxim-fix-unwanted-window-destroy.patch, NONE, 1.1 libgxim.spec, 1.8, 1.9
Akira TAGOH
tagoh at fedoraproject.org
Tue Mar 3 14:38:58 UTC 2009
- Previous message (by thread): rpms/libgxim/F-10 libgxim-fix-unwanted-window-destroy.patch, NONE, 1.1 libgxim.spec, 1.6, 1.7
- Next message (by thread): rpms/sugar-chat/devel .cvsignore, 1.3, 1.4 sources, 1.3, 1.4 sugar-chat.spec, 1.4, 1.5
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Author: tagoh
Update of /cvs/pkgs/rpms/libgxim/devel
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv4290
Modified Files:
libgxim.spec
Added Files:
libgxim-fix-unwanted-window-destroy.patch
Log Message:
* Tue Mar 3 2009 Akira TAGOH <tagoh at redhat.com> - 0.3.2-4
- Fix destroying a window unexpectedly. (#488223)
libgxim-fix-unwanted-window-destroy.patch:
--- NEW FILE libgxim-fix-unwanted-window-destroy.patch ---
2009-03-03 Akira TAGOH <akira at tagoh.org>
* libgxim/gximmisc.c (g_xim_get_window): increase a reference count
here to avoid destroying a window unexpectedly.
(g_xim_get_selection_owner): hack to keep similar behavior.
* libgxim/gximclconn.c (g_xim_client_transport_real_do_send_via_property):
do increase/decrease a reference count appropriately
(g_xim_client_transport_real_do_send_via_cm): likewise.
* libgxim/gximsrvconn.c (g_xim_server_transport_real_do_send_via_property):
likewise.
(g_xim_server_transport_real_do_send_via_cm): likewise.
* libgxim/gximcltmpl.c (g_xim_cl_tmpl_real_dispose): likewise.
(g_xim_cl_tmpl_real_translate_events): likewise.
(g_xim_cl_tmpl_real_selection_notify_event): likewise.
* libgxim/gximsrvtmpl.c (_weak_notify_conn_cb): likewise.
(g_xim_srv_tmpl_real_translate_events): likewise.
(g_xim_srv_tmpl_real_xconnect): likewise.
(g_xim_srv_tmpl_send_selection_notify): likewise.
(g_xim_srv_tmpl_add_connection): likewise.
Index: libgxim/gximclconn.c
===================================================================
--- libgxim/gximclconn.c (ãªãã¸ã§ã³ 199)
+++ libgxim/gximclconn.c (ãªãã¸ã§ã³ 201)
@@ -508,7 +508,7 @@
ev = gdk_event_new(GDK_CLIENT_EVENT);
G_XIM_CHECK_ALLOC (ev, FALSE);
- ev->client.window = g_object_ref(w);
+ ev->client.window = w;
ev->client.message_type = G_XIM_TRANSPORT_GET_IFACE (trans)->atom_xim_protocol;
ev->client.data_format = 32;
ev->client.data.l[0] = length;
@@ -565,7 +565,7 @@
ev = gdk_event_new(GDK_CLIENT_EVENT);
G_XIM_CHECK_ALLOC (ev, FALSE);
- ev->client.window = g_object_ref(w);
+ ev->client.window = w;
ev->client.message_type = G_XIM_TRANSPORT_GET_IFACE (trans)->atom_xim_protocol;
ev->client.data_format = 8;
memset(ev->client.data.b, 0, transport_size);
Index: libgxim/gximsrvconn.c
===================================================================
--- libgxim/gximsrvconn.c (ãªãã¸ã§ã³ 199)
+++ libgxim/gximsrvconn.c (ãªãã¸ã§ã³ 201)
@@ -524,7 +524,7 @@
ev = gdk_event_new(GDK_CLIENT_EVENT);
G_XIM_CHECK_ALLOC (ev, FALSE);
- ev->client.window = g_object_ref(w);
+ ev->client.window = w;
ev->client.message_type = G_XIM_TRANSPORT_GET_IFACE (trans)->atom_xim_protocol;
ev->client.data_format = 32;
ev->client.data.l[0] = length;
@@ -581,7 +581,7 @@
ev = gdk_event_new(GDK_CLIENT_EVENT);
G_XIM_CHECK_ALLOC (ev, FALSE);
- ev->client.window = g_object_ref(w);
+ ev->client.window = w;
ev->client.message_type = G_XIM_TRANSPORT_GET_IFACE (trans)->atom_xim_protocol;
ev->client.data_format = 8;
memset(ev->client.data.b, 0, transport_size);
Index: libgxim/gximmisc.c
===================================================================
--- libgxim/gximmisc.c (ãªãã¸ã§ã³ 199)
+++ libgxim/gximmisc.c (ãªãã¸ã§ã³ 201)
@@ -725,7 +725,7 @@
G_XIM_NATIVE_WINDOW_TO_POINTER (window));
}
- return retval;
+ return retval != NULL ? g_object_ref(retval) : NULL;
}
GdkPixmap *
@@ -750,6 +750,7 @@
GdkAtom selection)
{
Window xwindow;
+ GdkWindow *retval;
g_return_val_if_fail (GDK_IS_DISPLAY (display), NULL);
g_return_val_if_fail (selection != GDK_NONE, NULL);
@@ -763,7 +764,11 @@
if (xwindow == None)
return NULL;
- return g_xim_get_window(display, (GdkNativeWindow)xwindow);
+ retval = g_xim_get_window(display, (GdkNativeWindow)xwindow);
+ /* just decrease a counter to not mind unref outside this function */
+ g_object_unref(retval);
+
+ return retval;
}
GdkWindow *
Index: libgxim/gximcltmpl.c
===================================================================
--- libgxim/gximcltmpl.c (ãªãã¸ã§ã³ 199)
+++ libgxim/gximcltmpl.c (ãªãã¸ã§ã³ 201)
@@ -178,6 +178,7 @@
w = g_xim_get_window(dpy, nw);
if (w)
g_xim_core_unwatch_event(core, w);
+ g_object_unref(w);
w = g_xim_transport_get_channel(G_XIM_TRANSPORT (client->connection), NULL);
if (w)
g_xim_core_unwatch_event(core, w);
@@ -231,7 +232,7 @@
*/
if (w) {
event->any.type = GDK_DESTROY;
- event->any.window = g_object_ref(w);
+ event->any.window = w;
event->any.send_event = xev->xdestroywindow.send_event ? TRUE : FALSE;
retval = GDK_FILTER_TRANSLATE;
}
@@ -332,7 +333,7 @@
{
GXimClientTemplate *client = G_XIM_CL_TMPL (core);
GdkDisplay *dpy = g_xim_core_get_display(core);
- GdkWindow *w;
+ GdkWindow *w = NULL;
GdkAtom atom_type;
gint format, bytes;
gchar *prop = NULL, *p = NULL;
@@ -409,6 +410,8 @@
goto end;
}
end:
+ if (w)
+ g_object_unref(w);
g_free(prop);
g_free(p);
Index: libgxim/gximsrvtmpl.c
===================================================================
--- libgxim/gximsrvtmpl.c (ãªãã¸ã§ã³ 199)
+++ libgxim/gximsrvtmpl.c (ãªãã¸ã§ã³ 201)
@@ -331,6 +331,7 @@
G_XIM_NATIVE_WINDOW_TO_POINTER (nw));
w = g_xim_get_window(dpy, nw);
g_xim_core_unwatch_event(core, w);
+ g_object_unref(w);
g_hash_table_remove(server->conn_table,
G_XIM_NATIVE_WINDOW_TO_POINTER (nw));
}
@@ -341,6 +342,7 @@
G_XIM_NATIVE_WINDOW_TO_POINTER (nw));
w = g_xim_get_window(dpy, nw);
g_xim_core_unwatch_event(core, w);
+ g_object_unref(w);
g_hash_table_remove(server->conn_table,
G_XIM_NATIVE_WINDOW_TO_POINTER (nw));
}
@@ -473,7 +475,7 @@
*/
if (w) {
event->any.type = GDK_DESTROY;
- event->any.window = g_object_ref(w);
+ event->any.window = w;
event->any.send_event = xev->xdestroywindow.send_event ? TRUE : FALSE;
retval = GDK_FILTER_TRANSLATE;
}
@@ -762,7 +764,7 @@
ev = gdk_event_new(GDK_CLIENT_EVENT);
G_XIM_CHECK_ALLOC_WITH_CODE (ev, g_object_unref(conn), NULL);
- ev->client.window = g_object_ref(window);
+ ev->client.window = window;
ev->client.message_type = event->message_type;
ev->client.data_format = 32;
ev->client.data.l[0] = (long)comm_window;
@@ -1110,6 +1112,7 @@
window = g_xim_get_window(dpy, event->requestor);
gdk_property_change(window, event->property, event->target,
8, GDK_PROP_MODE_REPLACE, (const guchar *)data, length);
+ g_object_unref(window);
gdk_selection_send_notify_for_display(dpy,
event->requestor,
event->selection,
@@ -1170,6 +1173,7 @@
mask = gdk_window_get_events(w);
gdk_window_set_events(w, mask | GDK_STRUCTURE_MASK);
g_xim_core_watch_event(core, w);
+ g_object_unref(w);
}
/**
Index: libgxim.spec
===================================================================
RCS file: /cvs/pkgs/rpms/libgxim/devel/libgxim.spec,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- libgxim.spec 2 Mar 2009 05:48:14 -0000 1.8
+++ libgxim.spec 3 Mar 2009 14:38:28 -0000 1.9
@@ -1,6 +1,6 @@
Name: libgxim
Version: 0.3.2
-Release: 3%{?dist}
+Release: 4%{?dist}
License: LGPLv2+
URL: http://code.google.com/p/libgxim/
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
@@ -8,6 +8,7 @@
BuildRequires: dbus-devel > 0.23, dbus-glib-devel >= 0.74, glib2-devel >= 2.16, gtk2-devel
Source0: http://libgxim.googlecode.com/files/%{name}-%{version}.tar.bz2
Patch0: libgxim-fix-x-event.patch
+Patch1: libgxim-fix-unwanted-window-destroy.patch
Summary: GObject-based XIM protocol library
Group: System Environment/Libraries
@@ -40,6 +41,7 @@
%prep
%setup -q
%patch0 -p0 -b .xevent
+%patch1 -p0 -b .window
%build
@@ -79,6 +81,9 @@
%{_datadir}/gtk-doc/html/libgxim
%changelog
+* Tue Mar 3 2009 Akira TAGOH <tagoh at redhat.com> - 0.3.2-4
+- Fix destroying a window unexpectedly. (#488223)
+
* Mon Mar 2 2009 Akira TAGOH <tagoh at redhat.com> - 0.3.2-3
- Backport a patch to fix the unknown event issue.
- Previous message (by thread): rpms/libgxim/F-10 libgxim-fix-unwanted-window-destroy.patch, NONE, 1.1 libgxim.spec, 1.6, 1.7
- Next message (by thread): rpms/sugar-chat/devel .cvsignore, 1.3, 1.4 sources, 1.3, 1.4 sugar-chat.spec, 1.4, 1.5
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the fedora-extras-commits
mailing list