commit 3c8f5d6e9e699b83877a991bdff6ad344480d0b1
parent 3d765a3396a0fb59802723fc9319a3c0f50b0056
Author: Oliver Lowe <o@olowe.co>
Date: Sun, 24 Aug 2025 14:37:19 +1000
Use GTK default scrolling in message, text views
Diffstat:
11 files changed, 8 insertions(+), 327 deletions(-)
diff --git a/src/gtk/gtkutils.c b/src/gtk/gtkutils.c
@@ -1079,66 +1079,6 @@ GtkWidget *gtkut_sc_combobox_create(GtkWidget *eventbox, gboolean focus_on_click
return combobox;
}
-gboolean gtkutils_scroll_page(GtkWidget *widget, GtkAdjustment *vadj, gboolean up)
-{
- gfloat upper;
- gfloat page_incr;
- gfloat old_value;
-
- page_incr = gtk_adjustment_get_page_increment(vadj);
- if (prefs_common.scroll_halfpage)
- page_incr /= 2;
-
- old_value = gtk_adjustment_get_value(vadj);
- if (!up) {
- upper = gtk_adjustment_get_upper(vadj) - gtk_adjustment_get_page_size(vadj);
- if (old_value < upper) {
- old_value += page_incr;
- old_value = MIN(old_value, upper);
- gtk_adjustment_set_value(vadj, old_value);
- g_signal_emit_by_name(G_OBJECT(vadj),
- "value_changed", 0);
- } else
- return FALSE;
- } else {
- if (old_value > 0.0) {
- old_value -= page_incr;
- old_value = MAX(old_value, 0.0);
- gtk_adjustment_set_value(vadj, old_value);
- g_signal_emit_by_name(G_OBJECT(vadj),
- "value_changed", 0);
- } else
- return FALSE;
- }
- return TRUE;
-}
-
-void gtkutils_scroll_one_line(GtkWidget *widget, GtkAdjustment *vadj, gboolean up)
-{
- gfloat upper;
- gfloat old_value;
-
- old_value = gtk_adjustment_get_value(vadj);
- if (!up) {
- upper = gtk_adjustment_get_upper(vadj) - gtk_adjustment_get_page_size(vadj);
- if (old_value < upper) {
- old_value += gtk_adjustment_get_step_increment(vadj);
- old_value = MIN(old_value, upper);
- gtk_adjustment_set_value(vadj, old_value);
- g_signal_emit_by_name(G_OBJECT(vadj),
- "value_changed", 0);
- }
- } else {
- if (old_value > 0.0) {
- old_value -= gtk_adjustment_get_step_increment(vadj);
- old_value = MAX(old_value, 0.0);
- gtk_adjustment_set_value(vadj, old_value);
- g_signal_emit_by_name(G_OBJECT(vadj),
- "value_changed", 0);
- }
- }
-}
-
gboolean gtkut_tree_model_text_iter_prev(GtkTreeModel *model,
GtkTreeIter *iter,
const gchar* text)
diff --git a/src/gtk/gtkutils.h b/src/gtk/gtkutils.h
@@ -183,12 +183,6 @@ gboolean get_tag_range(GtkTextIter *iter,
GtkWidget *face_get_from_header(const gchar *o_face);
GtkWidget *gtkut_sc_combobox_create(GtkWidget *eventbox, gboolean focus_on_click);
-void gtkutils_scroll_one_line (GtkWidget *widget,
- GtkAdjustment *vadj,
- gboolean up);
-gboolean gtkutils_scroll_page (GtkWidget *widget,
- GtkAdjustment *vadj,
- gboolean up);
gboolean gtkut_tree_model_text_iter_prev(GtkTreeModel *model,
GtkTreeIter *iter,
diff --git a/src/messageview.c b/src/messageview.c
@@ -1381,10 +1381,8 @@ static gboolean key_pressed(GtkWidget *widget, GdkEventKey *event,
messageview->window) {
MsgInfo *new_msginfo = summary_get_selected_msg(messageview->mainwin->summaryview);
messageview_show(messageview, new_msginfo, messageview->all_headers);
- return FALSE;
}
-
- return mimeview_pass_key_press_event(messageview->mimeview, event);
+ return FALSE;
}
static void select_account_cb(GtkWidget *w, gpointer data)
diff --git a/src/mimeview.c b/src/mimeview.c
@@ -81,9 +81,6 @@ static void mimeview_selected (GtkTreeSelection *selection,
static gint mimeview_button_pressed (GtkWidget *widget,
GdkEventButton *event,
MimeView *mimeview);
-static gint mimeview_key_pressed (GtkWidget *widget,
- GdkEventKey *event,
- MimeView *mimeview);
static void mimeview_drag_data_get (GtkWidget *widget,
GdkDragContext *drag_context,
@@ -349,8 +346,6 @@ MimeView *mimeview_create(MainWindow *mainwin)
G_CALLBACK(mimeview_selected), mimeview);
g_signal_connect(G_OBJECT(ctree), "button_release_event",
G_CALLBACK(mimeview_button_pressed), mimeview);
- g_signal_connect(G_OBJECT(ctree), "key_press_event",
- G_CALLBACK(mimeview_key_pressed), mimeview);
g_signal_connect(G_OBJECT(ctree), "drag_data_get",
G_CALLBACK(mimeview_drag_data_get), mimeview);
@@ -1490,12 +1485,6 @@ static gboolean part_button_pressed(MimeView *mimeview, GdkEventButton *event,
return FALSE;
}
-
-gboolean mimeview_pass_key_press_event(MimeView *mimeview, GdkEventKey *event)
-{
- return mimeview_key_pressed(mimeview->ctree, event, mimeview);
-}
-
void mimeview_select_next_part(MimeView *mimeview)
{
GtkTreeView *ctree = GTK_TREE_VIEW(mimeview->ctree);
@@ -1568,56 +1557,6 @@ skip:
#define BREAK_ON_MODIFIER_KEY() \
if ((event->state & (GDK_MOD1_MASK|GDK_CONTROL_MASK)) != 0) break
-static gint mimeview_key_pressed(GtkWidget *widget, GdkEventKey *event,
- MimeView *mimeview)
-{
- SummaryView *summaryview;
-
- 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_KEY_Home:
- case GDK_KEY_End:
- textview_scroll_max(mimeview->textview,
- (event->keyval == GDK_KEY_Home));
- return TRUE;
- case GDK_KEY_Page_Down:
- case GDK_KEY_space:
- if (mimeview_scroll_page(mimeview,
- (event->state & GDK_SHIFT_MASK) != 0))
- return TRUE;
-
- if (!(event->state & GDK_SHIFT_MASK))
- mimeview_select_next_part(mimeview);
- return TRUE;
- case GDK_KEY_Page_Up:
- case GDK_KEY_BackSpace:
- mimeview_scroll_page(mimeview, TRUE);
- return TRUE;
- case GDK_KEY_Return:
- case GDK_KEY_KP_Enter:
- mimeview_scroll_one_line(mimeview,
- (event->state & GDK_MOD1_MASK) != 0);
- return TRUE;
- case GDK_KEY_Up:
- case GDK_KEY_Down:
- mimeview_scroll_one_line(mimeview, (event->keyval == GDK_KEY_Up));
- return TRUE;
- default:
- break;
- }
-
- if (mimeview->messageview->new_window) return FALSE;
-
- return summary_pass_key_press_event(summaryview, event);
-}
-
static void mimeview_drag_data_get(GtkWidget *widget,
GdkDragContext *drag_context,
GtkSelectionData *selection_data,
@@ -2342,22 +2281,6 @@ static gint icon_key_pressed(GtkWidget *button, GdkEventKey *event,
if (!event) return FALSE;
switch (event->keyval) {
- case GDK_KEY_space:
- if (mimeview_scroll_page(mimeview, FALSE))
- return TRUE;
-
- mimeview_select_next_part(mimeview);
- return TRUE;
-
- break;
- case GDK_KEY_BackSpace:
- mimeview_scroll_page(mimeview, TRUE);
- return TRUE;
- case GDK_KEY_Return:
- case GDK_KEY_KP_Enter:
- mimeview_scroll_one_line(mimeview,
- (event->state & GDK_MOD1_MASK) != 0);
- return TRUE;
case GDK_KEY_y:
BREAK_ON_MODIFIER_KEY();
mimeview_save_as(mimeview);
@@ -2773,26 +2696,3 @@ void mimeview_handle_cmd(MimeView *mimeview, const gchar *cmd, GdkEventButton *e
g_free(buf);
}
}
-
-gboolean mimeview_scroll_page(MimeView *mimeview, gboolean up)
-{
- if (mimeview->type == MIMEVIEW_TEXT)
- return textview_scroll_page(mimeview->textview, up);
- else if (mimeview->mimeviewer) {
- MimeViewer *mimeviewer = mimeview->mimeviewer;
- if (mimeviewer->scroll_page)
- return mimeviewer->scroll_page(mimeviewer, up);
- }
- return TRUE;
-}
-
-void mimeview_scroll_one_line(MimeView *mimeview, gboolean up)
-{
- if (mimeview->type == MIMEVIEW_TEXT)
- textview_scroll_one_line(mimeview->textview, up);
- else if (mimeview->mimeviewer) {
- MimeViewer *mimeviewer = mimeview->mimeviewer;
- if (mimeviewer->scroll_one_line)
- mimeviewer->scroll_one_line(mimeviewer, up);
- }
-}
diff --git a/src/mimeview.h b/src/mimeview.h
@@ -107,8 +107,6 @@ struct _MimeViewer
void (*clear_viewer) (MimeViewer *);
void (*destroy_viewer) (MimeViewer *);
gchar *(*get_selection) (MimeViewer *);
- gboolean (*scroll_page) (MimeViewer *, gboolean up);
- void (*scroll_one_line) (MimeViewer *, gboolean up);
gboolean (*text_search) (MimeViewer *, gboolean backward,
const gchar *str,
gboolean case_sensitive);
@@ -147,10 +145,6 @@ void mimeview_handle_cmd (MimeView *mimeview,
gpointer data);
void mimeview_select_mimepart_icon (MimeView *mimeview,
MimeInfo *partinfo);
-gboolean mimeview_scroll_page (MimeView *mimeview,
- gboolean up);
-void mimeview_scroll_one_line (MimeView *mimeview,
- gboolean up);
gint mimeview_get_selected_part_num (MimeView *mimeview);
void mimeview_select_part_num (MimeView *mimeview,
gint i);
diff --git a/src/prefs_common.c b/src/prefs_common.c
@@ -508,8 +508,6 @@ static PrefParam param[] = {
{"never_send_retrcpt", "FALSE", &prefs_common.never_send_retrcpt, P_BOOL,
NULL, NULL, NULL},
- {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
- NULL, NULL, NULL},
{"hide_quoted", "TRUE",
&prefs_common.hide_quoted, P_BOOL,
NULL, NULL, NULL},
diff --git a/src/prefs_common.h b/src/prefs_common.h
@@ -326,7 +326,6 @@ struct _PrefsCommon
gint line_space;
gboolean render_html;
gboolean promote_html_part;
- gboolean scroll_halfpage;
gboolean hide_quoted;
gboolean respect_flowed_format;
gboolean show_all_headers;
diff --git a/src/prefs_message.c b/src/prefs_message.c
@@ -54,7 +54,6 @@ typedef struct _MessagePage
GtkWidget *checkbtn_promote_html_part;
GtkWidget *spinbtn_linespc;
- GtkWidget *checkbtn_halfpage;
GtkWidget *checkbtn_hide_quoted;
GtkWidget *checkbtn_attach_desc;
@@ -84,7 +83,6 @@ static void prefs_message_create_widget(PrefsPage *_page, GtkWindow *window,
GtkWidget *vbox_scr;
GtkWidget *hbox_scr;
GtkWidget *label_scr;
- GtkWidget *checkbtn_halfpage;
GtkWidget *checkbtn_hide_quoted;
GtkWidget *checkbtn_attach_desc;
@@ -156,9 +154,6 @@ static void prefs_message_create_widget(PrefsPage *_page, GtkWindow *window,
gtk_widget_show_all (hbox1);
vbox_scr = gtkut_get_options_frame(vbox1, &frame, _("Scroll"));
-
- PACK_CHECK_BUTTON(vbox_scr, checkbtn_halfpage, _("Half page"));
-
hbox1 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 32);
gtk_widget_show (hbox1);
gtk_box_pack_start (GTK_BOX (vbox_scr), hbox1, FALSE, TRUE, 0);
@@ -200,8 +195,6 @@ static void prefs_message_create_widget(PrefsPage *_page, GtkWindow *window,
prefs_common.promote_html_part);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_hide_quoted),
prefs_common.hide_quoted);
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_halfpage),
- prefs_common.scroll_halfpage);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_attach_desc),
prefs_common.attach_desc);
gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinbtn_linespc),
@@ -215,7 +208,6 @@ static void prefs_message_create_widget(PrefsPage *_page, GtkWindow *window,
prefs_message->checkbtn_promote_html_part = checkbtn_promote_html_part;
prefs_message->spinbtn_linespc = spinbtn_linespc;
prefs_message->checkbtn_hide_quoted = checkbtn_hide_quoted;
- prefs_message->checkbtn_halfpage = checkbtn_halfpage;
prefs_message->checkbtn_attach_desc = checkbtn_attach_desc;
prefs_message->page.widget = vbox1;
@@ -235,8 +227,6 @@ static void prefs_message_save(PrefsPage *_page)
GTK_TOGGLE_BUTTON(page->checkbtn_html));
prefs_common.promote_html_part = gtk_toggle_button_get_active(
GTK_TOGGLE_BUTTON(page->checkbtn_promote_html_part));
- prefs_common.scroll_halfpage = gtk_toggle_button_get_active(
- GTK_TOGGLE_BUTTON(page->checkbtn_halfpage));
prefs_common.hide_quoted = gtk_toggle_button_get_active(
GTK_TOGGLE_BUTTON(page->checkbtn_hide_quoted));
prefs_common.attach_desc = gtk_toggle_button_get_active(
diff --git a/src/summaryview.c b/src/summaryview.c
@@ -5926,40 +5926,27 @@ static gboolean summary_key_pressed(GtkWidget *widget, GdkEventKey *event,
if (summaryview->selected) {
gboolean handled = FALSE;
switch (event->keyval) {
- case GDK_KEY_space: /* Page down or go to the next */
+ case GDK_KEY_space:
handled = TRUE;
if (event->state & GDK_CONTROL_MASK) {
handled = FALSE;
break;
}
- if (event->state & GDK_SHIFT_MASK)
- mimeview_scroll_page(messageview->mimeview, TRUE);
if (summaryview->displayed != summaryview->selected) {
- summary_display_msg(summaryview,
- summaryview->selected);
+ summary_display_msg(summaryview, summaryview->selected);
} else {
if (mod_pressed) {
- if (!mimeview_scroll_page(messageview->mimeview, TRUE))
- summary_select_prev_unread(summaryview);
+ summary_select_prev_unread(summaryview);
} else {
- if (!mimeview_scroll_page(messageview->mimeview, FALSE))
- summary_select_next_unread(summaryview);
+ summary_select_next_unread(summaryview);
}
}
break;
- case GDK_KEY_BackSpace: /* Page up */
- handled = TRUE;
- mimeview_scroll_page(messageview->mimeview, TRUE);
- break;
- case GDK_KEY_Return: /* Scroll up/down one line */
+ case GDK_KEY_Return:
case GDK_KEY_KP_Enter:
handled = TRUE;
- if (summaryview->displayed != summaryview->selected) {
- summary_display_msg(summaryview,
- summaryview->selected);
- break;
- }
- mimeview_scroll_one_line(messageview->mimeview, mod_pressed);
+ if (summaryview->displayed != summaryview->selected)
+ summary_display_msg(summaryview, summaryview->selected);
break;
}
diff --git a/src/textview.c b/src/textview.c
@@ -150,9 +150,6 @@ static GPtrArray *textview_scan_header (TextView *textview,
static void textview_show_header (TextView *textview,
GPtrArray *headers);
-static gint textview_key_pressed (GtkWidget *widget,
- GdkEventKey *event,
- TextView *textview);
static gboolean textview_motion_notify (GtkWidget *widget,
GdkEventMotion *motion,
TextView *textview);
@@ -264,8 +261,6 @@ TextView *textview_create(void)
gtk_container_add(GTK_CONTAINER(scrolledwin), text);
- g_signal_connect(G_OBJECT(text), "key-press-event",
- G_CALLBACK(textview_key_pressed), textview);
g_signal_connect(G_OBJECT(text), "motion-notify-event",
G_CALLBACK(textview_motion_notify), textview);
g_signal_connect(G_OBJECT(text), "leave-notify-event",
@@ -1985,114 +1980,6 @@ gboolean textview_search_string_backward(TextView *textview, const gchar *str,
return gtkut_text_view_search_string_backward(text, str, case_sens);
}
-void textview_scroll_one_line(TextView *textview, gboolean up)
-{
- GtkTextView *text = GTK_TEXT_VIEW(textview->text);
- GtkAdjustment *vadj = gtk_scrollable_get_vadjustment(GTK_SCROLLABLE(text));
-
- gtkutils_scroll_one_line(GTK_WIDGET(text), vadj, up);
-}
-
-gboolean textview_scroll_page(TextView *textview, gboolean up)
-{
- GtkTextView *text = GTK_TEXT_VIEW(textview->text);
- GtkAdjustment *vadj = gtk_scrollable_get_vadjustment(GTK_SCROLLABLE(text));
-
- return gtkutils_scroll_page(GTK_WIDGET(text), vadj, up);
-}
-
-void textview_scroll_max(TextView *textview, gboolean up)
-{
- GtkTextBuffer *buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview->text));
- GtkTextIter iter;
-
- if (up) {
- gtk_text_buffer_get_start_iter(buffer, &iter);
- gtk_text_view_scroll_to_iter(GTK_TEXT_VIEW(textview->text),
- &iter, 0.0, TRUE, 0.0, 1.0);
-
- } else {
- gtk_text_buffer_get_end_iter(buffer, &iter);
- gtk_text_view_scroll_to_iter(GTK_TEXT_VIEW(textview->text),
- &iter, 0.0, TRUE, 0.0, 0.0);
- }
-}
-
-#define KEY_PRESS_EVENT_STOP() \
- g_signal_stop_emission_by_name(G_OBJECT(widget), \
- "key_press_event");
-
-static gint textview_key_pressed(GtkWidget *widget, GdkEventKey *event,
- TextView *textview)
-{
- GdkWindow *window = NULL;
- SummaryView *summaryview = NULL;
- MessageView *messageview = textview->messageview;
- gboolean mod_pressed;
-
- if (!event) return FALSE;
- if (messageview->mainwin)
- summaryview = messageview->mainwin->summaryview;
-
- switch (event->keyval) {
- case GDK_KEY_Tab:
- case GDK_KEY_Left:
- case GDK_KEY_Up:
- case GDK_KEY_Right:
- case GDK_KEY_Down:
- case GDK_KEY_Control_L:
- case GDK_KEY_Control_R:
- return FALSE;
- case GDK_KEY_Home:
- case GDK_KEY_End:
- textview_scroll_max(textview,(event->keyval == GDK_KEY_Home));
- return TRUE;
- case GDK_KEY_space:
- mod_pressed = ((event->state & (GDK_SHIFT_MASK|GDK_MOD1_MASK)) != 0);
- if (!mimeview_scroll_page(messageview->mimeview, mod_pressed) &&
- summaryview != NULL) {
- if (mod_pressed)
- summary_select_prev_unread(summaryview);
- else
- summary_select_next_unread(summaryview);
- }
- break;
- case GDK_KEY_Page_Down:
- mimeview_scroll_page(messageview->mimeview, FALSE);
- break;
- case GDK_KEY_Page_Up:
- case GDK_KEY_BackSpace:
- mimeview_scroll_page(messageview->mimeview, TRUE);
- break;
- case GDK_KEY_Return:
- case GDK_KEY_KP_Enter:
- mimeview_scroll_one_line
- (messageview->mimeview, (event->state &
- (GDK_SHIFT_MASK|GDK_MOD1_MASK)) != 0);
- break;
- case GDK_KEY_Delete:
- if (summaryview)
- summary_pass_key_press_event(summaryview, event);
- break;
- default:
- if (messageview->mainwin) {
- window = gtk_widget_get_window(messageview->mainwin->window);
- if (summaryview &&
- event->window != window) {
- GdkEventKey tmpev = *event;
-
- tmpev.window = window;
- KEY_PRESS_EVENT_STOP();
- gtk_widget_event(messageview->mainwin->window,
- (GdkEvent *)&tmpev);
- }
- }
- break;
- }
-
- return TRUE;
-}
-
static gboolean textview_motion_notify(GtkWidget *widget,
GdkEventMotion *event,
TextView *textview)
diff --git a/src/textview.h b/src/textview.h
@@ -103,12 +103,6 @@ void textview_set_text (TextView *textview,
const gchar *text);
void textview_set_position (TextView *textview,
gint pos);
-void textview_scroll_one_line (TextView *textview,
- gboolean up);
-gboolean textview_scroll_page (TextView *textview,
- gboolean up);
-void textview_scroll_max (TextView *textview,
- gboolean up);
gboolean textview_search_string (TextView *textview,
const gchar *str,