+2002-01-21 [carsten] 0.7.0claws19
+ * src/mainwindow.c
+ * src/menu.[ch]
+ * src/messageview.[ch]
+ * src/summaryview.[ch]
+ changes to shortcuts handling again:
+ + "Q" now controled by mainwin
+ + v/V are now customizable and have slightly
+ different meanings
+ the "button" to minimize the messageview (and maximize
+ the summary view) is a real button now
+ * src/compose.c
+ "Delete Line+" added to Edit/Advanced (this will also
+ delete the '\n')
+
2002-01-20 [melvin] 0.7.0claws18
* src/addressbook.c
MICRO_VERSION=0
INTERFACE_AGE=0
BINARY_AGE=0
-EXTRA_VERSION=claws18
+EXTRA_VERSION=claws19
VERSION=$MAJOR_VERSION.$MINOR_VERSION.$MICRO_VERSION$EXTRA_VERSION
dnl set $target
COMPOSE_CALL_GTK_STEXT_DELETE_FORWARD_WORD,
COMPOSE_CALL_GTK_STEXT_DELETE_BACKWARD_WORD,
COMPOSE_CALL_GTK_STEXT_DELETE_LINE,
+ COMPOSE_CALL_GTK_STEXT_DELETE_LINE_N,
COMPOSE_CALL_GTK_STEXT_DELETE_TO_LINE_END
} ComposeCallGtkStextAction;
{N_("/_Edit/A_dvanced/Delete a word backward"), "<control>w", compose_gtk_stext_action_cb, COMPOSE_CALL_GTK_STEXT_DELETE_BACKWARD_WORD, NULL},
{N_("/_Edit/A_dvanced/Delete a word forward"), "<alt>D", compose_gtk_stext_action_cb, COMPOSE_CALL_GTK_STEXT_DELETE_FORWARD_WORD, NULL},
{N_("/_Edit/A_dvanced/Delete line"), "<control>U", compose_gtk_stext_action_cb, COMPOSE_CALL_GTK_STEXT_DELETE_LINE, NULL},
+ {N_("/_Edit/A_dvanced/Delete line+"), NULL, compose_gtk_stext_action_cb, COMPOSE_CALL_GTK_STEXT_DELETE_LINE_N, NULL},
{N_("/_Edit/A_dvanced/Delete to end of line"), "<control>K", compose_gtk_stext_action_cb, COMPOSE_CALL_GTK_STEXT_DELETE_TO_LINE_END, NULL},
{N_("/_Edit/---"), NULL, NULL, 0, "<Separator>"},
#if USE_PSPELL
case COMPOSE_CALL_GTK_STEXT_DELETE_LINE:
gtk_stext_delete_line(GTK_STEXT(compose->focused_editable));
break;
+ case COMPOSE_CALL_GTK_STEXT_DELETE_LINE_N:
+ gtk_stext_delete_line(GTK_STEXT(compose->focused_editable));
+ gtk_stext_delete_forward_character(GTK_STEXT(compose->focused_editable));
+ break;
case COMPOSE_CALL_GTK_STEXT_DELETE_TO_LINE_END:
gtk_stext_delete_to_line_end(GTK_STEXT(compose->focused_editable));
break;
static void toggle_statusbar_cb (MainWindow *mainwin,
guint action,
GtkWidget *widget);
+static void toggle_expand_summaryview_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+static void toggle_expand_messageview_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
static void separate_widget_cb (GtkCheckMenuItem *checkitem,
guint action,
GtkWidget *widget);
ToolbarStyle style,
ComposeButtonType type);
+static void menuitem_expandsummaryview_statechanged (GtkWidget *widget,
+ GtkStateType state,
+ gpointer data);
+
+static void key_pressed (GtkWidget *widget,
+ GdkEventKey *event,
+ gpointer data);
+
#define SEPARATE_ACTION 667
static GtkItemFactoryEntry mainwin_entries[] =
{N_("/_View"), NULL, NULL, 0, "<Branch>"},
{N_("/_View/_Folder tree"), NULL, NULL, SEPARATE_ACTION + SEPARATE_FOLDER, "<ToggleItem>"},
{N_("/_View/_Message view"), NULL, NULL, SEPARATE_ACTION + SEPARATE_MESSAGE, "<ToggleItem>"},
+ {N_("/_View/E_xpand Summary View"), "V", toggle_expand_summaryview_cb, 0, "<ToggleItem>"},
+ {N_("/_View/Ex_pand Message View"), "<shift>V", toggle_expand_messageview_cb, 0, "<ToggleItem>"},
{N_("/_View/_Toolbar"), NULL, NULL, 0, "<Branch>"},
{N_("/_View/_Toolbar/Icon _and text"), NULL, toggle_toolbar_cb, TOOLBAR_BOTH, "<RadioItem>"},
{N_("/_View/_Toolbar/_Icon"), NULL, toggle_toolbar_cb, TOOLBAR_ICON, "/View/Toolbar/Icon and text"},
GTK_SIGNAL_FUNC(manage_window_focus_in), NULL);
gtk_signal_connect(GTK_OBJECT(window), "focus_out_event",
GTK_SIGNAL_FUNC(manage_window_focus_out), NULL);
+ gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
+ GTK_SIGNAL_FUNC(key_pressed), mainwin);
gtk_widget_realize(window);
gtk_widget_add_events(window, GDK_KEY_PRESS_MASK|GDK_KEY_RELEASE_MASK);
gtk_object_set_data(GTK_OBJECT(menuitem), "mainwindow", mainwin);
gtk_signal_connect(GTK_OBJECT(menuitem), "toggled", GTK_SIGNAL_FUNC(separate_widget_cb),
GUINT_TO_POINTER(SEPARATE_MESSAGE));
-
-
+
+ menuitem = gtk_item_factory_get_item(ifactory, "/View/Expand Summary View");
+ gtk_signal_connect(GTK_OBJECT(menuitem), "state-changed", GTK_SIGNAL_FUNC(menuitem_expandsummaryview_statechanged),
+ mainwin);
+
menu_set_sensitive(ifactory, "/View/Thread view",
prefs_common.enable_thread ? FALSE : TRUE);
menu_set_sensitive(ifactory, "/View/Unthread view",
GtkWidget *vpaned;
GtkWidget *vbox_body = mainwin->vbox_body;
GtkItemFactory *ifactory=gtk_item_factory_from_widget(mainwin->menubar);
+ GtkWidget *menuitem;
debug_print(_("Setting widgets..."));
menu_set_sensitive(ifactory, "/View/Message view", TRUE);
menu_set_sensitive(ifactory, "/View/Folder tree", TRUE);
+ menu_set_sensitive(ifactory, "/View/Expand Summary View", TRUE);
+ menu_set_sensitive(ifactory, "/View/Expand Message View", TRUE);
+ menuitem = gtk_item_factory_get_widget(ifactory, "/View/Expand Message View");
+ gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), FALSE);
mainwin->win.sep_none.hpaned = hpaned;
mainwin->win.sep_none.vpaned = vpaned;
menu_set_sensitive(ifactory, "/View/Message view", TRUE);
menu_set_sensitive(ifactory, "/View/Folder tree", TRUE);
-
+ menu_set_sensitive(ifactory, "/View/Expand Summary View", FALSE);
+ menu_set_sensitive(ifactory, "/View/Expand Message View", FALSE);
+
mainwin->win.sep_message.messagewin = messagewin;
mainwin->win.sep_message.hpaned = hpaned;
}
}
+static void toggle_expand_summaryview_cb(MainWindow *mainwin, guint action, GtkWidget *widget)
+{
+ summary_toggle_view_real(mainwin->summaryview);
+}
+
+static void toggle_expand_messageview_cb(MainWindow *mainwin, guint action, GtkWidget *widget)
+{
+ messageview_toggle_view_real(mainwin->messageview);
+}
+
static void separate_widget_cb(GtkCheckMenuItem *checkitem, guint action, GtkWidget *widget)
{
prefs_common.toolbar_style,
compose_btn_type);
}
+
+static void menuitem_expandsummaryview_statechanged (GtkWidget *widget, GtkStateType state, gpointer data)
+{
+ MainWindow *mainwin = (MainWindow*) data;
+
+ if (!mainwin) return;
+
+ gtk_widget_set_sensitive(GTK_WIDGET(mainwin->summaryview->toggle_view_btn), GTK_WIDGET_IS_SENSITIVE(widget));
+}
+
+#define BREAK_ON_MODIFIER_KEY() \
+ if ((event->state & (GDK_MOD1_MASK|GDK_CONTROL_MASK)) != 0) break
+
+static void key_pressed (GtkWidget *widget, GdkEventKey *event, gpointer data)
+{
+ MainWindow *mainwin = (MainWindow*) data;
+
+ if (!mainwin || !event) return;
+
+ switch (event->keyval) {
+ case GDK_Q: /* Quit */
+ BREAK_ON_MODIFIER_KEY();
+
+ app_exit_cb(mainwin, 0, NULL);
+ return;
+ default:
+ break;
+ }
+}
+
+#undef BREAK_ON_MODIFIER_KEY
gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM(widget), active);
}
+void menu_toggle_toggle(GtkItemFactory *ifactory, const gchar *path)
+{
+ GtkWidget *widget;
+
+ g_return_if_fail(ifactory != NULL);
+
+ widget = gtk_item_factory_get_item(ifactory, path);
+ gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(widget), !((GTK_CHECK_MENU_ITEM(widget))->active));
+}
+
void menu_button_position(GtkMenu *menu, gint *x, gint *y, gpointer user_data)
{
GtkWidget *button;
void menu_set_toggle (GtkItemFactory *ifactory,
const gchar *path,
gboolean active);
+void menu_toggle_toggle (GtkItemFactory *ifactory,
+ const gchar *path);
void menu_button_position (GtkMenu *menu,
gint *x,
gint *y,
static void key_pressed (GtkWidget *widget,
GdkEventKey *event,
MessageView *messageview);
+static void messageview_toggle_view(MessageView *messageview);
MessageView *messageview_create(void)
{
if (event && event->keyval == GDK_Escape && messageview->window)
gtk_widget_destroy(messageview->window);
}
+
+static void messageview_toggle_view(MessageView *messageview)
+{
+ MainWindow *mainwin = messageview->mainwin;
+ GtkItemFactory *ifactory;
+
+ if (!mainwin) return;
+
+ ifactory = gtk_item_factory_from_widget(mainwin->menubar);
+ menu_toggle_toggle(ifactory, "/View/Expand Summary View");
+}
+
+void messageview_toggle_view_real(MessageView *messageview)
+{
+ MainWindow *mainwin = messageview->mainwin;
+ union CompositeWin *cwin = &mainwin->win;
+ GtkWidget *vpaned = NULL;
+ GtkWidget *container = NULL;
+ GtkItemFactory *ifactory =gtk_item_factory_from_widget(mainwin->menubar);
+
+ switch (mainwin->type) {
+ case SEPARATE_NONE:
+ vpaned = cwin->sep_none.vpaned;
+ container = cwin->sep_none.hpaned;
+ break;
+ case SEPARATE_FOLDER:
+ vpaned = cwin->sep_folder.vpaned;
+ container = mainwin->vbox_body;
+ break;
+ case SEPARATE_MESSAGE:
+ case SEPARATE_BOTH:
+ return;
+ }
+
+ if (vpaned->parent != NULL) {
+ gtk_widget_ref(vpaned);
+ gtkut_container_remove(GTK_CONTAINER(container), vpaned);
+ gtk_widget_reparent(GTK_WIDGET_PTR(messageview), container);
+ menu_set_sensitive(ifactory, "/View/Expand Summary View", FALSE);
+ gtk_widget_grab_focus(GTK_WIDGET(messageview->textview->text));
+ } else {
+ gtk_widget_reparent(GTK_WIDGET_PTR(messageview), vpaned);
+ gtk_container_add(GTK_CONTAINER(container), vpaned);
+ gtk_widget_unref(vpaned);
+ menu_set_sensitive(ifactory, "/View/Expand Summary View", TRUE);
+ gtk_widget_grab_focus(GTK_WIDGET(mainwin->summaryview->ctree));
+ }
+}
void messageview_select_all (MessageView *messageview);
void messageview_set_position (MessageView *messageview,
gint pos);
+void messageview_toggle_view_real(MessageView *messageview);
gboolean messageview_search_string (MessageView *messageview,
const gchar *str,
static void summary_display_msg (SummaryView *summaryview,
GtkCTreeNode *row,
gboolean new_window);
-static void summary_toggle_view (SummaryView *summaryview);
+
static void summary_set_row_marks (SummaryView *summaryview,
GtkCTreeNode *row);
static void summaryview_subject_filter_init (PrefsFolderItem *prefs);
static GtkWidget *summary_ctree_create (SummaryView *summaryview);
+static void summary_toggle_view(SummaryView *summarview);
+
/* callback functions */
-static void summary_toggle_pressed (GtkWidget *eventbox,
- GdkEventButton *event,
- SummaryView *summaryview);
+static void summary_toggle_view_cb (GtkWidget *widget,
+ gpointer data);
static void summary_button_pressed (GtkWidget *ctree,
GdkEventButton *event,
SummaryView *summaryview);
GtkWidget *statlabel_folder;
GtkWidget *statlabel_select;
GtkWidget *statlabel_msgs;
- GtkWidget *toggle_eventbox;
- GtkWidget *toggle_arrow;
+ GtkWidget *toggle_view_btn;
+ GtkWidget *toggle_view_arrow;
GtkWidget *popupmenu;
GtkItemFactory *popupfactory;
gint n_entries;
statlabel_select = gtk_label_new("");
gtk_box_pack_start(GTK_BOX(hbox), statlabel_select, FALSE, FALSE, 16);
- /* toggle view button */
- toggle_eventbox = gtk_event_box_new();
- gtk_box_pack_end(GTK_BOX(hbox), toggle_eventbox, FALSE, FALSE, 4);
- toggle_arrow = gtk_arrow_new(GTK_ARROW_DOWN, GTK_SHADOW_OUT);
- gtk_container_add(GTK_CONTAINER(toggle_eventbox), toggle_arrow);
- gtk_signal_connect(GTK_OBJECT(toggle_eventbox), "button_press_event",
- GTK_SIGNAL_FUNC(summary_toggle_pressed),
- summaryview);
+ /* toggle view buttons */
+ toggle_view_btn = gtk_button_new();
+ gtk_box_pack_end(GTK_BOX(hbox), toggle_view_btn, FALSE, FALSE, 0);
+ gtk_button_set_relief(GTK_BUTTON(toggle_view_btn), GTK_RELIEF_NONE);
+ toggle_view_arrow=gtk_arrow_new(GTK_ARROW_DOWN, GTK_SHADOW_OUT);
+ gtk_container_add(GTK_CONTAINER(toggle_view_btn), toggle_view_arrow);
+ gtk_signal_connect(GTK_OBJECT(toggle_view_btn), "clicked",
+ GTK_SIGNAL_FUNC(summary_toggle_view_cb), summaryview);
statlabel_msgs = gtk_label_new("");
gtk_box_pack_end(GTK_BOX(hbox), statlabel_msgs, FALSE, FALSE, 4);
summaryview->statlabel_folder = statlabel_folder;
summaryview->statlabel_select = statlabel_select;
summaryview->statlabel_msgs = statlabel_msgs;
- summaryview->toggle_eventbox = toggle_eventbox;
- summaryview->toggle_arrow = toggle_arrow;
+ summaryview->toggle_view_btn = toggle_view_btn;
+ summaryview->toggle_view_arrow = toggle_view_arrow;
summaryview->popupmenu = popupmenu;
summaryview->popupfactory = popupfactory;
summaryview->msg_is_toggled_on = TRUE;
}
static void summary_toggle_view(SummaryView *summaryview)
+{
+ MainWindow *mainwin = summaryview->mainwin;
+ GtkItemFactory *ifactory;
+
+ if (!mainwin) return;
+
+ ifactory = gtk_item_factory_from_widget(mainwin->menubar);
+ menu_toggle_toggle(ifactory, "/View/Expand Summary View");
+}
+
+void summary_toggle_view_real(SummaryView *summaryview)
{
MainWindow *mainwin = summaryview->mainwin;
union CompositeWin *cwin = &mainwin->win;
GtkWidget *vpaned = NULL;
GtkWidget *container = NULL;
-
+ GtkWidget *toggle_view_btn;
+ GtkWidget *toggle_view_arrow;
+ GtkItemFactory *ifactory = gtk_item_factory_from_widget(mainwin->menubar);
+
switch (mainwin->type) {
case SEPARATE_NONE:
vpaned = cwin->sep_none.vpaned;
gtk_widget_ref(vpaned);
gtkut_container_remove(GTK_CONTAINER(container), vpaned);
gtk_widget_reparent(GTK_WIDGET_PTR(summaryview), container);
- gtk_arrow_set(GTK_ARROW(summaryview->toggle_arrow),
- GTK_ARROW_UP, GTK_SHADOW_OUT);
+
+ gtk_widget_destroy(summaryview->toggle_view_arrow);
+ gtk_widget_destroy(summaryview->toggle_view_btn);
+
+ toggle_view_btn = gtk_button_new();
+ gtk_box_pack_end(GTK_BOX(summaryview->hbox), toggle_view_btn, FALSE, FALSE, 0);
+ gtk_box_reorder_child(GTK_BOX(summaryview->hbox), toggle_view_btn, 0);
+ gtk_button_set_relief(GTK_BUTTON(toggle_view_btn), GTK_RELIEF_NONE);
+ toggle_view_arrow=gtk_arrow_new(GTK_ARROW_UP, GTK_SHADOW_OUT);
+ gtk_container_add(GTK_CONTAINER(toggle_view_btn), toggle_view_arrow);
+ gtk_signal_connect(GTK_OBJECT(toggle_view_btn), "clicked",
+ GTK_SIGNAL_FUNC(summary_toggle_view_cb), summaryview);
+ gtk_widget_show_all(toggle_view_btn);
+ menu_set_sensitive(ifactory, "/View/Expand Message View", FALSE);
} else {
summaryview->msg_is_toggled_on = TRUE;
gtk_widget_reparent(GTK_WIDGET_PTR(summaryview), vpaned);
gtk_container_add(GTK_CONTAINER(container), vpaned);
gtk_widget_unref(vpaned);
- gtk_arrow_set(GTK_ARROW(summaryview->toggle_arrow),
- GTK_ARROW_DOWN, GTK_SHADOW_OUT);
+
+ gtk_widget_destroy(summaryview->toggle_view_arrow);
+ gtk_widget_destroy(summaryview->toggle_view_btn);
+
+ toggle_view_btn = gtk_button_new();
+ gtk_box_pack_end(GTK_BOX(summaryview->hbox), toggle_view_btn, FALSE, FALSE, 0);
+ gtk_box_reorder_child(GTK_BOX(summaryview->hbox), toggle_view_btn, 0);
+ gtk_button_set_relief(GTK_BUTTON(toggle_view_btn), GTK_RELIEF_NONE);
+ toggle_view_arrow=gtk_arrow_new(GTK_ARROW_DOWN, GTK_SHADOW_OUT);
+ gtk_container_add(GTK_CONTAINER(toggle_view_btn), toggle_view_arrow);
+ gtk_signal_connect(GTK_OBJECT(toggle_view_btn), "clicked",
+ GTK_SIGNAL_FUNC(summary_toggle_view_cb), summaryview);
+ gtk_widget_show_all(toggle_view_btn);
+ menu_set_sensitive(ifactory, "/View/Expand Message View", TRUE);
}
gtk_widget_grab_focus(summaryview->ctree);
+
+ summaryview->toggle_view_btn = toggle_view_btn;
+ summaryview->toggle_view_arrow = toggle_view_arrow;
}
static gboolean summary_search_unread_recursive(GtkCTree *ctree,
/* callback functions */
-static void summary_toggle_pressed(GtkWidget *eventbox, GdkEventButton *event,
- SummaryView *summaryview)
+static void summary_toggle_view_cb(GtkWidget *button,
+ gpointer data)
{
- if (!event)
- return;
-
+ SummaryView *summaryview = (SummaryView *) data;
+
if (!summaryview->msg_is_toggled_on && summaryview->selected)
summary_display_msg(summaryview, summaryview->selected, FALSE);
else
if (!event) return;
switch (event->keyval) {
- case GDK_Q: /* Quit */
- RETURN_IF_LOCKED();
- BREAK_ON_MODIFIER_KEY();
-
- if (prefs_common.confirm_on_exit) {
- if (alertpanel(_("Exit"), _("Exit this program?"),
- _("OK"), _("Cancel"), NULL)
- == G_ALERTDEFAULT) {
- manage_window_focus_in
- (summaryview->mainwin->window,
- NULL, NULL);
- app_will_exit(NULL, summaryview->mainwin);
- }
- }
- return;
case GDK_Escape:
gtk_widget_grab_focus(summaryview->folderview->ctree);
return;
FALSE))
summary_select_next_unread(summaryview);
break;
- case GDK_v: /* Toggle summary mode / message mode */
- case GDK_V:
- BREAK_ON_MODIFIER_KEY();
-
- if (!summaryview->msg_is_toggled_on && summaryview->selected)
- summary_display_msg(summaryview,
- summaryview->selected, FALSE);
- else
- summary_toggle_view(summaryview);
- break;
case GDK_Return: /* Scroll up/down one line */
if (summaryview->displayed != summaryview->selected) {
summary_display_msg(summaryview,
GtkWidget *statlabel_folder;
GtkWidget *statlabel_select;
GtkWidget *statlabel_msgs;
- GtkWidget *toggle_eventbox;
- GtkWidget *toggle_arrow;
+ GtkWidget *toggle_view_btn;
+ GtkWidget *toggle_view_arrow;
GtkWidget *popupmenu;
GtkWidget *colorlabel_menu;
void summary_toggle_show_read_messages (SummaryView *summaryview);
+void summary_toggle_view_real (SummaryView *summaryview);
+
#endif /* __SUMMARY_H__ */