[pan2] - improved status icon behavior, change only happens on click, simplified - beautified tabs in prefe
- From: Heinrich MÃller <henmull src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [pan2] - improved status icon behavior, change only happens on click, simplified - beautified tabs in prefe
- Date: Mon, 23 Jan 2012 15:05:32 +0000 (UTC)
commit 206afbf285fddb7c709f04a71ae4f4ef10160e91
Author: Heinrich MÃller <henmull src gnome org>
Date: Mon Jan 23 16:03:37 2012 +0100
- improved status icon behavior, change only happens on click, simplified
- beautified tabs in preferences, auto-set tab number to 0 on entry
- fixed article-cache behavior with new filename extensions, but user still has to recache articles with different extension than the current because pan can't guess vice-versa
pan/data/article-cache.cc | 6 +--
pan/gui/pan.cc | 107 +++++++++++++++-----------------
pan/gui/prefs-ui.cc | 150 +++++++++++++++++++++++++--------------------
pan/icons/Makefile.am | 13 +++-
4 files changed, 145 insertions(+), 131 deletions(-)
---
diff --git a/pan/data/article-cache.cc b/pan/data/article-cache.cc
index 6a431c2..b1918a4 100644
--- a/pan/data/article-cache.cc
+++ b/pan/data/article-cache.cc
@@ -124,11 +124,7 @@ ArticleCache :: message_id_to_filename (char * buf, int len, const StringView& m
}
// add the filename extension
- char* tmp = new char[msg_extension.length()+1];
- g_snprintf (tmp, sizeof(tmp), ".%s", msg_extension.c_str());
- g_snprintf (out, len-(out-buf), tmp);
-
- delete tmp;
+ g_snprintf (out, len-(out-buf), ".%s", msg_extension.c_str());
return buf;
}
diff --git a/pan/gui/pan.cc b/pan/gui/pan.cc
index 4c97679..204b640 100644
--- a/pan/gui/pan.cc
+++ b/pan/gui/pan.cc
@@ -74,7 +74,7 @@ extern "C" {
#endif
-/* NOTE : Dbus is disabled for now, it's buggy */
+/* NOTE : Dbus is disabled for now, my implementation is buggy */
//#define DEBUG_LOCALE 1
#define DEBUG_PARALLEL 1
@@ -114,14 +114,7 @@ namespace
gboolean delete_event_cb (GtkWidget * w, GdkEvent *, gpointer user_data)
{
- Prefs* prefs (static_cast<Prefs*>(user_data));
- if(prefs->get_flag ("status-icon", true))
- {
- gtk_widget_hide(w);
- gtk_window_iconify (GTK_WINDOW(w));
- }
- else
- mainloop_quit ();
+ mainloop_quit ();
return true; // don't invoke the default handler that destroys the widget
}
@@ -429,26 +422,26 @@ namespace
/* ****** End Status Icon and Notification ****************************************/
- static gboolean window_state_event (GtkWidget *widget, GdkEventWindowState *event, gpointer trayIcon)
- {
-
- StatusIconListener* l(static_cast<StatusIconListener*>(trayIcon));
-
- if(event->changed_mask == GDK_WINDOW_STATE_ICONIFIED
- && (event->new_window_state == GDK_WINDOW_STATE_ICONIFIED
- || event->new_window_state == (GDK_WINDOW_STATE_ICONIFIED | GDK_WINDOW_STATE_MAXIMIZED)))
- {
- gtk_status_icon_set_visible(GTK_STATUS_ICON(l->icon), TRUE);
- gtk_widget_hide (GTK_WIDGET(widget));
- }
-// else if(event->changed_mask == GDK_WINDOW_STATE_WITHDRAWN
-// && (event->new_window_state == GDK_WINDOW_STATE_ICONIFIED
-// || event->new_window_state == (GDK_WINDOW_STATE_ICONIFIED | GDK_WINDOW_STATE_MAXIMIZED)))
+// static gboolean window_state_event (GtkWidget *widget, GdkEventWindowState *event, gpointer trayIcon)
+// {
+//
+// StatusIconListener* l(static_cast<StatusIconListener*>(trayIcon));
+//
+// if(event->changed_mask == GDK_WINDOW_STATE_ICONIFIED
+// && (event->new_window_state == GDK_WINDOW_STATE_ICONIFIED
+// || event->new_window_state == (GDK_WINDOW_STATE_ICONIFIED | GDK_WINDOW_STATE_MAXIMIZED)))
// {
-// gtk_status_icon_set_visible(GTK_STATUS_ICON(l->icon), FALSE);
+// gtk_status_icon_set_visible(GTK_STATUS_ICON(l->icon), TRUE);
+// gtk_widget_hide (GTK_WIDGET(widget));
// }
- return TRUE;
- }
+//// else if(event->changed_mask == GDK_WINDOW_STATE_WITHDRAWN
+//// && (event->new_window_state == GDK_WINDOW_STATE_ICONIFIED
+//// || event->new_window_state == (GDK_WINDOW_STATE_ICONIFIED | GDK_WINDOW_STATE_MAXIMIZED)))
+//// {
+//// gtk_status_icon_set_visible(GTK_STATUS_ICON(l->icon), FALSE);
+//// }
+// return TRUE;
+// }
struct QueueAndGui
{
@@ -507,7 +500,7 @@ namespace
gtk_widget_show_all(menu);
g_signal_connect(icon, "activate", G_CALLBACK(status_icon_activate), window);
g_signal_connect(icon, "popup-menu", G_CALLBACK(status_icon_popup_menu), menu);
- g_signal_connect (G_OBJECT (window), "window-state-event", G_CALLBACK (window_state_event), pl);
+// g_signal_connect (G_OBJECT (window), "window-state-event", G_CALLBACK (window_state_event), pl);
}
@@ -518,41 +511,39 @@ namespace
GroupPrefs & group_prefs,
GtkWindow * window)
{
-// {
- GUI& gui (*_gui);
+ GUI& gui (*_gui);
- const gulong delete_cb_id = g_signal_connect (window, "delete-event", G_CALLBACK(delete_event_cb), &prefs);
+ const gulong delete_cb_id = g_signal_connect (window, "delete-event", G_CALLBACK(delete_event_cb), NULL);
- gtk_container_add (GTK_CONTAINER(window), gui.root());
- const bool minimized(prefs.get_flag("start-minimized", false));
- if (minimized) gtk_window_iconify (window);
- gtk_widget_show (GTK_WIDGET(window));
+ gtk_container_add (GTK_CONTAINER(window), gui.root());
+ const bool minimized(prefs.get_flag("start-minimized", false));
+ if (minimized) gtk_window_iconify (window);
+ gtk_widget_show (GTK_WIDGET(window));
- const quarks_t servers (data.get_servers ());
- if (servers.empty())
- {
- const Quark empty_server;
- GtkWidget * w = server_edit_dialog_new (data, queue, window, empty_server);
- gtk_widget_show_all (w);
- GtkWidget * msg = gtk_message_dialog_new (GTK_WINDOW(w),
- GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_MESSAGE_INFO,
- GTK_BUTTONS_CLOSE,
- _("Thank you for trying Pan!\n \nTo start newsreading, first Add a Server."));
- g_signal_connect_swapped (msg, "response", G_CALLBACK (gtk_widget_destroy), msg);
- gtk_widget_show_all (msg);
-
- DataAndQueue * foo = g_new0 (DataAndQueue, 1);
- foo->data = &data;
- foo->queue = &queue;
- g_signal_connect (w, "destroy", G_CALLBACK(add_grouplist_task), foo);
- }
+ const quarks_t servers (data.get_servers ());
+ if (servers.empty())
+ {
+ const Quark empty_server;
+ GtkWidget * w = server_edit_dialog_new (data, queue, window, empty_server);
+ gtk_widget_show_all (w);
+ GtkWidget * msg = gtk_message_dialog_new (GTK_WINDOW(w),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_INFO,
+ GTK_BUTTONS_CLOSE,
+ _("Thank you for trying Pan!\n \nTo start newsreading, first Add a Server."));
+ g_signal_connect_swapped (msg, "response", G_CALLBACK (gtk_widget_destroy), msg);
+ gtk_widget_show_all (msg);
+
+ DataAndQueue * foo = g_new0 (DataAndQueue, 1);
+ foo->data = &data;
+ foo->queue = &queue;
+ g_signal_connect (w, "destroy", G_CALLBACK(add_grouplist_task), foo);
+ }
- register_shutdown_signals ();
- mainloop ();
- g_signal_handler_disconnect (window, delete_cb_id);
-// }
+ register_shutdown_signals ();
+ mainloop ();
+ g_signal_handler_disconnect (window, delete_cb_id);
delete _gui;
diff --git a/pan/gui/prefs-ui.cc b/pan/gui/prefs-ui.cc
index f816fee..5320cf1 100644
--- a/pan/gui/prefs-ui.cc
+++ b/pan/gui/prefs-ui.cc
@@ -296,6 +296,21 @@ namespace
return r;
}
+ GtkWidget* new_label_with_icon(const char* mnemonic, const char* label, const guint8* line, Prefs& prefs)
+ {
+ const bool show_text =!prefs.get_flag("show-only-icons-in-preftabs", "false");
+
+ GtkWidget* hbox = gtk_hbox_new(false, 2);
+ GdkPixbuf * pixbuf = gdk_pixbuf_new_from_inline (-1, line, false, 0);
+ GtkWidget * image = gtk_image_new_from_pixbuf (pixbuf);
+ g_object_unref (pixbuf);
+ if (line) gtk_box_pack_start (GTK_BOX(hbox), image, true, true, 0);
+ if (show_text) gtk_box_pack_start (GTK_BOX(hbox), gtk_label_new_with_mnemonic(mnemonic), true, true, 0);
+ gtk_widget_set_tooltip_text (hbox, label);
+ gtk_widget_show_all(hbox);
+ return hbox;
+ }
+
void fill_pref_hotkeys(GtkWidget* t, int& row, Prefs& prefs)
{
@@ -785,76 +800,56 @@ PrefsDialog :: PrefsDialog (Prefs& prefs, GtkWindow* parent):
gtk_misc_set_alignment (GTK_MISC(l), 0.0, 0.5);
HIG :: workarea_add_row (t, &row, w, l);
- HIG :: workarea_finish (t, &row);
- gtk_notebook_append_page (GTK_NOTEBOOK(notebook), t, gtk_label_new_with_mnemonic(_("_Behavior")));
-
- // Hotkeys
- row = 0;
- t = HIG :: workarea_create ();
- fill_pref_hotkeys(t, row, _prefs);
+ HIG::workarea_add_section_divider (t, &row);
+ HIG :: workarea_add_section_title (t, &row, _("Tabs"));
+ w = new_check_button (_("Show only icons in Preferences tabs"), "show-only-icons-in-preftabs", false, prefs);
+ HIG :: workarea_add_wide_control (t, &row, w);
HIG :: workarea_finish (t, &row);
-
- GtkWidget* scroll = gtk_scrolled_window_new (NULL, NULL);
- gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW(scroll), GTK_SHADOW_IN);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll),
- GTK_POLICY_AUTOMATIC,
- GTK_POLICY_AUTOMATIC);
- gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW(scroll), t);
-
- gtk_widget_show_all (scroll);
-
- gtk_notebook_append_page (GTK_NOTEBOOK(notebook), scroll, gtk_label_new_with_mnemonic(_("_Hotkeys")));
+ gtk_notebook_append_page (GTK_NOTEBOOK(notebook), t, new_label_with_icon(_("_Behavior"), _("Behavior"), icon_prefs_behavior, prefs));
//charset
row = 0;
t = HIG :: workarea_create ();
- HIG :: workarea_add_section_spacer (t, row, 1);
- HIG :: workarea_add_section_title (t, &row, _("Language Settings"));
- w = gtk_button_new_from_stock (GTK_STOCK_SELECT_FONT);
- l = charset_label = gtk_label_new (NULL);
- gtk_misc_set_alignment (GTK_MISC(l), 0.0, 0.0);
- update_default_charset_label(_prefs.get_string("default-charset","UTF-8"));
- g_signal_connect (w, "clicked", G_CALLBACK(select_prefs_charset_cb), this);
- HIG::workarea_add_row (t, &row, w, l);
- HIG :: workarea_finish (t, &row);
- gtk_notebook_append_page (GTK_NOTEBOOK(notebook), t, gtk_label_new_with_mnemonic(_("_Charset")));
+ HIG :: workarea_add_section_spacer (t, row, 1);
+ HIG :: workarea_add_section_title (t, &row, _("Language Settings"));
+ w = gtk_button_new_from_stock (GTK_STOCK_SELECT_FONT);
+ l = charset_label = gtk_label_new (NULL);
+ gtk_misc_set_alignment (GTK_MISC(l), 0.0, 0.0);
+ update_default_charset_label(_prefs.get_string("default-charset","UTF-8"));
+ g_signal_connect (w, "clicked", G_CALLBACK(select_prefs_charset_cb), this);
+ HIG::workarea_add_row (t, &row, w, l);
- // systray and notify popup
- row = 0;
- t = HIG :: workarea_create ();
- HIG :: workarea_add_section_title (t, &row, _("System Tray Behavior"));
- HIG :: workarea_add_section_spacer (t, row, 3);
- w = new_check_button (_("Hide to system tray"), "status-icon", false, prefs);
- HIG :: workarea_add_wide_control (t, &row, w);
- w = new_check_button (_("Start Pan minimized"), "start-minimized", false, prefs);
- HIG :: workarea_add_wide_control (t, &row, w);
+ // systray and notify popup
+ HIG :: workarea_add_section_title (t, &row, _("System Tray Behavior"));
+ HIG :: workarea_add_section_spacer (t, row, 3);
+ w = new_check_button (_("Hide to system tray"), "status-icon", false, prefs);
+ HIG :: workarea_add_wide_control (t, &row, w);
+ w = new_check_button (_("Start Pan minimized"), "start-minimized", false, prefs);
+ HIG :: workarea_add_wide_control (t, &row, w);
#ifdef HAVE_LIBNOTIFY
- w = new_check_button (_("Show notifications"), "use-notify", false, prefs);
- HIG :: workarea_add_wide_control (t, &row, w);
+ w = new_check_button (_("Show notifications"), "use-notify", false, prefs);
+ HIG :: workarea_add_wide_control (t, &row, w);
#endif
- HIG :: workarea_finish (t, &row);
- gtk_notebook_append_page (GTK_NOTEBOOK(notebook), t, gtk_label_new_with_mnemonic(_("_Status and Notifications")));
- // Autosave Features
- row = 0;
- t = HIG :: workarea_create ();
- HIG :: workarea_add_section_spacer (t, row, 2);
- HIG :: workarea_add_section_title (t, &row, _("Autosave Article Draft"));
- w = new_spin_button ("draft-autosave-timeout-min", 0, 60, prefs);
- l = gtk_label_new(_("Minutes to autosave the current Article Draft."));
- gtk_misc_set_alignment (GTK_MISC(l), 0.0, 0.5);
- gtk_label_set_mnemonic_widget(GTK_LABEL(l), w);
- HIG::workarea_add_row (t, &row, w, l);
- HIG::workarea_add_section_divider (t, &row);
- HIG :: workarea_add_section_title (t, &row, _("Autosave Articles"));
- w = new_spin_button ("newsrc-autosave-timeout-min", 0, 60, prefs);
- l = gtk_label_new(_("Minutes to autosave newsrc files"));
- gtk_misc_set_alignment (GTK_MISC(l), 0.0, 0.5);
- gtk_label_set_mnemonic_widget(GTK_LABEL(l), w);
- HIG::workarea_add_row (t, &row, w, l);
+ // Autosave Features
+ HIG :: workarea_add_section_spacer (t, row, 2);
+ HIG :: workarea_add_section_title (t, &row, _("Autosave Article Draft"));
+ w = new_spin_button ("draft-autosave-timeout-min", 0, 60, prefs);
+ l = gtk_label_new(_("Minutes to autosave the current Article Draft."));
+ gtk_misc_set_alignment (GTK_MISC(l), 0.0, 0.5);
+ gtk_label_set_mnemonic_widget(GTK_LABEL(l), w);
+ HIG::workarea_add_row (t, &row, w, l);
+ HIG::workarea_add_section_divider (t, &row);
+ HIG :: workarea_add_section_title (t, &row, _("Autosave Articles"));
+ w = new_spin_button ("newsrc-autosave-timeout-min", 0, 60, prefs);
+ l = gtk_label_new(_("Minutes to autosave newsrc files"));
+ gtk_misc_set_alignment (GTK_MISC(l), 0.0, 0.5);
+ gtk_label_set_mnemonic_widget(GTK_LABEL(l), w);
+ HIG::workarea_add_row (t, &row, w, l);
+
HIG :: workarea_finish (t, &row);
- gtk_notebook_append_page (GTK_NOTEBOOK(notebook), t, gtk_label_new_with_mnemonic(_("_Autosave")));
+ gtk_notebook_append_page (GTK_NOTEBOOK(notebook), t, new_label_with_icon(_("_Miscellaneous"), _("Miscellaneous"), icon_prefs_extras, prefs));
// Layout
row = 0;
@@ -890,8 +885,9 @@ PrefsDialog :: PrefsDialog (Prefs& prefs, GtkWindow* parent):
HIG :: workarea_add_wide_control (t, &row, w);
w = new_orient_radio (w, _("1=Body, 2=Headers, 3=Groups"), "body,headers,groups", cur, prefs);
HIG :: workarea_add_wide_control (t, &row, w);
+
HIG :: workarea_finish (t, &row);
- gtk_notebook_append_page (GTK_NOTEBOOK(notebook), t, gtk_label_new_with_mnemonic(_("_Layout")));
+ gtk_notebook_append_page (GTK_NOTEBOOK(notebook), t, new_label_with_icon(_("_Layout"), _("Layout"), icon_prefs_layout, prefs));
// Headers
row = 0;
@@ -900,8 +896,9 @@ PrefsDialog :: PrefsDialog (Prefs& prefs, GtkWindow* parent):
HIG :: workarea_add_section_spacer(t, row, 1);
HIG :: workarea_add_wide_control (t, &row, header_columns_layout_new (prefs));
HIG :: workarea_finish (t, &row);
- gtk_notebook_append_page (GTK_NOTEBOOK(notebook), t, gtk_label_new_with_mnemonic(_("_Headers")));
+ gtk_notebook_append_page (GTK_NOTEBOOK(notebook), t, new_label_with_icon(_("_Headers"), _("Headers"), icon_prefs_headers, prefs));
+ // customizable actionss
row = 0;
t = HIG :: workarea_create ();
@@ -917,7 +914,7 @@ PrefsDialog :: PrefsDialog (Prefs& prefs, GtkWindow* parent):
HIG :: workarea_add_row (t, &row, _("Download _attachments of posts scoring at: "), w);
HIG :: workarea_finish (t, &row);
- gtk_notebook_append_page (GTK_NOTEBOOK(notebook), t, gtk_label_new_with_mnemonic(_("_Actions")));
+ gtk_notebook_append_page (GTK_NOTEBOOK(notebook), t, new_label_with_icon(_("_Actions"), _("Actions"), icon_prefs_actions, prefs));
// Fonts
row = 0;
@@ -943,7 +940,7 @@ PrefsDialog :: PrefsDialog (Prefs& prefs, GtkWindow* parent):
b = new_font_button ("monospace-font", "Monospace 10", prefs);
HIG :: workarea_add_row (t, &row, l, b);
HIG :: workarea_finish (t, &row);
- gtk_notebook_append_page (GTK_NOTEBOOK(notebook), t, gtk_label_new_with_mnemonic(_("_Fonts")));
+ gtk_notebook_append_page (GTK_NOTEBOOK(notebook), t, new_label_with_icon(_("_Fonts"), _("Fonts"), icon_prefs_fonts, prefs));
// Colors
row = 0;
@@ -997,7 +994,7 @@ PrefsDialog :: PrefsDialog (Prefs& prefs, GtkWindow* parent):
HIG :: workarea_add_row (t, &row, _("URL:"), new_color_button ("body-pane-color-url", TANGO_SKY_BLUE_DARK, prefs));
HIG :: workarea_add_row (t, &row, _("Signature:"), new_color_button ("body-pane-color-signature", TANGO_SKY_BLUE_LIGHT, prefs));
HIG :: workarea_finish (t, &row);
- gtk_notebook_append_page (GTK_NOTEBOOK(notebook), t, gtk_label_new_with_mnemonic(_("_Colors")));
+ gtk_notebook_append_page (GTK_NOTEBOOK(notebook), t, new_label_with_icon(_("_Colors"), _("Colors"), icon_prefs_colors, prefs));
// Applications
row = 0;
@@ -1013,7 +1010,7 @@ PrefsDialog :: PrefsDialog (Prefs& prefs, GtkWindow* parent):
w = editor_new (prefs);
HIG :: workarea_add_row (t, &row, _("_Text editor:"), w);
HIG :: workarea_finish (t, &row);
- gtk_notebook_append_page (GTK_NOTEBOOK(notebook), t, gtk_label_new_with_mnemonic(_("A_pplications")));
+ gtk_notebook_append_page (GTK_NOTEBOOK(notebook), t, new_label_with_icon(_("_Applications"), _("Applications"), icon_prefs_applications, prefs));
// Upload Options
row = 0;
@@ -1027,9 +1024,30 @@ PrefsDialog :: PrefsDialog (Prefs& prefs, GtkWindow* parent):
HIG::workarea_add_row (t, &row, w, l);
HIG :: workarea_finish (t, &row);
- gtk_notebook_append_page (GTK_NOTEBOOK(notebook), t, gtk_label_new_with_mnemonic(_("_Upload")));
+ gtk_notebook_append_page (GTK_NOTEBOOK(notebook), t, new_label_with_icon(_("_Upload"), _("Upload"), icon_prefs_upload, prefs));
+
+ // Hotkeys
+ row = 0;
+ t = HIG :: workarea_create ();
+ fill_pref_hotkeys(t, row, _prefs);
+
+ HIG :: workarea_finish (t, &row);
+
+ GtkWidget* scroll = gtk_scrolled_window_new (NULL, NULL);
+ gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW(scroll), GTK_SHADOW_IN);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_AUTOMATIC);
+ gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW(scroll), t);
+
+ gtk_widget_show_all (scroll);
+
+ gtk_notebook_append_page (GTK_NOTEBOOK(notebook), scroll, new_label_with_icon(_("_Hotkeys"), _("Hotkeys"), icon_prefs_hotkeys, prefs));
gtk_widget_show_all (notebook);
gtk_box_pack_start (GTK_BOX(gtk_dialog_get_content_area( GTK_DIALOG(dialog))), notebook, true, true, 0);
+
+ gtk_notebook_set_current_page(GTK_NOTEBOOK(notebook), 0);
+
_root = dialog;
}
diff --git a/pan/icons/Makefile.am b/pan/icons/Makefile.am
index 3107fb3..4677c27 100644
--- a/pan/icons/Makefile.am
+++ b/pan/icons/Makefile.am
@@ -55,8 +55,17 @@ stock_images = \
icon_status_idle.png \
icon_status_new_articles.png \
icon_sig_ok.png \
- icon_sig_fail.png
-
+ icon_sig_fail.png \
+ icon_prefs_applications.png \
+ icon_prefs_extras.png \
+ icon_prefs_hotkeys.png \
+ icon_prefs_behavior.png \
+ icon_prefs_fonts.png \
+ icon_prefs_upload.png \
+ icon_prefs_colors.png \
+ icon_prefs_headers.png \
+ icon_prefs_layout.png \
+ icon_prefs_actions.png
EXTRA_DIST = \
pan-template.xcf \
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]