[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