aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2009-12-16 01:52:15 +0000
committerhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2009-12-16 01:52:15 +0000
commit251bd29db5506d1f3fa5ec5a0720912cfd44abf4 (patch)
treedf8f5d8d903c9df07a1343f09f8f76ee441f6b9e
parent3b4ba972e0c6108f2464784b39eeaaf828004f4f (diff)
show description when the quick search entry doesn't have focus.
git-svn-id: svn://sylpheed.sraoss.jp/sylpheed/trunk@2390 ee746299-78ed-0310-b773-934348b2243d
-rw-r--r--ChangeLog6
-rw-r--r--src/quick_search.c66
-rw-r--r--src/quick_search.h2
-rw-r--r--src/summaryview.c6
4 files changed, 75 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index c6e1babb..63e4ee3f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2009-12-16
+
+ * src/quick_search.[ch]
+ src/summaryview.c: show description when the entry doesn't have
+ focus.
+
2009-12-15
* src/update_check.c: don't show update dialog if modal dialog exists
diff --git a/src/quick_search.c b/src/quick_search.c
index 94001be0..254672e8 100644
--- a/src/quick_search.c
+++ b/src/quick_search.c
@@ -49,8 +49,17 @@ static const struct {
{QS_LAST7, -1}
};
+static GdkColor text_color;
+static GdkColor dim_color = {0, COLOR_DIM, COLOR_DIM, COLOR_DIM};
+
static void menu_activated (GtkWidget *menuitem,
QuickSearch *qsearch);
+static gboolean entry_focus_in (GtkWidget *entry,
+ GdkEventFocus *event,
+ QuickSearch *qsearch);
+static gboolean entry_focus_out (GtkWidget *entry,
+ GdkEventFocus *event,
+ QuickSearch *qsearch);
static void entry_changed (GtkWidget *entry,
QuickSearch *qsearch);
static void entry_activated (GtkWidget *entry,
@@ -77,6 +86,7 @@ QuickSearch *quick_search_create(SummaryView *summaryview)
GtkWidget *clear_btn;
GtkWidget *image;
GtkWidget *status_label;
+ GtkStyle *style;
qsearch = g_new0(QuickSearch, 1);
@@ -121,6 +131,10 @@ QuickSearch *quick_search_create(SummaryView *summaryview)
entry = gtk_entry_new();
gtk_widget_set_size_request(entry, 200, -1);
gtk_box_pack_start(GTK_BOX(hbox), entry, FALSE, FALSE, 0);
+ g_signal_connect(G_OBJECT(entry), "focus-in-event",
+ G_CALLBACK(entry_focus_in), qsearch);
+ g_signal_connect(G_OBJECT(entry), "focus-out-event",
+ G_CALLBACK(entry_focus_out), qsearch);
g_signal_connect(G_OBJECT(entry), "changed",
G_CALLBACK(entry_changed), qsearch);
g_signal_connect(G_OBJECT(entry), "activate",
@@ -164,17 +178,28 @@ QuickSearch *quick_search_create(SummaryView *summaryview)
qsearch->status_label = status_label;
qsearch->summaryview = summaryview;
summaryview->qsearch = qsearch;
+ qsearch->entry_entered = FALSE;
gtk_widget_show_all(hbox);
gtk_widget_hide(clear_btn);
+ style = gtk_widget_get_style(entry);
+ text_color = style->text[GTK_STATE_NORMAL];
+ entry_focus_out(entry, NULL, qsearch);
+
return qsearch;
}
void quick_search_clear_entry(QuickSearch *qsearch)
{
- gtk_entry_set_text(GTK_ENTRY(qsearch->entry), "");
+ qsearch->entry_entered = FALSE;
+ if (GTK_WIDGET_HAS_FOCUS(qsearch->entry))
+ entry_focus_in(qsearch->entry, NULL, qsearch);
+ else
+ entry_focus_out(qsearch->entry, NULL, qsearch);
+
gtk_label_set_text(GTK_LABEL(qsearch->status_label), "");
+ gtk_widget_hide(qsearch->clear_btn);
}
GSList *quick_search_filter(QuickSearch *qsearch, QSearchCondType type,
@@ -302,15 +327,50 @@ static void menu_activated(GtkWidget *menuitem, QuickSearch *qsearch)
summary_qsearch(qsearch->summaryview);
}
+static gboolean entry_focus_in(GtkWidget *entry, GdkEventFocus *event,
+ QuickSearch *qsearch)
+{
+ GtkStyle *style;
+
+ if (!qsearch->entry_entered) {
+ g_signal_handlers_block_by_func(entry, entry_changed, qsearch);
+ gtk_entry_set_text(GTK_ENTRY(entry), "");
+ style = gtk_widget_get_style(entry);
+ gtk_widget_modify_text(entry, GTK_STATE_NORMAL, &text_color);
+ g_signal_handlers_unblock_by_func(entry, entry_changed, qsearch);
+ }
+
+ return FALSE;
+}
+
+static gboolean entry_focus_out(GtkWidget *entry, GdkEventFocus *event,
+ QuickSearch *qsearch)
+{
+ GtkStyle *style;
+
+ if (!qsearch->entry_entered) {
+ g_signal_handlers_block_by_func(entry, entry_changed, qsearch);
+ style = gtk_widget_get_style(entry);
+ gtk_widget_modify_text(entry, GTK_STATE_NORMAL, &dim_color);
+ gtk_entry_set_text(GTK_ENTRY(entry), _("Search for Subject or From"));
+ g_signal_handlers_unblock_by_func(entry, entry_changed, qsearch);
+ }
+
+ return FALSE;
+}
+
static void entry_changed(GtkWidget *entry, QuickSearch *qsearch)
{
const gchar *text;
text = gtk_entry_get_text(GTK_ENTRY(entry));
- if (text && *text != '\0')
+ if (text && *text != '\0') {
gtk_widget_show(qsearch->clear_btn);
- else
+ qsearch->entry_entered = TRUE;
+ } else {
gtk_widget_hide(qsearch->clear_btn);
+ qsearch->entry_entered = FALSE;
+ }
}
static void entry_activated(GtkWidget *entry, QuickSearch *qsearch)
diff --git a/src/quick_search.h b/src/quick_search.h
index ee59f02d..52516499 100644
--- a/src/quick_search.h
+++ b/src/quick_search.h
@@ -49,6 +49,8 @@ struct _QuickSearch
GtkWidget *status_label;
SummaryView *summaryview;
+
+ gboolean entry_entered;
};
QuickSearch *quick_search_create(SummaryView *summaryview);
diff --git a/src/summaryview.c b/src/summaryview.c
index 5e8551bd..99e46452 100644
--- a/src/summaryview.c
+++ b/src/summaryview.c
@@ -5342,7 +5342,7 @@ void summary_qsearch(SummaryView *summaryview)
{
QSearchCondType type;
GtkWidget *menuitem;
- const gchar *key;
+ const gchar *key = NULL;
GSList *flt_mlist;
guint selected_msgnum = 0;
guint displayed_msgnum = 0;
@@ -5355,7 +5355,9 @@ void summary_qsearch(SummaryView *summaryview)
if (!summaryview->all_mlist)
return;
- key = gtk_entry_get_text(GTK_ENTRY(summaryview->qsearch->entry));
+ if (summaryview->qsearch->entry_entered)
+ key = gtk_entry_get_text
+ (GTK_ENTRY(summaryview->qsearch->entry));
if (type == QS_ALL && (!key || *key == '\0')) {
summary_qsearch_reset(summaryview);
return;