New API lxpanel_apply_hotkey() as a convenient interface to libkeybinder.
authorAndriy Grytsenko <andrej@rep.kiev.ua>
Mon, 17 Nov 2014 14:51:15 +0000 (16:51 +0200)
committerAndriy Grytsenko <andrej@rep.kiev.ua>
Mon, 17 Nov 2014 14:51:15 +0000 (16:51 +0200)
Now lxpanel requires libkeybinder as well.

ChangeLog
README
configure.ac
debian/control
plugins/menu.c
src/Makefile.am
src/input-button.c
src/misc.c
src/misc.h
src/plugin.h

index 1f90251..aa52239 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -22,6 +22,9 @@
     _gtk_image_new_from_file_scaled().
 * Added API panel_config_hotkey_button_new() to use as CONF_TYPE_EXTERNAL
     widget to allow configure global hotkeys for plugins functions.
+* Added API lxpanel_apply_hotkey() as a convenient libkeybinder interface
+    to use in modules that also use panel_config_hotkey_button_new(). Now
+    LXPanel requires libkeybinder too.
 * Added API panel_config_click_button_new() to configure mouse gestures.
 * Added "icon-size-changed" signal to LXPanel which is emitted when icons
     size in configuration dialog was changed.
     require setting icon size since created button already follows size
     from panel settings. Also it doesn't require refresh after the panel
     configuration change.
+* Disabled scaling up small icons in the taskbar: scaled up icons look
+    bad due to pixelization (patch from Anton Lobashev).
+* Set relief for taskbar button in flat button mode on mouseover (patch
+    from SHiNE CsyFeK).
+* When adding new panel, now correctly edges of monitor where popup was
+    are tried before any other monitors.
 * Correctly open 'netstat' plugin own menu on leftclick since rightclick
     should open panel context menu instead.
 * System critical temperature level in 'thermal' plugin now is properly
diff --git a/README b/README
index a8ca465..64e23b9 100644 (file)
--- a/README
+++ b/README
@@ -2,7 +2,7 @@ LXPanel is a lightweight X11 desktop panel.
 
 To build this program you need some development packages:
   libtool 2.2 or newer, intltool, libgtk 2.18 or newer,
-  libfm-gtk 1.2 or newer, libwnck.
+  libfm-gtk 1.2 or newer, libwnck, libkeybinder.
 Optional development packages may be required to build some modules:
   libmenu-cache,
   libalsasound ('volumealsa' plugin isn't built if missing),
@@ -40,7 +40,9 @@ About Netstat and Netstatus plugins:
 
 About theming & lxpanel:
 
-1. In future, hardcoding should not be used for icon lookup. Instead, use Gtk's built-in functions to handle icon lookup. If necessary, provide a fallback (hardcoded) icon.
+1. LXPanel tries to use as much themed icons as possible.  Fallback icons
+   may be also provided if they are placed into $(datadir)/lxpanel/images
+   directory.  Few plugins already provide their fallback icons.
 
 2. Current icon names that can be themed specifically for lxpanel include:
        *"lxpanel-background"
@@ -51,10 +53,13 @@ About theming & lxpanel:
        *"numlock-off"
        *"scrllock-on"
        *"scrllock-off"
-       *"wincmd"
+       *"window-manager"
        *"ns-lock"
+       *"cpufreq-icon"
        *possibly more, as yet unfound.
 
+There are also a substantial amount of others, but they use the icon naming specification.
+
 3. You can also set theme for any plugin specifically using it's widget name
     which is equal to plugin type.
 
@@ -62,8 +67,6 @@ About theming & lxpanel:
     as ~/.config/lxpanel/$PROFILE/gtkrc, where $PROFILE is the profile used on
     the LXPanel start.
 
-There are also a substantial amount of others, but they use the icon naming specification.
-
 
 About keyboard options translations in xkb plugin:
 
index 18ed3cc..64f99a6 100644 (file)
@@ -48,6 +48,10 @@ PKG_CHECK_MODULES(PACKAGE, [$pkg_modules])
 AC_SUBST(PACKAGE_CFLAGS)
 AC_SUBST(PACKAGE_LIBS)
 
+PKG_CHECK_MODULES(KEYBINDER, [keybinder])
+AC_SUBST(KEYBINDER_CFLAGS)
+AC_SUBST(KEYBINDER_LIBS)
+
 ###########################
 # Indicator Info
 ###########################
index ee510a4..97a1823 100644 (file)
@@ -11,7 +11,7 @@ Build-Depends:
  libgtk2.0-dev (>= 2.18), libiw-dev [linux-any],
  libmenu-cache-dev | libmenu-cache1-dev,
  libwnck-dev, libfm-gtk-dev (>= 1.2.0) | libfm-dev (>= 1.2.0),
- libxml2-dev
+ libxml2-dev, libkeybinder-dev
 Standards-Version: 3.9.5
 Homepage: http://www.lxde.org/
 Vcs-Browser: http://git.lxde.org/gitweb/?p=debian/lxpanel.git
index d65d0ae..0f37332 100644 (file)
@@ -1002,6 +1002,7 @@ static gboolean apply_config(gpointer user_data)
         lxpanel_button_set_icon(m->img, m->fname, -1);
     }
     config_group_set_string(m->settings, "image", m->fname);
