+2004-07-17 [colin] 0.9.12cvs30.2
+
+ * src/folderview.c
+ * src/mainwindow.c
+ * src/mimeview.c
+ * src/summaryview.c
+ * src/gtk/quicksearch.c
+ * src/gtk/quicksearch.h
+ Block key events handlers *and* accels while
+ quicksearch is focused
+ (Fixes Bug 534 quick-search bar not accepting certain letters)
+
2004-07-17 [colin] 0.9.12cvs30.1
* src/folder.h
( cvs diff -u -r 1.2504.2.7 -r 1.2504.2.8 ChangeLog.claws; cvs diff -u -r 1.654.2.60 -r 1.654.2.61 configure.ac; cvs diff -u -r 1.83.2.9 -r 1.83.2.10 src/mimeview.c; ) > 0.9.12cvs28.1.patchset
( cvs diff -u -r 1.83.2.10 -r 1.83.2.11 src/mimeview.c; cvs diff -u -r 1.49.2.7 -r 1.49.2.8 src/procmime.c; cvs diff -u -r 1.395.2.18 -r 1.395.2.19 src/summaryview.c; cvs diff -u -r 1.5.2.6 -r 1.5.2.7 src/gtk/menu.c; ) > 0.9.12cvs28.2.patchset
( cvs diff -u -r 1.29.2.1 -r 1.29.2.2 INSTALL; cvs diff -u -r 1.1.2.3 -r 1.1.2.4 commitHelper; cvs diff -u -r 1.87.2.7 -r 1.87.2.8 src/folder.h; cvs diff -u -r 1.207.2.6 -r 1.207.2.7 src/folderview.c; cvs diff -u -r 1.395.2.19 -r 1.395.2.20 src/summaryview.c; ) > 0.9.12cvs28.3.patchset
+( cvs diff -u -r 1.207.2.7 -r 1.207.2.8 src/folderview.c; cvs diff -u -r 1.274.2.9 -r 1.274.2.10 src/mainwindow.c; cvs diff -u -r 1.83.2.11 -r 1.83.2.12 src/mimeview.c; cvs diff -u -r 1.395.2.20 -r 1.395.2.21 src/summaryview.c; cvs diff -u -r 1.1.2.10 -r 1.1.2.11 src/gtk/quicksearch.c; cvs diff -u -r 1.1.2.3 -r 1.1.2.4 src/gtk/quicksearch.h; ) > 0.9.12cvs30.2.patchset
BINARY_AGE=0
EXTRA_VERSION=30
EXTRA_RELEASE=
-EXTRA_GTK2_VERSION=.1
+EXTRA_GTK2_VERSION=.2
if test \( $EXTRA_VERSION -eq 0 \) -o \( "x$EXTRA_RELEASE" != "x" \); then
VERSION=${MAJOR_VERSION}.${MINOR_VERSION}.${MICRO_VERSION}${EXTRA_RELEASE}${EXTRA_GTK2_VERSION}
{
if (!event) return FALSE;
+ if (quicksearch_has_focus(folderview->summaryview->quicksearch))
+ return FALSE;
+
switch (event->keyval) {
case GDK_Return:
if (folderview->selected) {
QuickSearchExecuteCallback callback;
gpointer callback_data;
gboolean running;
+ gboolean has_focus;
};
static void quicksearch_set_running(QuickSearch *quicksearch, gboolean run);
}
+static gboolean searchbar_focus_evt(GtkWidget *widget, GdkEventFocus *event,
+ QuickSearch *quicksearch)
+{
+ quicksearch->has_focus = (event && event->in);
+ return FALSE;
+}
+
+gboolean quicksearch_has_focus(QuickSearch *quicksearch)
+{
+ return quicksearch->has_focus;
+}
+
static gboolean searchbar_pressed(GtkWidget *widget, GdkEventKey *event,
QuickSearch *quicksearch)
{
return TRUE;
};
-/*
-static void summary_searchbar_focus_evt(GtkWidget *widget, GdkEventFocus *event,
- SummaryView *summaryview)
-{
- if (event != NULL && event->in)
- gtk_signal_handler_block_by_func(GTK_OBJECT(summaryview->mainwin->window),
- GTK_SIGNAL_FUNC(mainwindow_key_pressed),
- summaryview->mainwin);
- else
- gtk_signal_handler_unblock_by_func(GTK_OBJECT(summaryview->mainwin->window),
- GTK_SIGNAL_FUNC(mainwindow_key_pressed),
- summaryview->mainwin);
-}
-*/
-
QuickSearch *quicksearch_new()
{
QuickSearch *quicksearch;
G_CALLBACK(searchbar_pressed),
quicksearch);
- /*
- gtk_signal_connect(GTK_OBJECT(GTK_COMBO(search_string_entry)->entry),
+
+ g_signal_connect(GTK_OBJECT(GTK_COMBO(search_string_entry)->entry),
"focus_in_event",
GTK_SIGNAL_FUNC(searchbar_focus_evt),
quicksearch);
- gtk_signal_connect(GTK_OBJECT(GTK_COMBO(search_string_entry)->entry),
+ g_signal_connect(GTK_OBJECT(GTK_COMBO(search_string_entry)->entry),
"focus_out_event",
GTK_SIGNAL_FUNC(searchbar_focus_evt),
quicksearch);
- */
+
quicksearch->hbox_search = hbox_search;
quicksearch->search_type = search_type;
return quicksearch->running;
}
+void quicksearch_pass_key(QuickSearch *quicksearch, guint val, GdkModifierType mod)
+{
+ GtkEntry *entry = GTK_ENTRY(GTK_COMBO(quicksearch->search_string_entry)->entry);
+ gint curpos = gtk_editable_get_position(GTK_EDITABLE(entry));
+ char *str = g_strdup(gtk_entry_get_text(entry));
+ char *begin = str;
+ char *end = NULL;
+ char *new = NULL;
+
+ if (mod == GDK_SHIFT_MASK)
+ val = toupper(val);
+
+ if (curpos < strlen(str)-1) {
+ end = g_strdup(str+curpos);
+ *(str+curpos) = '\0';
+ new = g_strdup_printf("%s%c%s", begin, val, end);
+ gtk_entry_set_text(entry, new);
+ g_free(end);
+ } else {
+ new = g_strdup_printf("%s%c", begin, val);
+ gtk_entry_set_text(entry, new);
+ }
+ g_free(str);
+ g_free(new);
+ gtk_editable_set_position(GTK_EDITABLE(entry), curpos+1);
+
+}
gboolean quicksearch_match(QuickSearch *quicksearch, MsgInfo *msginfo);
gchar *expand_search_string(const gchar *str);
gboolean quicksearch_is_running(QuickSearch *quicksearch);
+gboolean quicksearch_has_focus(QuickSearch *quicksearch);
+void quicksearch_pass_key(QuickSearch *quicksearch, guint val, GdkModifierType mod);
#endif /* QUICKSEARCH_H */
{N_("/_Help/_About"), NULL, about_show, 0, NULL}
};
+static gboolean main_window_accel_activate (GtkAccelGroup *accelgroup,
+ GObject *arg1,
+ guint value,
+ GdkModifierType mod,
+ gpointer user_data)
+{
+ MainWindow *mainwin = (MainWindow *)user_data;
+
+ if (mainwin->summaryview &&
+ mainwin->summaryview->quicksearch &&
+ quicksearch_has_focus(mainwin->summaryview->quicksearch) &&
+ (mod == 0 || mod == GDK_SHIFT_MASK)) {
+ quicksearch_pass_key(mainwin->summaryview->quicksearch, value, mod);
+ return TRUE;
+ }
+ return FALSE;
+}
+
MainWindow *main_window_create(SeparateType type)
{
MainWindow *mainwin;
main_window_update_actions_menu(mainwin);
/* attach accel groups to main window */
-#define ADD_MENU_ACCEL_GROUP_TO_WINDOW(menu,win) \
- gtk_window_add_accel_group \
- (GTK_WINDOW(win), \
- gtk_item_factory_from_widget(menu)->accel_group)
+#define ADD_MENU_ACCEL_GROUP_TO_WINDOW(menu,win) \
+ gtk_window_add_accel_group \
+ (GTK_WINDOW(win), \
+ gtk_item_factory_from_widget(menu)->accel_group); \
+ g_signal_connect(G_OBJECT(gtk_item_factory_from_widget(menu)->accel_group), \
+ "accel_activate", \
+ G_CALLBACK(main_window_accel_activate), mainwin);
+
ADD_MENU_ACCEL_GROUP_TO_WINDOW(summaryview->popupmenu, mainwin->window);
{
MainWindow *mainwin = (MainWindow*) data;
- if (!mainwin || !event) return;
-
+ if (!mainwin || !event)
+ return FALSE;
+
+ if (quicksearch_has_focus(mainwin->summaryview->quicksearch))
+ return FALSE;
+
switch (event->keyval) {
case GDK_Q: /* Quit */
BREAK_ON_MODIFIER_KEY();
app_exit_cb(mainwin, 0, NULL);
- return;
+ return FALSE;
case GDK_space:
if (mainwin->folderview && mainwin->summaryview
&& !mainwin->summaryview->displayed) {
if (!event) return FALSE;
if (!mimeview->opened) return FALSE;
+ summaryview = mimeview->messageview->mainwin->summaryview;
+
+ if (summaryview && quicksearch_has_focus(summaryview->quicksearch))
+ return FALSE;
+
switch (event->keyval) {
case GDK_space:
if (textview_scroll_page(mimeview->textview, FALSE))
}
if (!mimeview->messageview->mainwin) return FALSE;
- summaryview = mimeview->messageview->mainwin->summaryview;
+
summary_pass_key_press_event(summaryview, event);
return TRUE;
}
if (summary_is_locked(summaryview)) return TRUE;
if (!event) return TRUE;
+ if (quicksearch_has_focus(summaryview->quicksearch))
+ return FALSE;
+
switch (event->keyval) {
case GDK_Left: /* Move focus */
adj = gtk_scrolled_window_get_hadjustment