New API panel_config_int_button_new() for generic config spin button with custom...
authorAndriy Grytsenko <andrej@rep.kiev.ua>
Mon, 17 Nov 2014 22:12:02 +0000 (00:12 +0200)
committerAndriy Grytsenko <andrej@rep.kiev.ua>
Mon, 17 Nov 2014 22:12:02 +0000 (00:12 +0200)
ChangeLog
src/configurator.c
src/plugin.h

index ad55888..ada979d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -50,6 +50,8 @@
 * System critical temperature level in 'thermal' plugin now is properly
     ignored if manual levels are active.
 * Fixed click on 'menu' plugin, only image was clickable, not whole area.
+* Added API panel_config_int_button_new() for generic plugin config spin
+    button with custom range, not just generic 0...1000.
 
 0.7.2
 -------------------------------------------------------------------------
index 8394d10..3b0f64e 100644 (file)
@@ -1507,11 +1507,9 @@ static GtkWidget *_lxpanel_generic_config_dlg(const char *title, Panel *p,
                   G_CALLBACK(on_entry_focus_out_old), val );
                 break;
             case CONF_TYPE_INT:
-                /* FIXME: the range shouldn't be hardcoded */
-                entry = gtk_spin_button_new_with_range( 0, 1000, 1 );
-                gtk_spin_button_set_value( GTK_SPIN_BUTTON(entry), *(int*)val );
-                g_signal_connect( entry, "value-changed",
-                  G_CALLBACK(on_spin_changed), val );
+                gtk_box_pack_start(dlg_vbox,
+                                   panel_config_int_button_new(name, val, 0, 1000),
+                                   FALSE, FALSE, 2);
                 break;
             case CONF_TYPE_BOOL:
                 entry = gtk_check_button_new();
@@ -1580,6 +1578,19 @@ static GtkWidget *_lxpanel_generic_config_dlg(const char *title, Panel *p,
     return dlg;
 }
 
+GtkWidget *panel_config_int_button_new(const char *name, gint *val,
+                                       gint min, gint max)
+{
+    GtkWidget *entry = gtk_spin_button_new_with_range(min, max, 1);
+    GtkWidget *hbox = gtk_hbox_new(FALSE, 2);
+
+    gtk_spin_button_set_value(GTK_SPIN_BUTTON(entry), *val);
+    g_signal_connect(entry, "value-changed", G_CALLBACK(on_spin_changed), val);
+    gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new(name), FALSE, FALSE, 2);
+    gtk_box_pack_start(GTK_BOX(hbox), entry, TRUE, TRUE, 2);
+    return hbox;
+}
+
 /* new plugins API -- apply_func() gets GtkWidget* */
 GtkWidget *lxpanel_generic_config_dlg(const char *title, LXPanel *panel,
                                       GSourceFunc apply_func, GtkWidget *plugin,
index 64eba76..9391c5c 100644 (file)
@@ -269,7 +269,7 @@ typedef enum {
  * Variable-size list of options consists of three arguments for each
  * option:
  *   - const char* name: text representing the option in dialog
- *   - gpointer ret_value: (out): pointer to the option value
+ *   - gpointer ret_value: (in out): pointer to the option value
  *   - PluginConfType type: type of the option
  *
  * Returns: (tranfer full): new created dialog widget.
@@ -280,6 +280,28 @@ extern GtkWidget *lxpanel_generic_config_dlg(const char *title, LXPanel *panel,
                                              GtkWidget *plugin,
                                              const char *name, ...);
 
+/**
+ * panel_config_int_button_new
+ * @name: text representing the option in dialog
+ * @min: minimal spin button value
+ * @max: maximal spin button value
+ * @val: (in out): pointer to the option value
+ *
+ * Widget to use as CONF_TYPE_EXTERNAL instead of CONF_TYPE_INT if plugin
+ * wants to customize range for lxpanel_generic_config_dlg(). The default
+ * widget uses range 0...1000 and here you can set custom range. This API
+ * should be never used outside of lxpanel_generic_config_dlg() arguments
+ * since it uses callbacks specific to that API.
+ *
+ * See also: lxpanel_generic_config_dlg().
+ *
+ * Returns: (transfer full): new widget.
+ *
+ * Since: 0.8.0
+ */
+extern GtkWidget *panel_config_int_button_new(const char *name, gint *val,
+                                              gint min, gint max);
+
 /*
  * creates GtkFrame derived widget which can change hotkey or mouse binding
  * emits "changed" signal: void callback(PanelCfgInputButton *, char *, gpointer);
@@ -288,8 +310,8 @@ extern GtkWidget *lxpanel_generic_config_dlg(const char *title, LXPanel *panel,
  *
  * Since: 0.8.0
  */
-GtkWidget *panel_config_hotkey_button_new(const char *label, const char *hotkey);
-GtkWidget *panel_config_click_button_new(const char *label, const char *click);
+extern GtkWidget *panel_config_hotkey_button_new(const char *label, const char *hotkey);
+extern GtkWidget *panel_config_click_button_new(const char *label, const char *click);
 
 /**
  * lxpanel_apply_hotkey
@@ -310,9 +332,9 @@ GtkWidget *panel_config_click_button_new(const char *label, const char *click);
  *
  * 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);
+extern gboolean lxpanel_apply_hotkey(char **hkptr, const char *keystring,
+                                     void (*handler)(const char *keystring, gpointer user_data),
+                                     gpointer user_data, gboolean show_error);
 
 /**
  * panel_config_click_parse
@@ -327,7 +349,7 @@ gboolean lxpanel_apply_hotkey(char **hkptr, const char *keystring,
  *
  * Since: 0.8.0
  */
-guint panel_config_click_parse(const char *keystring, GdkModifierType *mods);
+extern guint panel_config_click_parse(const char *keystring, GdkModifierType *mods);
 
 G_END_DECLS