38194cc
From e2b07deb05182355f7bdecdd69a731a566ad832c Mon Sep 17 00:00:00 2001
38194cc
From: fujiwarat <takao.fujiwara1@gmail.com>
38194cc
Date: Thu, 17 Feb 2011 15:16:21 +0900
38194cc
Subject: [PATCH] Use gtk_icon_factory_lookup_default for GTK stock
38194cc
38194cc
gtk_icon_theme_load_icon doesn't load GTK legacy stock ids because
38194cc
The stock legacy symlinks are removed in the latst GTK.
38194cc
---
38194cc
 ui/gtk/engineabout.py |   13 ++++++++++---
38194cc
 ui/gtk/icon.py        |   40 ++++++++++++++++++++++++++++++++++++----
38194cc
 ui/gtk/panel.py       |    4 ++--
38194cc
 3 files changed, 48 insertions(+), 9 deletions(-)
38194cc
38194cc
diff --git a/ui/gtk/engineabout.py b/ui/gtk/engineabout.py
38194cc
index a34e930..1af806c 100644
38194cc
--- a/ui/gtk/engineabout.py
38194cc
+++ b/ui/gtk/engineabout.py
38194cc
@@ -24,6 +24,7 @@ import gtk
38194cc
 from gtk import gdk
38194cc
 import pango
38194cc
 import ibus
38194cc
+import icon as _icon
38194cc
 
38194cc
 from i18n import _, N_
38194cc
 
38194cc
@@ -35,7 +36,9 @@ class EngineAbout(gtk.Dialog):
38194cc
         self.__init_ui()
38194cc
 
38194cc
     def __init_ui(self):
38194cc
-        self.set_icon_name("gtk-about")
38194cc
+        # Gtk stock symlink is legacy.
38194cc
+        pixbufs = _icon.icon_set_get_pixbufs_default(None, gtk.STOCK_ABOUT)
38194cc
+        self.set_icon_list(*pixbufs)
38194cc
         sw = gtk.ScrolledWindow()
38194cc
         sw.set_shadow_type(gtk.SHADOW_ETCHED_IN)
38194cc
         sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
38194cc
@@ -96,6 +99,10 @@ class EngineAbout(gtk.Dialog):
38194cc
             theme = gtk.icon_theme_get_default()
38194cc
             icon = theme.lookup_icon("ibus-engine", 48, 0)
38194cc
             if icon == None:
38194cc
-                icon = theme.lookup_icon("gtk-missing-image", 48, 0)
38194cc
-            pixbuf = icon.load_icon()
38194cc
+                # Gtk stock symlink is legacy.
38194cc
+                pixbuf = _icon.icon_set_get_pixbuf_default(None,
38194cc
+                                                           gtk.STOCK_MISSING_IMAGE,
38194cc
+                                                           48)
38194cc
+            else:
38194cc
+                pixbuf = icon.load_icon()
38194cc
         return pixbuf
38194cc
diff --git a/ui/gtk/icon.py b/ui/gtk/icon.py
38194cc
index 5b5f97f..d91fe4a 100644
38194cc
--- a/ui/gtk/icon.py
38194cc
+++ b/ui/gtk/icon.py
38194cc
@@ -22,6 +22,32 @@
38194cc
 
38194cc
 import gtk
38194cc
 import gtk.gdk as gdk
38194cc
+import sys
38194cc
+
38194cc
+def icon_set_get_pixbuf_default(icon_set, stock_id, size, state=gtk.STATE_NORMAL):
38194cc
+    if icon_set == None:
38194cc
+        icon_set = gtk.icon_factory_lookup_default(stock_id)
38194cc
+    if icon_set == None:
38194cc
+        return None
38194cc
+    return icon_set.render_icon(gtk.widget_get_default_style(),
38194cc
+                                gtk.widget_get_default_direction(),
38194cc
+                                state,
38194cc
+                                size,
38194cc
+                                None, None)
38194cc
+
38194cc
+def icon_set_get_pixbufs_default(icon_set, stock_id, state=gtk.STATE_NORMAL):
38194cc
+    if icon_set == None:
38194cc
+        icon_set = gtk.icon_factory_lookup_default(stock_id)
38194cc
+    pixbufs = []
38194cc
+    if icon_set == None:
38194cc
+        return []
38194cc
+    for size in icon_set.get_sizes():
38194cc
+        pixbufs.append(icon_set.render_icon(gtk.widget_get_default_style(),
38194cc
+                                            gtk.widget_get_default_direction(),
38194cc
+                                            state,
38194cc
+                                            size,
38194cc
+                                            None, None))
38194cc
+    return pixbufs
38194cc
 
38194cc
 class IconWidget(gtk.Image):
38194cc
     def __init__(self, icon, size):
38194cc
@@ -31,11 +57,17 @@ class IconWidget(gtk.Image):
38194cc
             if icon.startswith("/"):
38194cc
                 pixbuf = gdk.pixbuf_new_from_file(icon)
38194cc
             else:
38194cc
-                theme = gtk.icon_theme_get_default()
38194cc
-                pixbuf = theme.load_icon(icon, size, 0)
38194cc
+                # Gtk stock symlink is legacy.
38194cc
+                icon_set = gtk.icon_factory_lookup_default(icon)
38194cc
+                if icon_set != None:
38194cc
+                    pixbuf = icon_set_get_pixbuf_default(icon_set, icon, size)
38194cc
+                else:
38194cc
+                    theme = gtk.icon_theme_get_default()
38194cc
+                    pixbuf = theme.load_icon(icon, size, 0)
38194cc
         except:
38194cc
-            theme = gtk.icon_theme_get_default()
38194cc
-            pixbuf = theme.load_icon(gtk.STOCK_MISSING_IMAGE, size, 0)
38194cc
+            print >> sys.stderr, "Not Found Icon", icon, size
38194cc
+            # Gtk stock symlink is legacy.
38194cc
+            pixbuf = icon_set_get_pixbuf_default(None, gtk.STOCK_MISSING_IMAGE, size)
38194cc
 
38194cc
         width = pixbuf.get_width()
38194cc
         height = pixbuf.get_height()
38194cc
diff --git a/ui/gtk/panel.py b/ui/gtk/panel.py
38194cc
index 07b0fa2..2244455 100644
38194cc
--- a/ui/gtk/panel.py
38194cc
+++ b/ui/gtk/panel.py
38194cc
@@ -412,7 +412,7 @@ class Panel(ibus.PanelBase):
38194cc
             menu.add(item)
38194cc
 
38194cc
         item = gtk.ImageMenuItem(_("Turn off input method"))
38194cc
-        item.set_image(_icon.IconWidget("gtk-close", size[0]))
38194cc
+        item.set_image(_icon.IconWidget(gtk.STOCK_CLOSE, size[0]))
38194cc
         item.connect("activate", self.__im_menu_item_activate_cb, None)
38194cc
         if self.__focus_ic == None or not self.__focus_ic.is_enabled():
38194cc
             item.set_sensitive(False)
38194cc
@@ -452,7 +452,7 @@ class Panel(ibus.PanelBase):
38194cc
             menu = gtk.Menu()
38194cc
             item = gtk.ImageMenuItem(_("No input window"))
38194cc
             size = gtk.icon_size_lookup(gtk.ICON_SIZE_MENU)
38194cc
-            item.set_image(_icon.IconWidget("gtk-info", size[0]))
38194cc
+            item.set_image(_icon.IconWidget(gtk.STOCK_INFO, size[0]))
38194cc
             menu.add(item)
38194cc
             menu.show_all()
38194cc
         else:
38194cc
-- 
38194cc
1.7.4
38194cc