Compose *compose;
gboolean search_compose;
gboolean is_searching;
+ gboolean body_entry_has_focus;
} search_window;
static void message_search_create (void);
static void message_search_stop_clicked (GtkButton *button,
gpointer data);
static void body_changed (void);
+static gboolean body_entry_focus_evt_in(GtkWidget *widget, GdkEventFocus *event,
+ gpointer data);
+static gboolean body_entry_focus_evt_out(GtkWidget *widget, GdkEventFocus *event,
+ gpointer data);
static gboolean key_pressed (GtkWidget *widget,
GdkEventKey *event,
gpointer data);
gtk_box_pack_start (GTK_BOX (hbox1), body_entry, TRUE, TRUE, 0);
g_signal_connect(G_OBJECT(body_entry), "changed",
G_CALLBACK(body_changed), NULL);
+ g_signal_connect(G_OBJECT(GTK_BIN(body_entry)->child),
+ "focus_in_event", G_CALLBACK(body_entry_focus_evt_in), NULL);
+ g_signal_connect(G_OBJECT(GTK_BIN(body_entry)->child),
+ "focus_out_event", G_CALLBACK(body_entry_focus_evt_out), NULL);
checkbtn_hbox = gtk_hbox_new (FALSE, 8);
gtk_widget_show (checkbtn_hbox);
static void body_changed(void)
{
- gtk_widget_grab_focus(search_window.body_entry);
+ if (!search_window.body_entry_has_focus)
+ gtk_widget_grab_focus(search_window.body_entry);
+}
+
+static gboolean body_entry_focus_evt_in(GtkWidget *widget, GdkEventFocus *event,
+ gpointer data)
+{
+ search_window.body_entry_has_focus = TRUE;
+ return FALSE;
+}
+
+static gboolean body_entry_focus_evt_out(GtkWidget *widget, GdkEventFocus *event,
+ gpointer data)
+{
+ search_window.body_entry_has_focus = FALSE;
+ return FALSE;
}
static void message_search_prev_clicked(GtkButton *button, gpointer data)
MatcherList *matcher_list;
gboolean is_searching;
+ gboolean from_entry_has_focus;
+ gboolean to_entry_has_focus;
+ gboolean subject_entry_has_focus;
+ gboolean body_entry_has_focus;
+ gboolean adv_condition_entry_has_focus;
} search_window;
static void summary_search_create (void);
static void body_changed (void);
static void adv_condition_changed (void);
+static gboolean from_entry_focus_evt_in(GtkWidget *widget, GdkEventFocus *event,
+ gpointer data);
+static gboolean from_entry_focus_evt_out(GtkWidget *widget, GdkEventFocus *event,
+ gpointer data);
+static gboolean to_entry_focus_evt_in(GtkWidget *widget, GdkEventFocus *event,
+ gpointer data);
+static gboolean to_entry_focus_evt_out(GtkWidget *widget, GdkEventFocus *event,
+ gpointer data);
+static gboolean subject_entry_focus_evt_in(GtkWidget *widget, GdkEventFocus *event,
+ gpointer data);
+static gboolean subject_entry_focus_evt_out(GtkWidget *widget, GdkEventFocus *event,
+ gpointer data);
+static gboolean body_entry_focus_evt_in(GtkWidget *widget, GdkEventFocus *event,
+ gpointer data);
+static gboolean body_entry_focus_evt_out(GtkWidget *widget, GdkEventFocus *event,
+ gpointer data);
+static gboolean adv_condition_entry_focus_evt_in(GtkWidget *widget, GdkEventFocus *event,
+ gpointer data);
+static gboolean adv_condition_entry_focus_evt_out(GtkWidget *widget, GdkEventFocus *event,
+ gpointer data);
+
static gboolean key_pressed (GtkWidget *widget,
GdkEventKey *event,
gpointer data);
GTK_EXPAND|GTK_FILL, 0, 0, 0);
g_signal_connect(G_OBJECT(from_entry), "changed",
G_CALLBACK(from_changed), NULL);
+ g_signal_connect(G_OBJECT(GTK_BIN(from_entry)->child),
+ "focus_in_event", G_CALLBACK(from_entry_focus_evt_in), NULL);
+ g_signal_connect(G_OBJECT(GTK_BIN(from_entry)->child),
+ "focus_out_event", G_CALLBACK(from_entry_focus_evt_out), NULL);
to_entry = gtk_combo_box_entry_new_text ();
gtk_combo_box_set_active(GTK_COMBO_BOX(to_entry), -1);
GTK_EXPAND|GTK_FILL, 0, 0, 0);
g_signal_connect(G_OBJECT(from_entry), "changed",
G_CALLBACK(from_changed), NULL);
+ g_signal_connect(G_OBJECT(GTK_BIN(to_entry)->child),
+ "focus_in_event", G_CALLBACK(to_entry_focus_evt_in), NULL);
+ g_signal_connect(G_OBJECT(GTK_BIN(to_entry)->child),
+ "focus_out_event", G_CALLBACK(to_entry_focus_evt_out), NULL);
subject_entry = gtk_combo_box_entry_new_text ();
gtk_combo_box_set_active(GTK_COMBO_BOX(subject_entry), -1);
GTK_EXPAND|GTK_FILL, 0, 0, 0);
g_signal_connect(G_OBJECT(from_entry), "changed",
G_CALLBACK(from_changed), NULL);
+ g_signal_connect(G_OBJECT(GTK_BIN(subject_entry)->child),
+ "focus_in_event", G_CALLBACK(subject_entry_focus_evt_in), NULL);
+ g_signal_connect(G_OBJECT(GTK_BIN(subject_entry)->child),
+ "focus_out_event", G_CALLBACK(subject_entry_focus_evt_out), NULL);
body_entry = gtk_combo_box_entry_new_text ();
gtk_combo_box_set_active(GTK_COMBO_BOX(body_entry), -1);
GTK_EXPAND|GTK_FILL, 0, 0, 0);
g_signal_connect(G_OBJECT(from_entry), "changed",
G_CALLBACK(from_changed), NULL);
+ g_signal_connect(G_OBJECT(GTK_BIN(body_entry)->child),
+ "focus_in_event", G_CALLBACK(body_entry_focus_evt_in), NULL);
+ g_signal_connect(G_OBJECT(GTK_BIN(body_entry)->child),
+ "focus_out_event", G_CALLBACK(body_entry_focus_evt_out), NULL);
adv_condition_entry = gtk_combo_box_entry_new_text ();
gtk_combo_box_set_active(GTK_COMBO_BOX(adv_condition_entry), -1);
GTK_EXPAND|GTK_FILL, 0, 0, 0);
g_signal_connect(G_OBJECT(from_entry), "changed",
G_CALLBACK(from_changed), NULL);
+ g_signal_connect(G_OBJECT(GTK_BIN(adv_condition_entry)->child),
+ "focus_in_event", G_CALLBACK(adv_condition_entry_focus_evt_in), NULL);
+ g_signal_connect(G_OBJECT(GTK_BIN(adv_condition_entry)->child),
+ "focus_out_event", G_CALLBACK(adv_condition_entry_focus_evt_out), NULL);
adv_condition_btn = gtk_button_new_with_label(" ... ");
gtk_widget_show (adv_condition_btn);
static void from_changed(void)
{
- gtk_widget_grab_focus(search_window.from_entry);
+ if (!search_window.from_entry_has_focus)
+ gtk_widget_grab_focus(search_window.from_entry);
}
static void to_changed(void)
{
- gtk_widget_grab_focus(search_window.to_entry);
+ if (!search_window.to_entry_has_focus)
+ gtk_widget_grab_focus(search_window.to_entry);
}
static void subject_changed(void)
{
- gtk_widget_grab_focus(search_window.subject_entry);
+ if (!search_window.subject_entry_has_focus)
+ gtk_widget_grab_focus(search_window.subject_entry);
}
static void body_changed(void)
{
- gtk_widget_grab_focus(search_window.body_entry);
+ if (!search_window.body_entry_has_focus)
+ gtk_widget_grab_focus(search_window.body_entry);
}
static void adv_condition_changed(void)
{
- gtk_widget_grab_focus(search_window.adv_condition_entry);
+ if (!search_window.adv_condition_entry_has_focus)
+ gtk_widget_grab_focus(search_window.adv_condition_entry);
+}
+
+static gboolean from_entry_focus_evt_in(GtkWidget *widget, GdkEventFocus *event,
+ gpointer data)
+{
+ search_window.from_entry_has_focus = TRUE;
+ return FALSE;
+}
+
+static gboolean from_entry_focus_evt_out(GtkWidget *widget, GdkEventFocus *event,
+ gpointer data)
+{
+ search_window.from_entry_has_focus = FALSE;
+ return FALSE;
+}
+
+static gboolean to_entry_focus_evt_in(GtkWidget *widget, GdkEventFocus *event,
+ gpointer data)
+{
+ search_window.to_entry_has_focus = TRUE;
+ return FALSE;
+}
+
+static gboolean to_entry_focus_evt_out(GtkWidget *widget, GdkEventFocus *event,
+ gpointer data)
+{
+ search_window.to_entry_has_focus = FALSE;
+ return FALSE;
+}
+
+static gboolean subject_entry_focus_evt_in(GtkWidget *widget, GdkEventFocus *event,
+ gpointer data)
+{
+ search_window.subject_entry_has_focus = TRUE;
+ return FALSE;
+}
+
+static gboolean subject_entry_focus_evt_out(GtkWidget *widget, GdkEventFocus *event,
+ gpointer data)
+{
+ search_window.subject_entry_has_focus = FALSE;
+ return FALSE;
+}
+
+static gboolean body_entry_focus_evt_in(GtkWidget *widget, GdkEventFocus *event,
+ gpointer data)
+{
+ search_window.body_entry_has_focus = TRUE;
+ return FALSE;
+}
+
+static gboolean body_entry_focus_evt_out(GtkWidget *widget, GdkEventFocus *event,
+ gpointer data)
+{
+ search_window.body_entry_has_focus = FALSE;
+ return FALSE;
+}
+
+static gboolean adv_condition_entry_focus_evt_in(GtkWidget *widget, GdkEventFocus *event,
+ gpointer data)
+{
+ search_window.adv_condition_entry_has_focus = TRUE;
+ return FALSE;
+}
+
+static gboolean adv_condition_entry_focus_evt_out(GtkWidget *widget, GdkEventFocus *event,
+ gpointer data)
+{
+ search_window.adv_condition_entry_has_focus = FALSE;
+ return FALSE;
}
static gboolean key_pressed(GtkWidget *widget, GdkEventKey *event,