[Pkg-mozext-commits] [firetray] 207/399: use themable icons (names still hard-coded)

David Prévot taffit at alioth.debian.org
Tue Oct 29 18:23:44 UTC 2013


This is an automated email from the git hooks/post-receive script.

taffit pushed a commit to branch dfsg-clean
in repository firetray.

commit 095fa07c0c71316e08049999f2dfff1d75f4395f
Author: foudfou <foudil.newbie+git at gmail.com>
Date:   Mon Mar 12 01:01:09 2012 +0100

    use themable icons (names still hard-coded)
---
 .../hicolor/22x22/actions/mail-message-new.png     |    1 +
 src/chrome/skin/mail-message-new.png               |  Bin 0 -> 1146 bytes
 src/chrome/skin/message-mail-new.png               |  Bin 770 -> 0 bytes
 src/modules/FiretrayHandler.jsm                    |    6 +-
 src/modules/FiretrayMessaging.jsm                  |    4 +-
 src/modules/ctypes/linux/gio.jsm                   |   23 +++++++
 src/modules/ctypes/linux/gtk.jsm                   |    2 +
 src/modules/linux/FiretrayStatusIcon.jsm           |   68 ++++++++++++--------
 8 files changed, 72 insertions(+), 32 deletions(-)

diff --git a/src/chrome/skin/linux/icons/hicolor/22x22/actions/mail-message-new.png b/src/chrome/skin/linux/icons/hicolor/22x22/actions/mail-message-new.png
new file mode 120000
index 0000000..e40a113
--- /dev/null
+++ b/src/chrome/skin/linux/icons/hicolor/22x22/actions/mail-message-new.png
@@ -0,0 +1 @@
+../../../../../mail-message-new.png
\ No newline at end of file
diff --git a/src/chrome/skin/mail-message-new.png b/src/chrome/skin/mail-message-new.png
new file mode 100644
index 0000000..2d9caca
Binary files /dev/null and b/src/chrome/skin/mail-message-new.png differ
diff --git a/src/chrome/skin/message-mail-new.png b/src/chrome/skin/message-mail-new.png
deleted file mode 100644
index 3691cb7..0000000
Binary files a/src/chrome/skin/message-mail-new.png and /dev/null differ
diff --git a/src/modules/FiretrayHandler.jsm b/src/modules/FiretrayHandler.jsm
index 7ee6f12..2e2ca78 100644
--- a/src/modules/FiretrayHandler.jsm
+++ b/src/modules/FiretrayHandler.jsm
@@ -31,7 +31,6 @@ if ("undefined" == typeof(firetray)) {
 firetray.Handler = {
   ICON_FILENAME_SUFFIX: "22.png",
   ICON_FILENAME_BLANK: null,
-  ICON_FILENAME_NEWMAIL: null,
 
   initialized: false,
   appNameOriginal: null,
@@ -50,8 +49,6 @@ firetray.Handler = {
     this.appNameOriginal = Services.appinfo.name;
     this.ICON_FILENAME_BLANK = firetray.Utils.chromeToPath(
       "chrome://firetray/skin/blank-icon.png");
-    this.ICON_FILENAME_NEWMAIL = firetray.Utils.chromeToPath(
-      "chrome://firetray/skin/message-mail-new.png");
 
     this.runtimeABI = Services.appinfo.XPCOMABI;
     this.runtimeOS = Services.appinfo.OS; // "WINNT", "Linux", "Darwin"
@@ -163,7 +160,8 @@ firetray.Handler = {
   },
 
   // these get overridden in OS-specific Icon/Window handlers
-  setIconImage: function(filename) {},
+  setIconImage: function(icon) {},
+  setIconImageFromFile: function(filename) {},
   setIconImageDefault: function() {},
   setIconText: function(text, color) {},
   setIconTooltip: function(localizedMessage) {},
diff --git a/src/modules/FiretrayMessaging.jsm b/src/modules/FiretrayMessaging.jsm
index 2369f37..47eb534 100644
--- a/src/modules/FiretrayMessaging.jsm
+++ b/src/modules/FiretrayMessaging.jsm
@@ -125,11 +125,11 @@ firetray.Messaging = {
         firetray.Handler.setIconText(newMsgCount.toString(), prefIconTextColor);
         break;
       case FIRETRAY_NOTIFICATION_NEWMAIL_ICON:
-        firetray.Handler.setIconImage(firetray.Handler.ICON_FILENAME_NEWMAIL);
+        firetray.Handler.setIconImage(firetray.StatusIcon.themedIconNewMail);
         break;
       case FIRETRAY_NOTIFICATION_CUSTOM_ICON:
         let prefCustomIconPath = firetray.Utils.prefService.getCharPref("custom_mail_icon");
-        firetray.Handler.setIconImage(prefCustomIconPath);
+        firetray.Handler.setIconImageFromFile(prefCustomIconPath);
         break;
       default:
         ERROR("Unknown notification mode: "+prefMailNotification);
diff --git a/src/modules/ctypes/linux/gio.jsm b/src/modules/ctypes/linux/gio.jsm
new file mode 100644
index 0000000..6f1d3fc
--- /dev/null
+++ b/src/modules/ctypes/linux/gio.jsm
@@ -0,0 +1,23 @@
+/* -*- Mode: js2; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+
+var EXPORTED_SYMBOLS = [ "gio" ];
+
+const GIO_LIBNAME = "gio-2.0";
+const GIO_ABIS    = [ "0.3000.2" ];
+
+const Cu = Components.utils;
+const Cc = Components.classes;
+const Ci = Components.interfaces;
+
+Cu.import("resource://gre/modules/ctypes.jsm");
+Cu.import("resource://firetray/ctypes/ctypes-utils.jsm");
+
+function gio_defines(lib) {
+  this.GIcon = ctypes.StructType("GIcon");
+  this.GThemedIcon = ctypes.StructType("GThemedIcon");
+
+  lib.lazy_bind("g_themed_icon_new_from_names", this.GIcon.ptr, ctypes.char.ptr.ptr, ctypes.int);
+
+}
+
+new ctypes_library(GIO_LIBNAME, GIO_ABIS, gio_defines, this);
diff --git a/src/modules/ctypes/linux/gtk.jsm b/src/modules/ctypes/linux/gtk.jsm
index c55afdf..0acc78a 100644
--- a/src/modules/ctypes/linux/gtk.jsm
+++ b/src/modules/ctypes/linux/gtk.jsm
@@ -12,6 +12,7 @@ const Ci = Components.interfaces;
 Cu.import("resource://gre/modules/ctypes.jsm");
 Cu.import("resource://firetray/ctypes/ctypes-utils.jsm");
 Cu.import("resource://firetray/ctypes/linux/gdk.jsm");
+Cu.import("resource://firetray/ctypes/linux/gio.jsm");
 Cu.import("resource://firetray/ctypes/linux/gobject.jsm");
 Cu.import("resource://firetray/ctypes/linux/pango.jsm");
 
@@ -81,6 +82,7 @@ function gtk_defines(lib) {
   lib.lazy_bind("gtk_status_icon_new", this.GtkStatusIcon.ptr);
   lib.lazy_bind("gtk_status_icon_set_from_file", ctypes.void_t, this.GtkStatusIcon.ptr, ctypes.char.ptr);
   lib.lazy_bind("gtk_status_icon_set_from_icon_name", ctypes.void_t, this.GtkStatusIcon.ptr, gobject.gchar.ptr);
+  lib.lazy_bind("gtk_status_icon_set_from_gicon", ctypes.void_t, this.GtkStatusIcon.ptr, gio.GIcon.ptr);
   lib.lazy_bind("gtk_status_icon_set_tooltip_text", ctypes.void_t, this.GtkStatusIcon.ptr, ctypes.char.ptr);
   lib.lazy_bind("gtk_status_icon_set_visible", ctypes.void_t, this.GtkStatusIcon.ptr, gobject.gboolean);
   lib.lazy_bind("gtk_menu_new", this.GtkMenu.ptr);
diff --git a/src/modules/linux/FiretrayStatusIcon.jsm b/src/modules/linux/FiretrayStatusIcon.jsm
index 9c6d34e..fb5a382 100644
--- a/src/modules/linux/FiretrayStatusIcon.jsm
+++ b/src/modules/linux/FiretrayStatusIcon.jsm
@@ -12,6 +12,7 @@ Cu.import("resource://gre/modules/ctypes.jsm");
 Cu.import("resource://firetray/ctypes/linux/cairo.jsm");
 Cu.import("resource://firetray/ctypes/linux/gobject.jsm");
 Cu.import("resource://firetray/ctypes/linux/gdk.jsm");
+Cu.import("resource://firetray/ctypes/linux/gio.jsm");
 Cu.import("resource://firetray/ctypes/linux/gtk.jsm");
 Cu.import("resource://firetray/ctypes/linux/pango.jsm");
 Cu.import("resource://firetray/ctypes/linux/pangocairo.jsm");
@@ -22,22 +23,29 @@ if ("undefined" == typeof(firetray.Handler))
 
 
 firetray.StatusIcon = {
+  GTK_THEME_ICON_PATH: null,
+
   initialized: false,
-  // pointers to JS functions. MUST LIVE DURING ALL THE EXECUTION
-  callbacks: {},
+  callbacks: {}, // pointers to JS functions. MUST LIVE DURING ALL THE EXECUTION
   trayIcon: null,
+  themedIconApp: null,
+  themedIconNewMail: null,
 
   init: function() {
     try {
-      this.GTK_THEME_ICON_PATH = firetray.Utils.chromeToPath(
-        "chrome://firetray/skin/linux/icons");
+      this.GTK_THEME_ICON_PATH = firetray.Utils.chromeToPath("chrome://firetray/skin/linux/icons");
       LOG(this.GTK_THEME_ICON_PATH);
       let gtkIconTheme = gtk.gtk_icon_theme_get_default();
       LOG("gtkIconTheme="+gtkIconTheme);
       gtk.gtk_icon_theme_append_search_path(gtkIconTheme, this.GTK_THEME_ICON_PATH);
 
-      // init tray icon, some variables
+      // TODO: make related options
+      this.themedIconApp     = this.initThemedIcon(["indicator-messages", "applications-email-panel", firetray.Handler.appNameOriginal.toLowerCase()]);
+      // TODO: check that embedded mail-message-new.png is found !
+      this.themedIconNewMail = this.initThemedIcon(["indicator-messages-new", "mail-message-new"]);
+
       this.trayIcon  = gtk.gtk_status_icon_new();
+
     } catch (x) {
       ERROR(x);
       return false;
@@ -62,6 +70,19 @@ firetray.StatusIcon = {
     this.initialized = false;
   },
 
+  initThemedIcon: function(names) {
+    if (!isArray(names)) throw new TypeError();
+    let namesLen = names.length;
+    LOG("themedIconNamesLen="+namesLen);
+    let themedIconNames = ctypes.char.ptr.array(namesLen)();
+    for (let i=0; i<namesLen; ++i)
+      themedIconNames[i] = ctypes.char.array()(names[i]);
+    LOG("themedIconNames="+themedIconNames);
+    let themedIcon = gio.g_themed_icon_new_from_names(themedIconNames, namesLen);
+    LOG("themedIcon="+themedIcon);
+    return themedIcon;
+  },
+
   addCallbacks: function() {
     /* NOTE: here we do use a function handler (instead of a function
      definition) because we need the args passed to it ! As a consequence, we
@@ -112,42 +133,37 @@ firetray.StatusIcon = {
 
   setIconImageFromFile: function(filename) {
     if (!firetray.StatusIcon.trayIcon)
-      return false;
+      ERROR("Icon missing");
     LOG(filename);
-
-    try {
-      gtk.gtk_status_icon_set_from_file(firetray.StatusIcon.trayIcon,
+    gtk.gtk_status_icon_set_from_file(firetray.StatusIcon.trayIcon,
                                         filename);
-    } catch (x) {
-      ERROR(x);
-      return false;
-    }
-    return true;
   },
 
   setIconImageFromName: function(iconName) {
     if (!firetray.StatusIcon.trayIcon)
-      return false;
+      ERROR("Icon missing");
     LOG(iconName);
+    gtk.gtk_status_icon_set_from_icon_name(firetray.StatusIcon.trayIcon, iconName);
+  },
 
-    try {
-      gtk.gtk_status_icon_set_from_icon_name(firetray.StatusIcon.trayIcon, iconName); // "mail-message-new", "thunderbird");
-    } catch (x) {
-      ERROR(x);
-      return false;
-    }
-    return true;
+  setIconImageFromGIcon: function(gicon) {
+    if (!firetray.StatusIcon.trayIcon || !gicon)
+      ERROR("Icon missing");
+    LOG(gicon);
+    gtk.gtk_status_icon_set_from_gicon(firetray.StatusIcon.trayIcon, gicon);
   }
 
 }; // firetray.StatusIcon
 
 
-firetray.Handler.setIconImage = firetray.StatusIcon.setIconImageFromFile;
+firetray.Handler.setIconImage = firetray.StatusIcon.setIconImageFromGIcon;
+
+firetray.Handler.setIconImageFromFile = firetray.StatusIcon.setIconImageFromFile;
 
 firetray.Handler.setIconImageDefault = function() {
-  if (!this.appNameOriginal)
-    throw "Default application name not set";
-  firetray.StatusIcon.setIconImageFromName(this.appNameOriginal.toLowerCase());
+  if (!firetray.StatusIcon.themedIconApp)
+    throw "Default application themed icon not set";
+  firetray.Handler.setIconImage(firetray.StatusIcon.themedIconApp);
 };
 
 // GTK bug: Gdk-CRITICAL **: IA__gdk_window_get_root_coords: assertion `GDK_IS_WINDOW (window)' failed

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-mozext/firetray.git



More information about the Pkg-mozext-commits mailing list