+    /* config_group_set_int(m->settings, "panelSize", m->match_panel); */
     config_group_set_string(m->settings, "name", m->caption);
     return FALSE;
 }
@@ -1011,6 +1012,7 @@ static GtkWidget *menu_config(LXPanel *panel, GtkWidget *p)
     menup* menu = lxpanel_plugin_get_data(p);
     return lxpanel_generic_config_dlg(_("Menu"), panel, apply_config, p,
                                       _("Icon"), &menu->fname, CONF_TYPE_FILE_ENTRY,
+                                      /* _("Use panel size as icon size"), &menu->match_panel, CONF_TYPE_INT, */
                                       /* _("Caption"), &menu->caption, CONF_TYPE_STR, */
                                       NULL);
 }
index e01d60d..fbc3ad7 100644 (file)
@@ -20,7 +20,7 @@ endif
 
 pkglib_LTLIBRARIES = liblxpanel.la
 
-liblxpanel_la_CFLAGS = $(lxpanel_CFLAGS)
+liblxpanel_la_CFLAGS = $(lxpanel_CFLAGS) $(KEYBINDER_CFLAGS)
 liblxpanel_la_SOURCES = \
        misc.c \
        bg.c \
@@ -39,6 +39,7 @@ liblxpanel_la_LDFLAGS = \
 
 liblxpanel_la_LIBADD = \
        $(PACKAGE_LIBS) \
+       $(KEYBINDER_LIBS) \
        $(X11_LIBS)
 
 lxpanel_includedir = $(includedir)/lxpanel
index ddd9219..69fa6eb 100644 (file)
@@ -27,6 +27,8 @@
 #include "plugin.h"
 #include "gtk-compat.h"
 
+#include <keybinder.h>
+
 #define PANEL_TYPE_CFG_INPUT_BUTTON     (config_input_button_get_type())
 
 typedef struct _PanelCfgInputButton      PanelCfgInputButton;
@@ -286,9 +288,38 @@ GtkWidget *panel_config_click_button_new(const char *label, const char *click)
     }
     return GTK_WIDGET(btn);
 }
+
+gboolean lxpanel_apply_hotkey(char **hkptr, const char *keystring,
+                              void (*handler)(const char *keystring, gpointer user_data),
+                              gpointer user_data, gboolean show_error)
+{
+    g_return_val_if_fail(hkptr != NULL, FALSE);
+    g_return_val_if_fail(handler != NULL, FALSE);
+
+    if (keystring != NULL && !keybinder_bind(keystring, handler, user_data))
+    {
+        if (show_error)
+        {
+            GtkWidget* dlg;
+
+            dlg = gtk_message_dialog_new(NULL, 0, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,
+                                         _("Cannot assign '%s' as a global hotkey:"
+                                           " it is already bound."), keystring);
+            gtk_window_set_title(GTK_WINDOW(dlg), _("Error"));
+            gtk_window_set_keep_above(GTK_WINDOW(dlg), TRUE);
+            gtk_dialog_run(GTK_DIALOG(dlg));
+            gtk_widget_destroy(dlg);
+        }
+        return FALSE;
+    }
+    if (*hkptr != NULL)
+        keybinder_unbind(*hkptr, handler);
+    g_free(*hkptr);
+    *hkptr = g_strdup(keystring);
+    return TRUE;
+}
 #if 0
 // test code, can be used as an example until erased. :)
