File ibus_indicator-14.patch of Package ibus

diff -ruN ibus-1.4.2.org/ibus_indicator-14@ftake.github.com/extension.js ibus-1.4.2/ibus_indicator-14@ftake.github.com/extension.js
--- ibus-1.4.2.org/ibus_indicator-14@ftake.github.com/extension.js	1970-01-01 09:00:00.000000000 +0900
+++ ibus-1.4.2/ibus_indicator-14@ftake.github.com/extension.js	2013-02-17 00:46:21.244945766 +0900
@@ -0,0 +1,107 @@
+const Main = imports.ui.main
+const Shell = imports.gi.Shell
+const Panel = imports.ui.panel
+const Lang = imports.lang
+const PanelMenu = imports.ui.panelMenu
+const NotificationDaemon = imports.ui.notificationDaemon;
+
+let addIndicator = null
+
+const AddIndicator = new Lang.Class({
+    Name: 'AddIndicator',
+
+    _init: function() {
+	Main.notificationDaemon._trayManager.connect('tray-icon-added', Lang.bind(this, this._onTrayIconAdded))
+	Main.notificationDaemon._trayManager.connect('tray-icon-removed', Lang.bind(this, this._onTrayIconRemoved))
+	Panel.PANEL_ITEM_IMPLEMENTATIONS['ibus-ui-gtk-14'] = null;
+    },
+
+    _onTrayIconAdded: function(manager, actor) {
+	if (actor.wm_class == 'ibus-ui-gtk-14') {
+	    // for patched IBus 1.4
+	    this._icon = actor;
+	    this._addIBusIndicator();
+	} else if (actor.wm_class == 'ibus-ui-gtk') {
+	    try {
+		var IBus = imports.gi.IBus
+		if (!('new_async' in IBus.Bus)) {
+		    // This IBus does not support GNOME 3.6
+		    this._icon = actor;
+		    this._addIBusIndicator();
+		}
+	    } catch (e) {
+		IBus = null
+		log(e)
+	    }
+	}
+    },
+
+    _addIBusIndicator: function() {
+	if (this._enabled && this._icon) {
+	    this._removeFromNotificationDaemon();
+	    this._icon.height = Panel.PANEL_ICON_SIZE
+	    this._icon.queue_redraw()
+	    this._indicator = new PanelMenu.Button()
+	    this._indicator.actor.add_actor(this._icon)
+	    Main.panel.addToStatusArea('ibus-ui-gtk-14', this._indicator, 0, 'right')
+	    NotificationDaemon.STANDARD_TRAY_ICON_IMPLEMENTATIONS['ibus-ui-gtk-14'] = 'keyboard'
+	}
+    },
+
+    _removeIBusIndicator: function() {
+	if (this._indicator) {
+	    this._indicator.actor.remove_actor(this._icon);
+//	    this._icon.unparent();
+	    this._indicator.destroy();
+	    this._indicator = null;
+	}
+    },
+
+    _onTrayIconRemoved: function(manager, actor) {
+	if (actor.wm_class == 'ibus-ui-gtk-14' || actor.wm_class == 'ibus-ui-gtk') {
+	    this._removeIBusIndicator();
+	    this._icon = null;
+	}	
+    },
+
+    _removeFromNotificationDaemon: function() {
+	if (this._icon) {
+	    let source = Main.notificationDaemon._lookupSource(null, this._icon.pid, true);
+	    if (source) {
+		this._icon.get_parent().remove_actor(this._icon)
+//		this._icon.unparent()
+		source.destroy();
+	    }
+	}
+    },
+
+    _enabled: false,
+    enable: function() {
+	this._enabled = true;
+	this._addIBusIndicator();
+    },
+
+    disable: function() {
+	this._enabled = false;
+	this._removeIBusIndicator();
+	NotificationDaemon.STANDARD_TRAY_ICON_IMPLEMENTATIONS['ibus-ui-gtk-14'] = undefined;
+	if (this._icon) {
+	    //Main.notificationDaemon._onTrayIconAdded(null, this._icon);
+	    Main.notificationDaemon._getSource(
+	     	this._icon.title || this._icon.wm_class || C_("program", "Unknown"),
+	     	this._icon.pid, null, null, this._icon);
+	}
+    }
+})
+
+function init() {
+    addIndicator = new AddIndicator();
+}
+
+function enable() {
+    addIndicator.enable();
+}
+
+function disable() {
+    addIndicator.disable();
+}
diff -ruN ibus-1.4.2.org/ibus_indicator-14@ftake.github.com/metadata.json ibus-1.4.2/ibus_indicator-14@ftake.github.com/metadata.json
--- ibus-1.4.2.org/ibus_indicator-14@ftake.github.com/metadata.json	1970-01-01 09:00:00.000000000 +0900
+++ ibus-1.4.2/ibus_indicator-14@ftake.github.com/metadata.json	2013-02-17 00:46:29.038879855 +0900
@@ -0,0 +1 @@
+{"shell-version": ["3.6"], "uuid": "ibus_indicator-14@ftake.github.com", "name": "IBus 1.4 indicator", "description": "An indicator for IBus 1.4"}
openSUSE Build Service is sponsored by