rpms/imsettings/devel imsettings.diff, NONE, 1.1 imsettings.spec, 1.4, 1.5

Akira TAGOH (tagoh) fedora-extras-commits at redhat.com
Wed Jun 18 08:19:22 UTC 2008


Author: tagoh

Update of /cvs/pkgs/rpms/imsettings/devel
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv3164

Modified Files:
	imsettings.spec 
Added Files:
	imsettings.diff 
Log Message:
* Wed Jul 18 2008 Akira TAGOH <tagoh at redhat.com> - 0.101.2-2
- Backport patch from upstream to solve issues.
  - always saying IM is running when no .xinputrc.
  - workaround for a delay of that IM is ready for XIM.

imsettings.diff:

--- NEW FILE imsettings.diff ---
2008-06-18  Akira TAGOH  <tagoh at redhat.com>

	* backends/xim/loopback.c (xim_loopback_finalize): unset the selection
	owner.

	* backends/xim/utils.c (xim_lookup_atom): deal with the X event in
	the queue before doing something.

	* backends/xim/server.c (xim_server_set_property): work around for
	a dalay until IM is ready. (rhbz#451753)

	* src/factory.c (imsettings_manager_real_what_im_is_running):
	Fix a typo. always saying IM is running if no .xinputrc.

Index: src/factory.c
===================================================================
--- src/factory.c	(リビジョン 65)
+++ src/factory.c	(作業コピー)
@@ -667,7 +667,7 @@
 	conn = dbus_bus_get(DBUS_BUS_SESSION, NULL);
 	req = imsettings_request_new(conn, IMSETTINGS_INFO_INTERFACE_DBUS);
 	module = imsettings_request_get_current_user_im(req, error);
-	if (error)
+	if (*error != NULL)
 		goto end;
 	if (module) {
 		info = imsettings_request_get_info_object(req, module, error);
Index: backends/xim/utils.c
===================================================================
--- backends/xim/utils.c	(リビジョン 65)
+++ backends/xim/utils.c	(作業コピー)
@@ -126,6 +126,7 @@
 	if (xim_server_name == NULL)
 		return None;
 
+	XSync(dpy, False);
 	s1 = g_strdup_printf("@server=%s", xim_server_name);
 	a = xim_get_atoms(dpy);
 	XGetWindowProperty(dpy, DefaultRootWindow(dpy), a->atom_xim_servers,
Index: backends/xim/server.c
===================================================================
--- backends/xim/server.c	(リビジョン 65)
+++ backends/xim/server.c	(作業コピー)
@@ -27,6 +27,7 @@
 
 #include <stdint.h>
 #include <string.h>
+#include <unistd.h>
 #include <glib/gi18n-lib.h>
 #include <X11/Xatom.h>
 #include "imsettings/imsettings-marshal.h"
@@ -336,39 +337,52 @@
 						 "selection_atom", &priv->atom_selection,
 						 NULL);
 			    }
-		    } else if ((a = xim_lookup_atom(xim->dpy, name)) != None) {
-			    Window w = XGetSelectionOwner(xim->dpy, a);
-			    gchar *old_xim;
+		    } else {
+			    guint n_retry = 3;
 
-			    if (w != 0) {
-				    priv->target_xim_window = w;
-				    old_xim = priv->target_xim_name;
-				    priv->target_xim_name = g_strdup(name);
-				    priv->atom_selection = a;
+		      retry:
+			    if ((a = xim_lookup_atom(xim->dpy, name)) != None) {
+				    Window w = XGetSelectionOwner(xim->dpy, a);
+				    gchar *old_xim;
 
-				    g_hash_table_foreach(priv->conn_table,
-							 xim_server_update_xim_server,
-							 priv->target_xim_name);
+				    if (w != 0) {
+					    priv->target_xim_window = w;
+					    old_xim = priv->target_xim_name;
+					    priv->target_xim_name = g_strdup(name);
+					    priv->atom_selection = a;
 
-				    if (strcmp(old_xim, "none") == 0) {
-					    /* destroy the dummy XIM server */
-					    if (priv->verbose)
-						    g_print("D: Destroying an instance of loopback server.\n");
-					    if (priv->loopback) {
-						    g_object_unref(priv->loopback);
-						    priv->loopback = NULL;
+					    g_hash_table_foreach(priv->conn_table,
+								 xim_server_update_xim_server,
+								 priv->target_xim_name);
+
+					    if (strcmp(old_xim, "none") == 0) {
+						    /* destroy the dummy XIM server */
+						    if (priv->verbose)
+							    g_print("D: Destroying an instance of loopback server.\n");
+						    if (priv->loopback) {
+							    g_object_unref(priv->loopback);
+							    priv->loopback = NULL;
+						    }
 					    }
+
+					    g_free(old_xim);
+				    } else {
+					    gchar *s = XGetAtomName(xim->dpy, a);
+
+					    g_warning("No selection owner of %s. XIM server may be not running", s);
+					    XFree(s);
 				    }
-
-				    g_free(old_xim);
 			    } else {
-				    gchar *s = XGetAtomName(xim->dpy, a);
-
-				    g_warning("No selection owner of %s. XIM server may be not running", s);
-				    XFree(s);
+				    if (n_retry > 0) {
+					    g_warning("No XIM server `%s' is running. retrying to find out...",
+						      name);
+					    n_retry--;
+					    sleep(3);
+					    goto retry;
+				    } else {
+					    g_printerr("No such XIM server is running: %s\n", name);
+				    }
 			    }
-		    } else {
-			    g_warning("No such XIM server is running: %s", name);
 		    }
 		    break;
 	    case PROP_VERBOSE:
@@ -418,10 +432,10 @@
 
 	g_source_destroy((GSource *)priv->event_loop);
 	g_hash_table_destroy(priv->conn_table);
-	XDestroyWindow(xim->dpy, priv->selection_window);
 	g_free(priv->target_xim_name);
 	if (priv->loopback)
 		g_object_unref(priv->loopback);
+	XDestroyWindow(xim->dpy, priv->selection_window);
 
 	if (G_OBJECT_CLASS (xim_server_parent_class)->finalize)
 		G_OBJECT_CLASS (xim_server_parent_class)->finalize(object);
Index: backends/xim/loopback.c
===================================================================
--- backends/xim/loopback.c	(リビジョン 65)
+++ backends/xim/loopback.c	(作業コピー)
@@ -710,6 +710,11 @@
 
 	if (priv->selection_window)
 		XDestroyWindow(proto->dpy, priv->selection_window);
+	XSetSelectionOwner(proto->dpy,
+			   priv->atom_selection,
+			   None,
+			   CurrentTime);
+	XSync(proto->dpy, False);
 	g_hash_table_destroy(priv->comm_table);
 	g_source_destroy((GSource *)priv->event_loop);
 


Index: imsettings.spec
===================================================================
RCS file: /cvs/pkgs/rpms/imsettings/devel/imsettings.spec,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- imsettings.spec	17 Jun 2008 06:10:49 -0000	1.4
+++ imsettings.spec	18 Jun 2008 08:18:35 -0000	1.5
@@ -1,6 +1,6 @@
 Name:		imsettings
 Version:	0.101.2
-Release:	1%{?dist}
+Release:	2%{?dist}
 License:	LGPLv2+
 URL:		http://code.google.com/p/imsettings/
 BuildRoot:	%{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
@@ -11,6 +11,7 @@
 BuildRequires:	libX11-devel
 Source0:	http://imsettings.googlecode.com/files/%{name}-%{version}.tar.bz2
 Patch0:		imsettings-constraint-of-language.patch
+Patch1:		imsettings.diff
 
 Summary:	Delivery framework for general Input Method configuration
 Group:		Applications/System
@@ -73,6 +74,7 @@
 %prep
 %setup -q
 %patch0 -p1 -b .0-lang
+%patch1 -p0 -b .backport
 
 %build
 %configure	\
@@ -150,6 +152,11 @@
 
 
 %changelog
+* Wed Jul 18 2008 Akira TAGOH <tagoh at redhat.com> - 0.101.2-2
+- Backport patch from upstream to solve issues.
+  - always saying IM is running when no .xinputrc.
+  - workaround for a delay of that IM is ready for XIM.
+
 * Tue Jun 17 2008 Akira TAGOH <tagoh at redhat.com> - 0.101.2-1
 - New upstream release.
   - Fix a typo in the help message. (#451739)




More information about the fedora-extras-commits mailing list