-#include <keybinder.h>
 static void handler(const char *keystring, void *user_data)
 {
 }
@@ -301,13 +332,7 @@ static void cb(PanelCfgInputButton *btn, char *text, gpointer unused)
 
     if (!btn->do_key)
         return;
-    if (text == NULL || keybinder_bind(text, handler, NULL))
-    {
-        if (hotkey)
-            keybinder_unbind(hotkey, handler);
-        g_free(hotkey);
-        hotkey = g_strdup(text);
-    }
+    lxpanel_apply_hotkey(&hotkey, text, &handler, NULL, TRUE);
 }
 
 int main(int argc, char **argv)
@@ -317,7 +342,7 @@ int main(int argc, char **argv)
 
     gtk_init(&argc, &argv);
     dialog = gtk_dialog_new();
-    hotkey = g_strdup("<Super>z");
+    lxpanel_apply_hotkey(&hotkey, "<Super>z", &handler, NULL, FALSE);
     btn = panel_config_hotkey_button_new("test", hotkey);
 //    btn = panel_config_click_button_new("test", NULL);
     gtk_widget_show(btn);
index 7904068..ca6c791 100644 (file)
@@ -964,7 +964,7 @@ static void _lxpanel_button_set_icon(GtkWidget* btn, FmIcon* icon, gint size)
     {
         ImgData * data = (ImgData *) g_object_get_qdata(G_OBJECT(img), img_data_id);
 
-        if (size <= 0)
+        if (size == 0) /* 0: set as before; -1: reset to panel icon size */
             size = data->size;
         if (icon != data->icon || size != data->size) /* something was changed */
         {
index cc7358f..d0468dc 100644 (file)
@@ -167,7 +167,8 @@ GtkWidget *lxpanel_button_new_for_fm_icon(LXPanel *panel, FmIcon *icon, GdkColor
  *
  * Updates icon in the button created with lxpanel_button_new_for_icon()
  * or lxpanel_button_new_for_fm_icon() before. If @size > 0 then stop
- * follow panel icon size and use this fixed size, otherwise not change.
+ * following panel icon size and use this fixed size, if @size is 0 then
+ * do no changes on icons size.
  */
 void lxpanel_button_set_icon(GtkWidget* btn, const gchar *name, gint size);
 void lxpanel_button_update_icon(GtkWidget* btn, FmIcon *icon, gint size);
index 3ac4553..71b389c 100644 (file)
@@ -291,6 +291,29 @@ extern GtkWidget *lxpanel_generic_config_dlg(const char *title, LXPanel *panel,
 GtkWidget *panel_config_hotkey_button_new(const char *label, const char *hotkey);
 GtkWidget *panel_config_click_button_new(const char *label, const char *click);
 
+/**
+ * lxpanel_apply_hotkey
+ * @hkptr: (in out) (transfer full): pointer to hotkey string
+ * @keystring: (allow-none): new hotkey
+ * @handler: callback to assign to hotkey
+ * @user_data: data to provide for @handler
+ * @show_error: %TRUE to show error window if assignment failed
+ *
+ * Function designed to use in callback on "changed" signal from widget
+ * created by panel_config_hotkey_button_new(). Should be also used on
+ * initial binding and on unbinding when module unloaded (in latter case
+ * @keystring should be %NULL). In case of success returns %TRUE, unbinds
+ * previous hotkey from @hkptr, and updates @hkptr. The @hkptr contains
+ * allocated string.
+ *
+ * Returns: %TRUE on success.
+ *
+ * Since: 0.8.0
+ */
+gboolean lxpanel_apply_hotkey(char **hkptr, const char *keystring,
+                              void (*handler)(const char *keystring, gpointer user_data),
+                              gpointer user_data, gboolean show_error);
+
 G_END_DECLS
 
 #endif /* __PLUGIN_H__ */