diff -u ibus-1.2.0.20091215/debian/changelog ibus-1.2.0.20091215/debian/changelog --- ibus-1.2.0.20091215/debian/changelog +++ ibus-1.2.0.20091215/debian/changelog @@ -1,3 +1,11 @@ +ibus (1.2.0.20091215-1ubuntu1) lucid; urgency=low + + * Add 05_appindicator.dpatch: Add support for Application indicators. Patch + by Jan Arne Petersen, thanks! (LP: #497878) + * debian/control: Add python-appindicator recommends. + + -- Martin Pitt Mon, 15 Feb 2010 12:24:28 +0100 + ibus (1.2.0.20091215-1) unstable; urgency=low * New upstream release. diff -u ibus-1.2.0.20091215/debian/control ibus-1.2.0.20091215/debian/control --- ibus-1.2.0.20091215/debian/control +++ ibus-1.2.0.20091215/debian/control @@ -1,7 +1,8 @@ Source: ibus Section: utils Priority: optional -Maintainer: LI Daobing +Maintainer: Ubuntu Developers +XSBC-Original-Maintainer: LI Daobing Uploaders: Zhengpeng Hou Build-Depends: debhelper (>= 7), autotools-dev, @@ -27,7 +28,7 @@ Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, ${python:Depends}, python-glade2, python-ibus (= ${source:Version}), python-xdg, librsvg2-common -Recommends: im-switch, ibus-gtk | ibus-qt4 +Recommends: im-switch, ibus-gtk | ibus-qt4, python-appindicator Conflicts: ibus-anthy (< 1.2), ibus-table (< 1.2), ibus-pinyin (< 1.2), diff -u ibus-1.2.0.20091215/debian/patches/00list ibus-1.2.0.20091215/debian/patches/00list --- ibus-1.2.0.20091215/debian/patches/00list +++ ibus-1.2.0.20091215/debian/patches/00list @@ -1,0 +2 @@ +05_appindicator.dpatch only in patch2: unchanged: --- ibus-1.2.0.20091215.orig/debian/patches/05_appindicator.dpatch +++ ibus-1.2.0.20091215/debian/patches/05_appindicator.dpatch @@ -0,0 +1,209 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## appindicator.dpatch by +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: No description. + +@DPATCH@ +diff -urNad ibus-1.2.0.20091215~/ui/gtk/panel.py ibus-1.2.0.20091215/ui/gtk/panel.py +--- ibus-1.2.0.20091215~/ui/gtk/panel.py 2010-02-12 15:31:52.000000000 +0100 ++++ ibus-1.2.0.20091215/ui/gtk/panel.py 2010-02-12 15:35:00.802438102 +0100 +@@ -34,6 +34,11 @@ + from candidatepanel import CandidatePanel + from engineabout import EngineAbout + ++try: ++ import appindicator ++except: ++ pass ++ + from gettext import dgettext + _ = lambda a : dgettext("ibus", a) + N_ = lambda a : a +@@ -106,12 +111,21 @@ + lambda widget, index, button, state: self.candidate_clicked(index, button, state)) + + +- self.__status_icon = gtk.StatusIcon() +- self.__status_icon.connect("popup-menu", self.__status_icon_popup_menu_cb) +- self.__status_icon.connect("activate", self.__status_icon_activate_cb) +- self.__status_icon.set_from_icon_name(ICON_KEYBOARD) +- self.__status_icon.set_tooltip(_("IBus input method framework")) +- self.__status_icon.set_visible(True) ++ self.__appindicator = None ++ self.__status_icon = None ++ self.__previous_focus_ic = None ++ ++ try: ++ self.__appindicator = appindicator.Indicator("ibus", ICON_KEYBOARD, appindicator.CATEGORY_APPLICATION_STATUS) ++ self.__appindicator.set_status(appindicator.STATUS_ACTIVE) ++ self.__appindicator_update_menu() ++ except: ++ self.__status_icon = gtk.StatusIcon() ++ self.__status_icon.connect("popup-menu", self.__status_icon_popup_menu_cb) ++ self.__status_icon.connect("activate", self.__status_icon_activate_cb) ++ self.__status_icon.set_from_icon_name(ICON_KEYBOARD) ++ self.__status_icon.set_tooltip(_("IBus input method framework")) ++ self.__status_icon.set_visible(True) + + self.__config_load_lookup_table_orientation() + self.__config_load_show() +@@ -188,10 +202,13 @@ + if not icon_name: + icon_name = ICON_ENGINE + self.__language_bar.set_im_icon(icon_name) +- if icon_name.startswith("/"): +- self.__status_icon.set_from_file(icon_name) ++ if self.__appindicator: ++ self.__appindicator.set_icon(icon_name) + else: +- self.__status_icon.set_from_icon_name(icon_name) ++ if icon_name.startswith("/"): ++ self.__status_icon.set_from_file(icon_name) ++ else: ++ self.__status_icon.set_from_icon_name(icon_name) + + def __set_im_name(self, name): + self.__language_bar.set_im_name(name) +@@ -214,6 +231,9 @@ + self.__set_im_icon(ICON_KEYBOARD) + self.__set_im_name(None) + self.__language_bar.focus_in() ++ if self.__appindicator: ++ self.__previous_focus_ic = self.__focus_ic ++ self.__appindicator_update_menu() + + def focus_out(self, ic): + self.reset() +@@ -292,7 +312,13 @@ + + def __config_load_show_icon_on_systray(self): + value = self.__config.get_value("panel", "show_icon_on_systray", True) +- self.__status_icon.set_visible(True if value else False) ++ if self.__appindicator: ++ if value: ++ self.__appindicator.set_status(appindicator.STATUS_ACTIVE) ++ else: ++ self.__appindicator.set_status(appindicator.STATUS_PASSIVE) ++ else: ++ self.__status_icon.set_visible(True if value else False) + + def __config_load_show_im_name(self): + value = self.__config.get_value("panel", "show_im_name", False) +@@ -321,8 +347,7 @@ + def __config_reloaded_cb(self, bus): + pass + +- def __create_sys_menu(self): +- menu = gtk.Menu() ++ def __create_sys_menu(self, menu): + item = gtk.ImageMenuItem(gtk.STOCK_PREFERENCES) + item.connect("activate", + self.__sys_menu_item_activate_cb, gtk.STOCK_PREFERENCES) +@@ -341,24 +366,6 @@ + self.__sys_menu_item_activate_cb, gtk.STOCK_QUIT) + menu.add(item) + +- menu.show_all() +- menu.set_take_focus(False) +- return menu +- +- menu.show_all() +- menu.set_take_focus(False) +- return menu +- +- menu.show_all() +- menu.set_take_focus(False) +- return menu +- +- menu.show_all() +- menu.set_take_focus(False) +- return menu +- +- menu.show_all() +- menu.set_take_focus(False) + return menu + + def __create_im_menu(self): +@@ -408,12 +415,12 @@ + item.connect("activate", self.__im_menu_item_activate_cb, None) + menu.add(item) + +- menu.show_all() +- menu.set_take_focus(False) + return menu + + def __get_im_menu_cb(self, languagebar): + menu = self.__create_im_menu() ++ menu.set_take_focus(False) ++ menu.show_all() + return menu + + def __show_engine_about_cb(self, langagebar): +@@ -430,7 +437,12 @@ + self.__config.set_value("panel", "y", y) + + def __status_icon_popup_menu_cb(self, status_icon, button, active_time): +- menu = self.__create_sys_menu() ++ menu = gtk.Menu() ++ self.__create_sys_menu(menu) ++ ++ menu.show_all() ++ menu.set_take_focus(False) ++ + menu.popup(None, None, + gtk.status_icon_position_menu, + button, +@@ -444,22 +456,48 @@ + size = gtk.icon_size_lookup(gtk.ICON_SIZE_MENU) + item.set_image(_icon.IconWidget("gtk-info", size[0])) + menu.add(item) +- menu.show_all() + else: + menu = self.__create_im_menu() ++ ++ menu.set_take_focus(False) ++ menu.show_all() + menu.popup(None, None, + gtk.status_icon_position_menu, + 0, + gtk.get_current_event_time(), + self.__status_icon) + ++ def __appindicator_update_menu(self): ++ if not self.__appindicator: ++ return ++ ++ if not self.__previous_focus_ic: ++ menu = gtk.Menu() ++ item = gtk.ImageMenuItem(_("No input window")) ++ size = gtk.icon_size_lookup(gtk.ICON_SIZE_MENU) ++ item.set_image(_icon.IconWidget("gtk-info", size[0])) ++ menu.add(item) ++ else: ++ menu = self.__create_im_menu() ++ ++ menu.add(gtk.SeparatorMenuItem()) ++ ++ self.__create_sys_menu(menu) ++ menu.set_take_focus(False) ++ ++ self.__appindicator.set_menu(menu) ++ + def __im_menu_item_activate_cb(self, item, engine): +- if not self.__focus_ic: ++ focus_ic = self.__focus_ic ++ if self.__previous_focus_ic: ++ focus_ic = self.__previous_focus_ic ++ ++ if not focus_ic: + return + if engine: +- self.__focus_ic.set_engine(engine) ++ focus_ic.set_engine(engine) + else: +- self.__focus_ic.disable() ++ focus_ic.disable() + + def __sys_menu_item_activate_cb(self, item, command): + if command == gtk.STOCK_PREFERENCES: