talons

Fork of Claws Mail https://www.claws-mail
Log | Files | Refs | README | LICENSE

commit a8aa34ff9af91bf7fa173b9e3e91f09883e3c9c6
parent 6efdeae6c0adc6d6109a1deb8ee5b506b7b6d1da
Author: Oliver Lowe <o@olowe.co>
Date:   Sat, 23 Aug 2025 19:29:38 +1000

Source font from GTK settings

Diffstat:
Msrc/Makefile.am | 2--
Msrc/action.c | 11-----------
Msrc/common/defs.h | 4----
Msrc/compose.c | 12------------
Msrc/folderview.c | 108-------------------------------------------------------------------------------
Msrc/folderview.h | 15++++++---------
Msrc/gtk/gtkutils.c | 29+++++++++++++++--------------
Msrc/gtk/gtkutils.h | 1+
Msrc/main.c | 4----
Msrc/mainwindow.c | 3---
Msrc/messageview.c | 14--------------
Msrc/prefs_common.c | 17-----------------
Msrc/prefs_common.h | 10----------
Dsrc/prefs_fonts.c | 269-------------------------------------------------------------------------------
Dsrc/prefs_fonts.h | 26--------------------------
Msrc/printing.c | 14++++++--------
Msrc/quote_fmt.c | 30------------------------------
Msrc/sourcewindow.c | 5-----
Msrc/summaryview.c | 100-------------------------------------------------------------------------------
Msrc/summaryview.h | 1-
Msrc/textview.c | 273+++-----------------------------------------------------------------------------
Msrc/textview.h | 12+++++-------
22 files changed, 40 insertions(+), 920 deletions(-)

diff --git a/src/Makefile.am b/src/Makefile.am @@ -94,7 +94,6 @@ claws_mail_SOURCES = \ prefs_display_header.c \ prefs_ext_prog.c \ prefs_folder_item.c \ - prefs_fonts.c \ prefs_gtk.c \ prefs_logging.c \ prefs_matcher.c \ @@ -196,7 +195,6 @@ claws_mailinclude_HEADERS = \ prefs_display_header.h \ prefs_ext_prog.h \ prefs_folder_item.h \ - prefs_fonts.h \ prefs_gtk.h \ prefs_logging.h \ prefs_matcher.h \ diff --git a/src/action.c b/src/action.c @@ -1313,17 +1313,6 @@ static void create_io_dialog(Children *children) gtk_widget_hide(scrolledwin); text = gtk_text_view_new(); - - if (prefs_common.textfont) { - PangoFontDescription *font_desc; - font_desc = pango_font_description_from_string - (prefs_common.textfont); - if (font_desc) { - gtk_widget_override_font(text, font_desc); - pango_font_description_free(font_desc); - } - } - gtk_text_view_set_editable(GTK_TEXT_VIEW(text), FALSE); gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(text), GTK_WRAP_WORD); gtk_text_view_set_left_margin(GTK_TEXT_VIEW(text), 6); diff --git a/src/common/defs.h b/src/common/defs.h @@ -148,10 +148,6 @@ 'BadAlloc (insufficient resources for operation)' */ #define MAX_MENU_LABEL_LENGTH 5453 -#define BOLD_FONT prefs_common.boldfont -#define NORMAL_FONT prefs_common.normalfont -#define SMALL_FONT prefs_common.smallfont - #define DEFAULT_PIXMAP_THEME "INTERNAL_DEFAULT" #define PIXMAP_THEME_DIR "themes" diff --git a/src/compose.c b/src/compose.c @@ -7547,18 +7547,6 @@ static Compose *compose_create(PrefsAccount *account, gtk_widget_show_all(paned); - - if (prefs_common.textfont) { - PangoFontDescription *font_desc; - - font_desc = pango_font_description_from_string - (prefs_common.textfont); - if (font_desc) { - gtk_widget_override_font(text, font_desc); - pango_font_description_free(font_desc); - } - } - gtk_action_group_add_actions(action_group, compose_popup_entries, G_N_ELEMENTS(compose_popup_entries), (gpointer)compose); MENUITEM_ADDUI_MANAGER(compose->ui_manager, "/", "Popup", NULL, GTK_UI_MANAGER_MENUBAR) diff --git a/src/folderview.c b/src/folderview.c @@ -635,38 +635,6 @@ FolderView *folderview_create(MainWindow *mainwin) return folderview; } -static void folderview_set_fonts(FolderView *folderview) -{ - PangoFontDescription *font_desc; - GtkWidget *ctree = folderview->ctree; - - font_desc = pango_font_description_from_string(NORMAL_FONT); - if (font_desc) { - gtk_widget_override_font(ctree, font_desc); - pango_font_description_free(font_desc); - } - - if (!bold_style) { - bold_style = gtk_style_copy(gtk_widget_get_style(ctree)); - - if (prefs_common.derive_from_normal_font || !BOLD_FONT) { - font_desc = pango_font_description_from_string(NORMAL_FONT); - if (font_desc) { - pango_font_description_free(bold_style->font_desc); - bold_style->font_desc = font_desc; - } - pango_font_description_set_weight - (bold_style->font_desc, PANGO_WEIGHT_BOLD); - } else { - font_desc = pango_font_description_from_string(BOLD_FONT); - if (font_desc) { - pango_font_description_free(bold_style->font_desc); - bold_style->font_desc = font_desc; - } - } - } -} - void folderview_init(FolderView *folderview) { stock_pixbuf_gdk(STOCK_PIXMAP_INBOX_CLOSE, &inboxxpm); @@ -720,8 +688,6 @@ void folderview_init(FolderView *folderview) stock_pixbuf_gdk(STOCK_PIXMAP_DRAFTS_OPEN_MARK, &m_draftsopenxpm); stock_pixbuf_gdk(STOCK_PIXMAP_DIR_SUBS_CLOSE_MARK, &m_foldersubsxpm); stock_pixbuf_gdk(STOCK_PIXMAP_DIR_NOSELECT_CLOSE_MARK, &m_foldernoselectxpm); - - folderview_set_fonts(folderview); } static gboolean folderview_defer_set(gpointer data) @@ -2686,80 +2652,6 @@ void folderview_set_target_folder_color(GdkRGBA color_op) } } -static gchar *last_smallfont = NULL; -static gchar *last_normalfont = NULL; -static gchar *last_boldfont = NULL; -static gboolean last_derive = 0; - -void folderview_reinit_fonts(FolderView *folderview) -{ - /* force reinit */ - g_free(last_smallfont); - last_smallfont = NULL; - g_free(last_normalfont); - last_normalfont = NULL; - g_free(last_boldfont); - last_boldfont = NULL; -} - -void folderview_reflect_prefs(void) -{ - gboolean update_font = FALSE; - FolderView *folderview = mainwindow_get_mainwindow()->folderview; - FolderItem *item = folderview_get_selected_item(folderview); - GtkAdjustment *pos = gtk_scrolled_window_get_vadjustment( - GTK_SCROLLED_WINDOW(folderview->scrolledwin)); - gint height = gtk_adjustment_get_value(pos); - - folderview->color_new = prefs_common.color[COL_NEW]; - folderview->color_op = prefs_common.color[COL_TGT_FOLDER]; - - if (!last_smallfont || strcmp(last_smallfont, SMALL_FONT) || - !last_normalfont || strcmp(last_normalfont, NORMAL_FONT) || - !last_boldfont || strcmp(last_boldfont, BOLD_FONT) || - last_derive != prefs_common.derive_from_normal_font) - update_font = TRUE; - - if (!update_font) - return; - - g_free(last_smallfont); - last_smallfont = g_strdup(SMALL_FONT); - g_free(last_normalfont); - last_normalfont = g_strdup(NORMAL_FONT); - g_free(last_boldfont); - last_boldfont = g_strdup(BOLD_FONT); - last_derive = prefs_common.derive_from_normal_font; - - folderview_set_fonts(folderview); - - gtk_cmclist_freeze(GTK_CMCLIST(folderview->ctree)); - folderview_column_set_titles(folderview); - folderview_set_all(); - - g_signal_handlers_block_by_func - (G_OBJECT(folderview->ctree), - G_CALLBACK(folderview_selected), folderview); - - if (item) { - GtkCMCTreeNode *node = gtk_cmctree_find_by_row_data( - GTK_CMCTREE(folderview->ctree), NULL, item); - - folderview_select(folderview, item); - folderview->open_folder = FALSE; - folderview->selected = node; - } - - g_signal_handlers_unblock_by_func - (G_OBJECT(folderview->ctree), - G_CALLBACK(folderview_selected), folderview); - - pos = gtk_scrolled_window_get_vadjustment( - GTK_SCROLLED_WINDOW(folderview->scrolledwin)); - gtk_adjustment_set_value(pos, height); - gtk_cmclist_thaw(GTK_CMCLIST(folderview->ctree)); -} - static void drag_state_stop(FolderView *folderview) { if (folderview->drag_timer_id) diff --git a/src/folderview.h b/src/folderview.h @@ -14,7 +14,7 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. - * + * */ #ifndef __FOLDERVIEW_H__ @@ -68,13 +68,13 @@ struct _FolderView gint folder_update_callback_id; gint folder_item_update_callback_id; - + /* DND states */ GSList *nodes_to_recollapse; guint drag_timer_id; /* timer id */ FolderItem *drag_item; /* dragged item */ GtkCMCTreeNode *drag_node; /* drag node */ - + GtkTargetList *target_list; /* DnD */ FolderColumnState col_state[N_FOLDER_COLS]; gint col_pos[N_FOLDER_COLS]; @@ -136,17 +136,14 @@ void folderview_move_folder (FolderView *folderview, void folderview_set_target_folder_color (GdkRGBA color_op); -void folderview_reinit_fonts (FolderView *folderview); - -void folderview_reflect_prefs (void); void folderview_register_popup (FolderViewPopup *fpopup); void folderview_unregister_popup (FolderViewPopup *fpopup); -void folderview_update_search_icon (FolderItem *item, +void folderview_update_search_icon (FolderItem *item, gboolean matches); void folderview_set_column_order (FolderView *folderview); -void folderview_finish_dnd (const gchar *data, +void folderview_finish_dnd (const gchar *data, GdkDragContext *drag_context, - guint time, + guint time, FolderItem *item); void folderview_close_opened (FolderView *folderview, gboolean dirty); diff --git a/src/gtk/gtkutils.c b/src/gtk/gtkutils.c @@ -70,25 +70,26 @@ gboolean gtkut_get_font_size(GtkWidget *widget, return TRUE; } -void gtkut_widget_set_small_font_size(GtkWidget *widget) +PangoFontDescription *default_font() { - PangoFontDescription *font_desc; - gint size; + GtkSettings *settings = gtk_settings_get_default(); + char *name; + g_object_get(settings, "gtk-font-name", &name, NULL); + PangoFontDescription *font = pango_font_description_from_string(name); + free(name); + return font; +} +void gtkut_widget_set_small_font_size(GtkWidget *widget) +{ cm_return_if_fail(widget != NULL); cm_return_if_fail(gtk_widget_get_style(widget) != NULL); - if (prefs_common.derive_from_normal_font || !SMALL_FONT) { - font_desc = pango_font_description_from_string(NORMAL_FONT); - size = pango_font_description_get_size(font_desc); - pango_font_description_set_size(font_desc, size * PANGO_SCALE_SMALL); - gtk_widget_override_font(widget, font_desc); - pango_font_description_free(font_desc); - } else { - font_desc = pango_font_description_from_string(SMALL_FONT); - gtk_widget_override_font(widget, font_desc); - pango_font_description_free(font_desc); - } + PangoFontDescription *font = default_font(); + int size = pango_font_description_get_size(font); + pango_font_description_set_size(font, size * PANGO_SCALE_SMALL); + gtk_widget_override_font(widget, font); + pango_font_description_free(font); } void gtkut_stock_button_add_help(GtkWidget *bbox, GtkWidget **help_btn) diff --git a/src/gtk/gtkutils.h b/src/gtk/gtkutils.h @@ -166,6 +166,7 @@ GtkWidget *gtkut_account_menu_new (GList *ac_list, GCallback callback, gpointer data); +PangoFontDescription *default_font(void); void gtkut_widget_set_small_font_size(GtkWidget *widget); GtkWidget *gtkut_get_focused_child (GtkContainer *parent); diff --git a/src/main.c b/src/main.c @@ -59,7 +59,6 @@ #include "prefs_account.h" #include "prefs_actions.h" #include "prefs_ext_prog.h" -#include "prefs_fonts.h" #include "prefs_message.h" #include "prefs_receive.h" #include "prefs_quote.h" @@ -404,7 +403,6 @@ int main(int argc, char *argv[]) gboolean mainwin_shown = FALSE; gint ret; - sc_starting = TRUE; if (!claws_init(&argc, &argv)) { @@ -497,7 +495,6 @@ int main(int argc, char *argv[]) prefs_common_read_config(); prefs_themes_init(); - prefs_fonts_init(); prefs_ext_prog_init(); prefs_wrapping_init(); prefs_compose_writing_init(); @@ -807,7 +804,6 @@ static void exit_claws(MainWindow *mainwin) addressbook_destroy(); prefs_themes_done(); - prefs_fonts_done(); prefs_ext_prog_done(); prefs_wrapping_done(); prefs_compose_writing_done(); diff --git a/src/mainwindow.c b/src/mainwindow.c @@ -1700,7 +1700,6 @@ static gboolean reflect_prefs_timeout_cb(gpointer data) toolbar_update(TOOLBAR_MAIN, mainwin); messageview_reflect_prefs_pixmap_theme(); compose_reflect_prefs_pixmap_theme(); - folderview_reinit_fonts(mainwin->folderview); folderview_init(mainwin->folderview); summary_reflect_prefs_pixmap_theme(mainwin->summaryview); foldersel_reflect_prefs_pixmap_theme(); @@ -1726,8 +1725,6 @@ static gboolean reflect_prefs_timeout_cb(gpointer data) else gtk_widget_hide(mainwin->messageview->headerview->hbox); textview_reflect_prefs(mainwin->messageview->mimeview->textview); - folderview_reflect_prefs(); - summary_reflect_prefs(); summary_redisplay_msg(mainwin->summaryview); if (prefs_common.layout_mode == SMALL_LAYOUT) { if (mainwin->in_folder) { diff --git a/src/messageview.c b/src/messageview.c @@ -1693,23 +1693,9 @@ static void print_mimeview(MimeView *mimeview, gint sel_start, gint sel_end, gin void messageview_print(MsgInfo *msginfo, gboolean all_headers, gint sel_start, gint sel_end, gint partnum) { - PangoFontDescription *font_desc = NULL; MessageView *tmpview = messageview_create_with_new_window_visible( mainwindow_get_mainwindow(), FALSE); - if (prefs_common.use_different_print_font) { - font_desc = pango_font_description_from_string - (prefs_common.printfont); - } else { - font_desc = pango_font_description_from_string - (prefs_common.textfont); - } - if (font_desc) { - gtk_widget_override_font(tmpview->mimeview->textview->text, - font_desc); - pango_font_description_free(font_desc); - } - tmpview->all_headers = all_headers; if (msginfo && messageview_show(tmpview, msginfo, tmpview->all_headers) >= 0) { diff --git a/src/prefs_common.c b/src/prefs_common.c @@ -220,23 +220,6 @@ static PrefParam param[] = { {"quote_chars", ">", &prefs_common.quote_chars, P_STRING, NULL, NULL, NULL}, - /* Display */ - {"message_font_gtk2", "Monospace 9", - &prefs_common.textfont, P_STRING, NULL, NULL, NULL}, - {"print_font_gtk2", "Monospace 9", - &prefs_common.printfont, P_STRING, NULL, NULL, NULL}, - {"small_font_gtk2", "Sans 9", - &prefs_common.smallfont, P_STRING, NULL, NULL, NULL}, - {"normal_font_gtk2", "Sans 9", - &prefs_common.normalfont, P_STRING, NULL, NULL, NULL}, - {"bold_font_gtk2", "Sans Bold 9", - &prefs_common.boldfont, P_STRING, NULL, NULL, NULL}, - - {"use_different_print_font", "FALSE", &prefs_common.use_different_print_font, P_BOOL, - NULL, NULL, NULL}, - {"derive_from_normal_font", "TRUE", &prefs_common.derive_from_normal_font, P_BOOL, - NULL, NULL, NULL}, - /* image viewer */ {"display_image", "TRUE", &prefs_common.display_img, P_BOOL, NULL, NULL, NULL}, diff --git a/src/prefs_common.h b/src/prefs_common.h @@ -213,16 +213,6 @@ struct _PrefsCommon gboolean redirect_keep_from; gchar *quote_chars; - /* fonts */ - gchar *textfont; - gchar *printfont; - gchar *boldfont; - gchar *normalfont; - gchar *smallfont; - gchar *titlefont; - gboolean use_different_print_font; - gboolean derive_from_normal_font; - /* program colors */ GdkRGBA color[COL_LAST_COLOR_INDEX]; diff --git a/src/prefs_fonts.c b/src/prefs_fonts.c @@ -1,269 +0,0 @@ -/* - * Claws Mail -- a GTK based, lightweight, and fast e-mail client - * Copyright (C) 2003-2019 the Claws Mail Team and Hiroyuki Yamamoto - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifdef HAVE_CONFIG_H -# include "config.h" -#include "claws-features.h" -#endif - -#include "defs.h" - -#include <stdio.h> -#include <stdlib.h> - -#include <glib.h> -#include <glib/gi18n.h> -#include <gtk/gtk.h> -#include <gdk/gdkkeysyms.h> - -#include "prefs_common.h" -#include "prefs_gtk.h" - -#include "gtk/prefswindow.h" - -typedef struct _FontsPage -{ - PrefsPage page; - - GtkWidget *window; /* do not modify */ - - GtkWidget *entry_folderview_smallfont; - GtkWidget *entry_folderview_normalfont; - GtkWidget *entry_folderview_boldfont; - GtkWidget *entry_messageviewfont; - GtkWidget *derive_from_normalfont_checkbutton; - GtkWidget *print_checkbutton; - GtkWidget *entry_messageprintfont; -} FontsPage; - -static void prefs_fonts_create_widget(PrefsPage *_page, GtkWindow *window, - gpointer data) -{ - FontsPage *prefs_fonts = (FontsPage *) _page; - - GtkWidget *table; - GtkWidget *entry_folderview_smallfont; - GtkWidget *entry_folderview_normalfont; - GtkWidget *entry_folderview_boldfont; - GtkWidget *entry_messageviewfont; - GtkWidget *tmplabel; - GtkWidget *entry_messageprintfont; - GtkWidget *print_checkbutton; - GtkWidget *derive_from_normalfont_checkbutton; - GtkWidget *vbox; - gint row = 0; - - table = gtk_grid_new(); - gtk_widget_show(table); - gtk_container_set_border_width(GTK_CONTAINER(table), VBOX_BORDER); - gtk_grid_set_row_spacing(GTK_GRID(table), 4); - gtk_grid_set_column_spacing(GTK_GRID(table), 8); - - /* normal font label */ - tmplabel = gtk_label_new (_("Folder and Message Lists")); - gtk_widget_show (tmplabel); - gtk_label_set_justify(GTK_LABEL(tmplabel), GTK_JUSTIFY_RIGHT); - gtk_label_set_xalign(GTK_LABEL(tmplabel), 1.0); - gtk_grid_attach(GTK_GRID(table), tmplabel, 0, row, 1, 1); - - /* normal font button */ - entry_folderview_normalfont = gtk_font_button_new_with_font (prefs_common.normalfont); - g_object_set(G_OBJECT(entry_folderview_normalfont), - "use-font", TRUE, - NULL); - gtk_widget_show (entry_folderview_normalfont); - gtk_grid_attach(GTK_GRID(table), entry_folderview_normalfont, 1, row, 1, 1); - gtk_widget_set_hexpand(entry_folderview_normalfont, TRUE); - gtk_widget_set_halign(entry_folderview_normalfont, GTK_ALIGN_FILL); - row++; - - /* message font label */ - tmplabel = gtk_label_new (_("Message")); - gtk_widget_show (tmplabel); - gtk_label_set_justify(GTK_LABEL(tmplabel), GTK_JUSTIFY_RIGHT); - gtk_label_set_xalign(GTK_LABEL(tmplabel), 1.0); - gtk_grid_attach(GTK_GRID(table), tmplabel, 0, row, 1, 1); - - /* message font button */ - entry_messageviewfont = gtk_font_button_new_with_font (prefs_common.textfont); - g_object_set(G_OBJECT(entry_messageviewfont), - "use-font", TRUE, - NULL); - gtk_widget_show (entry_messageviewfont); - gtk_grid_attach(GTK_GRID(table), entry_messageviewfont, 1, row, 1, 1); - gtk_widget_set_hexpand(entry_messageviewfont, TRUE); - gtk_widget_set_halign(entry_messageviewfont, GTK_ALIGN_FILL); - row++; - - vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, VSPACING_NARROW); - gtk_widget_show(vbox); - gtk_grid_attach(GTK_GRID(table), vbox, 0, row, 1, 1); - row++; - - /* derive from normal font check button */ - derive_from_normalfont_checkbutton = gtk_check_button_new_with_label(_("Derive small and bold fonts from Folder and Message Lists font")); - gtk_widget_show(derive_from_normalfont_checkbutton); - gtk_grid_attach(GTK_GRID(table), derive_from_normalfont_checkbutton, 0, row, 2, 1); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(derive_from_normalfont_checkbutton), - prefs_common.derive_from_normal_font); - row++; - - /* small font label */ - tmplabel = gtk_label_new (_("Small")); - gtk_widget_show (tmplabel); - gtk_grid_attach(GTK_GRID(table), tmplabel, 0, row, 1, 1); - gtk_label_set_justify(GTK_LABEL(tmplabel), GTK_JUSTIFY_RIGHT); - gtk_label_set_xalign(GTK_LABEL(tmplabel), 1.0); - SET_TOGGLE_SENSITIVITY_REVERSE (derive_from_normalfont_checkbutton, tmplabel); - - /* small font button */ - entry_folderview_smallfont = gtk_font_button_new_with_font (prefs_common.smallfont); - g_object_set(G_OBJECT(entry_folderview_smallfont), - "use-font", TRUE, - NULL); - gtk_widget_show (entry_folderview_smallfont); - gtk_grid_attach(GTK_GRID(table), entry_folderview_smallfont, 1, row, 1, 1); - gtk_widget_set_hexpand(entry_folderview_smallfont, TRUE); - gtk_widget_set_halign(entry_folderview_smallfont, GTK_ALIGN_FILL); - SET_TOGGLE_SENSITIVITY_REVERSE (derive_from_normalfont_checkbutton, entry_folderview_smallfont); - row++; - - /* bold font label */ - tmplabel = gtk_label_new (_("Bold")); - gtk_widget_show (tmplabel); - gtk_label_set_justify(GTK_LABEL(tmplabel), GTK_JUSTIFY_RIGHT); - gtk_label_set_xalign(GTK_LABEL(tmplabel), 1.0); - gtk_grid_attach(GTK_GRID(table), tmplabel, 0, row, 1, 1); - SET_TOGGLE_SENSITIVITY_REVERSE (derive_from_normalfont_checkbutton, tmplabel); - - /* bold font button */ - entry_folderview_boldfont = gtk_font_button_new_with_font (prefs_common.boldfont); - g_object_set(G_OBJECT(entry_folderview_boldfont), - "use-font", TRUE, - NULL); - gtk_widget_show (entry_folderview_boldfont); - gtk_grid_attach(GTK_GRID(table), entry_folderview_boldfont, 1, row, 1, 1); - gtk_widget_set_hexpand(entry_folderview_boldfont, TRUE); - gtk_widget_set_halign(entry_folderview_boldfont, GTK_ALIGN_FILL); - SET_TOGGLE_SENSITIVITY_REVERSE (derive_from_normalfont_checkbutton, entry_folderview_boldfont); - row++; - - /* print check button */ - print_checkbutton = gtk_check_button_new_with_label(_("Use different font for printing")); - gtk_widget_show(print_checkbutton); - gtk_grid_attach(GTK_GRID(table), print_checkbutton, 0, row, 2, 1); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(print_checkbutton), - prefs_common.use_different_print_font); - row++; - - /* print font label */ - tmplabel = gtk_label_new (_("Message Printing")); - gtk_widget_show (tmplabel); - gtk_label_set_justify(GTK_LABEL(tmplabel), GTK_JUSTIFY_RIGHT); - gtk_label_set_xalign(GTK_LABEL(tmplabel), 1.0); - gtk_grid_attach(GTK_GRID(table), tmplabel, 0, row, 1, 1); - SET_TOGGLE_SENSITIVITY (print_checkbutton, tmplabel); - - /* print font button */ - entry_messageprintfont = gtk_font_button_new_with_font (prefs_common.printfont); - g_object_set(G_OBJECT(entry_messageprintfont), - "use-font", TRUE, - NULL); - gtk_widget_show (entry_messageprintfont); - gtk_grid_attach(GTK_GRID(table), entry_messageprintfont, 1, row, 1, 1); - gtk_widget_set_hexpand(entry_messageprintfont, TRUE); - gtk_widget_set_halign(entry_messageprintfont, GTK_ALIGN_FILL); - SET_TOGGLE_SENSITIVITY (print_checkbutton, entry_messageprintfont); - row++; - - prefs_fonts->window = GTK_WIDGET(window); - prefs_fonts->entry_folderview_smallfont = entry_folderview_smallfont; - prefs_fonts->entry_folderview_normalfont = entry_folderview_normalfont; - prefs_fonts->entry_folderview_boldfont = entry_folderview_boldfont; - prefs_fonts->entry_messageviewfont = entry_messageviewfont; - prefs_fonts->derive_from_normalfont_checkbutton = derive_from_normalfont_checkbutton; - prefs_fonts->entry_messageprintfont = entry_messageprintfont; - prefs_fonts->print_checkbutton = print_checkbutton; - - prefs_fonts->page.widget = table; -} - -static void prefs_fonts_save(PrefsPage *_page) -{ - FontsPage *fonts = (FontsPage *) _page; - - g_free(prefs_common.boldfont); - prefs_common.boldfont = g_strdup(gtk_font_chooser_get_font - (GTK_FONT_CHOOSER(fonts->entry_folderview_boldfont))); - - g_free(prefs_common.normalfont); - prefs_common.normalfont = g_strdup(gtk_font_chooser_get_font - (GTK_FONT_CHOOSER(fonts->entry_folderview_normalfont))); - - g_free(prefs_common.smallfont); - prefs_common.smallfont = g_strdup(gtk_font_chooser_get_font - (GTK_FONT_CHOOSER(fonts->entry_folderview_smallfont))); - - g_free(prefs_common.textfont); - prefs_common.textfont = g_strdup(gtk_font_chooser_get_font - (GTK_FONT_CHOOSER(fonts->entry_messageviewfont))); - - prefs_common.derive_from_normal_font = gtk_toggle_button_get_active - (GTK_TOGGLE_BUTTON(fonts->derive_from_normalfont_checkbutton)); - - g_free(prefs_common.printfont); - prefs_common.printfont = g_strdup(gtk_font_chooser_get_font - (GTK_FONT_CHOOSER(fonts->entry_messageprintfont))); - prefs_common.use_different_print_font = gtk_toggle_button_get_active - (GTK_TOGGLE_BUTTON(fonts->print_checkbutton)); - - main_window_reflect_prefs_all(); -} - -static void prefs_fonts_destroy_widget(PrefsPage *_page) -{ - /* FontsPage *fonts = (FontsPage *) _page; */ - -} - -FontsPage *prefs_fonts; - -void prefs_fonts_init(void) -{ - FontsPage *page; - static gchar *path[3]; - - path[0] = _("Display"); - path[1] = _("Fonts"); - path[2] = NULL; - - page = g_new0(FontsPage, 1); - page->page.path = path; - page->page.create_widget = prefs_fonts_create_widget; - page->page.destroy_widget = prefs_fonts_destroy_widget; - page->page.save_page = prefs_fonts_save; - page->page.weight = 135.0; - prefs_gtk_register_page((PrefsPage *) page); - prefs_fonts = page; -} - -void prefs_fonts_done(void) -{ - prefs_gtk_unregister_page((PrefsPage *) prefs_fonts); - g_free(prefs_fonts); -} diff --git a/src/prefs_fonts.h b/src/prefs_fonts.h @@ -1,26 +0,0 @@ -/* - * Claws Mail -- a GTK based, lightweight, and fast e-mail client - * Copyright (C) 2003-2012 Hiroyuki Yamamoto and the Claws Mail team - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * - */ - -#ifndef PREFS_FONTS_H -#define PREFS_FONTS_H - -void prefs_fonts_init (void); -void prefs_fonts_done (void); - -#endif /* PREFS_FONTS_H */ diff --git a/src/printing.c b/src/printing.c @@ -838,6 +838,9 @@ static void cb_preview_request_page_setup(GtkPrintOperation *op, GTK_UNIT_INCH); } +/* GTK default is always available */ +#define PRINT_FONT "Sans 11" + static void printing_textview_cb_begin_print(GtkPrintOperation *op, GtkPrintContext *context, gpointer user_data) { @@ -846,7 +849,6 @@ static void printing_textview_cb_begin_print(GtkPrintOperation *op, GtkPrintCont double page_height; GList *page_breaks; PrintData *print_data; - PangoFontDescription *desc; int start, ii; PangoLayoutIter *iter; gint header_end_pos; @@ -867,14 +869,10 @@ static void printing_textview_cb_begin_print(GtkPrintOperation *op, GtkPrintCont if (print_data->layout == NULL) print_data->layout = gtk_print_context_create_pango_layout(context); - if (prefs_common.use_different_print_font) - desc = pango_font_description_from_string(prefs_common.printfont); - else - desc = pango_font_description_copy( - pango_context_get_font_description(print_data->pango_context)); + PangoFontDescription *font = pango_font_description_copy(pango_context_get_font_description(print_data->pango_context)); - pango_layout_set_font_description(print_data->layout, desc); - pango_font_description_free(desc); + pango_layout_set_font_description(print_data->layout, font); + pango_font_description_free(font); pango_layout_set_width(print_data->layout, width * PANGO_SCALE); pango_layout_set_text(print_data->layout, (char *)print_data->to_print, -1); diff --git a/src/quote_fmt.c b/src/quote_fmt.c @@ -220,16 +220,6 @@ void quotefmt_create_new_msg_fmt_widgets(GtkWindow *parent_window, gtk_scrolled_window_set_min_content_height(GTK_SCROLLED_WINDOW(scrolledwin_format), 260); text_format = gtk_text_view_new (); - if (prefs_common.textfont) { - PangoFontDescription *font_desc; - - font_desc = pango_font_description_from_string - (prefs_common.textfont); - if (font_desc) { - gtk_widget_override_font(text_format, font_desc); - pango_font_description_free(font_desc); - } - } gtk_widget_show(text_format); gtk_container_add(GTK_CONTAINER(scrolledwin_format), text_format); gtk_text_view_set_editable (GTK_TEXT_VIEW (text_format), TRUE); @@ -334,16 +324,6 @@ void quotefmt_create_reply_fmt_widgets(GtkWindow *parent_window, gtk_scrolled_window_set_min_content_height(GTK_SCROLLED_WINDOW(scrolledwin_quotefmt), 260); text_quotefmt = gtk_text_view_new (); - if (prefs_common.textfont) { - PangoFontDescription *font_desc; - - font_desc = pango_font_description_from_string - (prefs_common.textfont); - if (font_desc) { - gtk_widget_override_font(text_quotefmt, font_desc); - pango_font_description_free(font_desc); - } - } gtk_widget_show(text_quotefmt); gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt); gtk_text_view_set_editable (GTK_TEXT_VIEW (text_quotefmt), TRUE); @@ -445,16 +425,6 @@ void quotefmt_create_forward_fmt_widgets(GtkWindow *parent_window, gtk_scrolled_window_set_min_content_height(GTK_SCROLLED_WINDOW(scrolledwin_quotefmt), 260); text_fw_quotefmt = gtk_text_view_new (); - if (prefs_common.textfont) { - PangoFontDescription *font_desc; - - font_desc = pango_font_description_from_string - (prefs_common.textfont); - if (font_desc) { - gtk_widget_override_font(text_fw_quotefmt, font_desc); - pango_font_description_free(font_desc); - } - } gtk_widget_show(text_fw_quotefmt); gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_fw_quotefmt); diff --git a/src/sourcewindow.c b/src/sourcewindow.c @@ -97,11 +97,6 @@ SourceWindow *source_window_create(void) text = gtk_text_view_new(); gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(text), GTK_WRAP_WORD_CHAR); gtk_text_view_set_editable(GTK_TEXT_VIEW(text), FALSE); - if (!font_desc && prefs_common.textfont) - font_desc = pango_font_description_from_string - (prefs_common.textfont); - if (font_desc) - gtk_widget_override_font(text, font_desc); gtk_container_add(GTK_CONTAINER(scrolledwin), text); gtk_widget_show(text); diff --git a/src/summaryview.c b/src/summaryview.c @@ -799,55 +799,6 @@ void summary_relayout(SummaryView *summaryview) quicksearch_hide(summaryview->quicksearch); } -static void summary_set_fonts(SummaryView *summaryview) -{ - PangoFontDescription *font_desc; - gint size; - - font_desc = pango_font_description_from_string(NORMAL_FONT); - if (font_desc) { - gtk_widget_override_font(summaryview->ctree, font_desc); - pango_font_description_free(font_desc); - } - - if (!bold_style) { - bold_style = gtk_style_copy - (gtk_widget_get_style(summaryview->ctree)); - - if (prefs_common.derive_from_normal_font || !BOLD_FONT) { - font_desc = pango_font_description_from_string(NORMAL_FONT); - if (font_desc) { - pango_font_description_free(bold_style->font_desc); - bold_style->font_desc = font_desc; - } - pango_font_description_set_weight - (bold_style->font_desc, PANGO_WEIGHT_BOLD); - } else { - font_desc = pango_font_description_from_string(BOLD_FONT); - if (font_desc) { - pango_font_description_free(bold_style->font_desc); - bold_style->font_desc = font_desc; - } - } - } - - if (prefs_common.derive_from_normal_font || !SMALL_FONT) { - font_desc = pango_font_description_new(); - size = pango_font_description_get_size - (gtk_widget_get_style(summaryview->ctree)->font_desc); - pango_font_description_set_size(font_desc, size * PANGO_SCALE_SMALL); - } else { - font_desc = pango_font_description_from_string(SMALL_FONT); - } - if (font_desc) { - gtk_widget_override_font(summaryview->statlabel_folder, font_desc); - gtk_widget_override_font(summaryview->statlabel_select, font_desc); - gtk_widget_override_font(summaryview->statlabel_msgs, font_desc); - pango_font_description_free(font_desc); - } - -} - static void summary_set_folder_pixmap(SummaryView *summaryview, StockPixmap icon) { GtkWidget *pixmap; @@ -894,8 +845,6 @@ void summary_init(SummaryView *summaryview) stock_pixbuf_gdk(STOCK_PIXMAP_MOVED, &movedxpm); stock_pixbuf_gdk(STOCK_PIXMAP_COPIED, &copiedxpm); - summary_set_fonts(summaryview); - summary_set_folder_pixmap(summaryview, STOCK_PIXMAP_DIR_OPEN); pixmap = stock_pixmap_widget(STOCK_PIXMAP_QUICKSEARCH); @@ -2771,54 +2720,6 @@ static void summary_set_column_titles(SummaryView *summaryview) } } -void summary_reflect_prefs(void) -{ - static gchar *last_smallfont = NULL; - static gchar *last_normalfont = NULL; - static gchar *last_boldfont = NULL; - static gboolean last_derive = 0; - gboolean update_font = FALSE; - SummaryView *summaryview = NULL; - - if (!mainwindow_get_mainwindow()) - return; - summaryview = mainwindow_get_mainwindow()->summaryview; - - if (!last_smallfont || strcmp(last_smallfont, SMALL_FONT) || - !last_normalfont || strcmp(last_normalfont, NORMAL_FONT) || - !last_boldfont || strcmp(last_boldfont, BOLD_FONT) || - last_derive != prefs_common.derive_from_normal_font) - update_font = TRUE; - - g_free(last_smallfont); - last_smallfont = g_strdup(SMALL_FONT); - g_free(last_normalfont); - last_normalfont = g_strdup(NORMAL_FONT); - g_free(last_boldfont); - last_boldfont = g_strdup(BOLD_FONT); - last_derive = prefs_common.derive_from_normal_font; - -#define STYLE_FREE(s) \ - if (s != NULL) { \ - g_object_unref(s); \ - s = NULL; \ - } - - if (update_font) { - STYLE_FREE(bold_style); - STYLE_FREE(bold_style); - summary_set_fonts(summaryview); - } - -#undef STYLE_FREE - - summary_set_column_titles(summaryview); - summary_relayout(summaryview); - - if (summaryview->folder_item) - summary_show(summaryview, summaryview->folder_item, FALSE); -} - void summary_sort(SummaryView *summaryview, FolderSortKey sort_key, FolderSortType sort_type) { @@ -5911,7 +5812,6 @@ void summary_set_column_order(SummaryView *summaryview) gtk_widget_destroy(summaryview->ctree); summaryview->ctree = ctree = summary_ctree_create(summaryview); - summary_set_fonts(summaryview); summary_set_column_titles(summaryview); gtk_scrolled_window_set_hadjustment(GTK_SCROLLED_WINDOW(scrolledwin), GTK_CMCLIST(ctree)->hadjustment); diff --git a/src/summaryview.h b/src/summaryview.h @@ -314,7 +314,6 @@ void summary_set_prefs_from_folderitem void summary_save_prefs_to_folderitem (SummaryView *summaryview, FolderItem *item); gint summaryview_export_mbox_list (SummaryView *summaryview); -void summary_reflect_prefs(void); void summaryview_activate_quicksearch(SummaryView *summaryview, gboolean show); void summary_set_menu_sensitive (SummaryView *summaryview); void summary_relayout(SummaryView *summaryview); diff --git a/src/textview.c b/src/textview.c @@ -111,21 +111,9 @@ static GdkCursor *hand_cursor = NULL; static GdkCursor *text_cursor = NULL; static GdkCursor *watch_cursor= NULL; -#define TEXTVIEW_FONT_SIZE_STEP 15 /* pango font zoom level change granularity in % */ -#define TEXTVIEW_FONT_SIZE_MIN -75 /* this gives 5 zoom out steps at 15% */ -#define TEXTVIEW_FONT_SIZE_MAX 3100 /* this gives 200 zoom in steps at 15% */ -#define TEXTVIEW_FONT_SIZE_UNSET -666 /* default value when unset (must be lower than TEXTVIEW_FONT_SIZE_MIN */ - #define WIDTH 48 #define HEIGHT 48 -/* font size in session (will apply to next message views we open */ -/* must be lower than TEXTVIEW_FONT_SIZE_MIN */ -static gint textview_font_size_percent = TEXTVIEW_FONT_SIZE_UNSET; -static gint textview_font_size_default = TEXTVIEW_FONT_SIZE_UNSET; - -static void textview_set_font_zoom(TextView *textview); - #define TEXTVIEW_STATUSBAR_PUSH(textview, str) \ { if (textview->messageview->statusbar) \ gtk_statusbar_push(GTK_STATUSBAR(textview->messageview->statusbar), \ @@ -162,20 +150,9 @@ static GPtrArray *textview_scan_header (TextView *textview, static void textview_show_header (TextView *textview, GPtrArray *headers); -static void textview_zoom(GtkWidget *widget, gboolean zoom_in); -static void textview_zoom_in(GtkWidget *widget, gpointer data); -static void textview_zoom_out(GtkWidget *widget, gpointer data); -static void textview_zoom_reset(GtkWidget *widget, gpointer data); - static gint textview_key_pressed (GtkWidget *widget, GdkEventKey *event, TextView *textview); -static gboolean textview_scrolled(GtkWidget *widget, - GdkEvent *_event, - gpointer user_data); -static void textview_populate_popup(GtkTextView *self, - GtkMenu *menu, - gpointer user_data); static gboolean textview_motion_notify (GtkWidget *widget, GdkEventMotion *motion, TextView *textview); @@ -298,11 +275,6 @@ TextView *textview_create(void) g_signal_connect(G_OBJECT(text), "size_allocate", G_CALLBACK(textview_size_allocate_cb), textview); - g_signal_connect(G_OBJECT(text), "scroll-event", - G_CALLBACK(textview_scrolled), textview); - g_signal_connect(G_OBJECT(text), "populate-popup", - G_CALLBACK(textview_populate_popup), textview); - gtk_widget_show(scrolledwin); @@ -312,7 +284,6 @@ TextView *textview_create(void) gtk_widget_show(vbox); - textview->ui_manager = gtk_ui_manager_new(); textview->link_action_group = cm_menu_create_action_group_full(textview->ui_manager, "TextviewPopupLink", @@ -361,23 +332,10 @@ static void textview_create_tags(GtkTextView *text, TextView *textview) { GtkTextBuffer *buffer; GtkTextTag *tag, *qtag; - static PangoFontDescription *font_desc, *bold_font_desc; - - if (!font_desc) - font_desc = pango_font_description_from_string - (NORMAL_FONT); - - if (!bold_font_desc) { - if (prefs_common.derive_from_normal_font || !BOLD_FONT) { - bold_font_desc = pango_font_description_from_string - (NORMAL_FONT); - pango_font_description_set_weight - (bold_font_desc, PANGO_WEIGHT_BOLD); - } else { - bold_font_desc = pango_font_description_from_string - (BOLD_FONT); - } - } + + PangoFontDescription *font_desc = default_font(); + PangoFontDescription *bold_font_desc = default_font(); + pango_font_description_set_weight(bold_font_desc, PANGO_WEIGHT_BOLD); buffer = gtk_text_view_get_buffer(text); @@ -469,10 +427,9 @@ static void textview_create_tags(GtkTextView *text, TextView *textview) G_CALLBACK(textview_uri_button_pressed), textview); g_signal_connect(G_OBJECT(tag), "event", G_CALLBACK(textview_uri_button_pressed), textview); -/* if (font_desc) - pango_font_description_free(font_desc); - if (bold_font_desc) - pango_font_description_free(bold_font_desc);*/ + + pango_font_description_free(font_desc); + pango_font_description_free(bold_font_desc); } void textview_init(TextView *textview) @@ -553,7 +510,6 @@ static void textview_update_message_colors(TextView *textview) void textview_reflect_prefs(TextView *textview) { - textview_set_font(textview, NULL); textview_update_message_colors(textview); } @@ -745,7 +701,6 @@ void textview_show_error(TextView *textview) GtkTextBuffer *buffer; GtkTextIter iter; - textview_set_font(textview, NULL); textview_clear(textview); text = GTK_TEXT_VIEW(textview->text); @@ -768,7 +723,6 @@ void textview_show_info(TextView *textview, const gchar *info_str) GtkTextBuffer *buffer; GtkTextIter iter; - textview_set_font(textview, NULL); textview_clear(textview); text = GTK_TEXT_VIEW(textview->text); @@ -797,7 +751,6 @@ void textview_show_mime_part(TextView *textview, MimeInfo *partinfo) else ui_manager = textview->messageview->mainwin->ui_manager; - textview_set_font(textview, NULL); textview_clear(textview); text = GTK_TEXT_VIEW(textview->text); @@ -894,9 +847,6 @@ static void textview_write_body(TextView *textview, MimeInfo *mimeinfo) charset = CS_GB18030; } - textview_set_font(textview, charset); - textview_set_font_zoom(textview); - conv = conv_code_converter_new(charset); procmime_force_encoding(textview->messageview->forced_encoding); @@ -1634,58 +1584,6 @@ void textview_destroy(TextView *textview) g_free(textview); } -#define CHANGE_TAG_FONT(tagname, font) { \ - tag = gtk_text_tag_table_lookup(tags, tagname); \ - if (tag) \ - g_object_set(G_OBJECT(tag), "font-desc", font, NULL); \ -} - -void textview_set_font(TextView *textview, const gchar *codeset) -{ - GtkTextTag *tag; - GtkTextBuffer *buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview->text)); - GtkTextTagTable *tags = gtk_text_buffer_get_tag_table(buffer); - PangoFontDescription *font_desc, *bold_font_desc; - - font_desc = pango_font_description_from_string - (NORMAL_FONT); - if (font_desc) { - gtk_widget_override_font(textview->text, font_desc); - CHANGE_TAG_FONT("header", font_desc); - CHANGE_TAG_FONT("hlink", font_desc); - pango_font_description_free(font_desc); - } - if (prefs_common.derive_from_normal_font || !BOLD_FONT) { - bold_font_desc = pango_font_description_from_string - (NORMAL_FONT); - if (bold_font_desc) - pango_font_description_set_weight - (bold_font_desc, PANGO_WEIGHT_BOLD); - } else { - bold_font_desc = pango_font_description_from_string - (BOLD_FONT); - } - if (bold_font_desc) { - CHANGE_TAG_FONT("header_title", bold_font_desc); - pango_font_description_free(bold_font_desc); - } - - if (prefs_common.textfont) { - PangoFontDescription *font_desc; - - font_desc = pango_font_description_from_string - (prefs_common.textfont); - if (font_desc) { - gtk_widget_override_font(textview->text, font_desc); - pango_font_description_free(font_desc); - } - } - gtk_text_view_set_pixels_above_lines(GTK_TEXT_VIEW(textview->text), - prefs_common.line_space / 2); - gtk_text_view_set_pixels_below_lines(GTK_TEXT_VIEW(textview->text), - prefs_common.line_space / 2); -} - void textview_set_text(TextView *textview, const gchar *text) { GtkTextView *view; @@ -2341,163 +2239,6 @@ static void textview_uri_update(TextView *textview, gint x, gint y) } } -static void textview_set_font_zoom(TextView *textview) -{ - PangoFontDescription *font; - gint size; - - /* do nothing if no zoom level has been set */ - if (textview_font_size_percent == TEXTVIEW_FONT_SIZE_UNSET) - return; - - font = pango_font_description_from_string - (prefs_common.textfont); - cm_return_if_fail(font); - - if (textview_font_size_default == TEXTVIEW_FONT_SIZE_UNSET) - textview_font_size_default = pango_font_description_get_size(font); - - size = textview_font_size_default + ( textview_font_size_default / 100 * textview_font_size_percent ); - - pango_font_description_set_size(font, size); - gtk_widget_override_font(textview->text, font); - pango_font_description_free(font); -} - -static void textview_zoom(GtkWidget *widget, gboolean zoom_in) -{ - PangoContext *pctx; - PangoFontDescription *font; - gint size; - - pctx = gtk_widget_get_pango_context(widget); - font = pango_context_get_font_description(pctx); - size = pango_font_description_get_size(font); - - /* save the default font size first time before zooming */ - if (textview_font_size_default == TEXTVIEW_FONT_SIZE_UNSET) - textview_font_size_default = size; - - if (textview_font_size_percent == TEXTVIEW_FONT_SIZE_UNSET) - textview_font_size_percent = 0; - - if (zoom_in) { - if ((textview_font_size_percent + TEXTVIEW_FONT_SIZE_STEP ) <= TEXTVIEW_FONT_SIZE_MAX) - textview_font_size_percent += TEXTVIEW_FONT_SIZE_STEP; - } else { - if ((textview_font_size_percent - TEXTVIEW_FONT_SIZE_STEP ) >= TEXTVIEW_FONT_SIZE_MIN) - textview_font_size_percent -= TEXTVIEW_FONT_SIZE_STEP; - } - size = textview_font_size_default + ( textview_font_size_default / 100 * textview_font_size_percent ); - - pango_font_description_set_size(font, size); - gtk_widget_override_font(widget, font); - gtk_widget_show(widget); -} - -static void textview_zoom_in(GtkWidget *widget, gpointer data) -{ - textview_zoom(GTK_WIDGET(data), TRUE); -} - -static void textview_zoom_out(GtkWidget *widget, gpointer data) -{ - textview_zoom(GTK_WIDGET(data), FALSE); -} - -static void textview_zoom_reset(GtkWidget *widget, gpointer data) -{ - PangoContext *pctx; - PangoFontDescription *font; - gint size; - - pctx = gtk_widget_get_pango_context(GTK_WIDGET(data)); - font = pango_context_get_font_description(pctx); - - /* reset and save the value for current session */ - if (textview_font_size_default == TEXTVIEW_FONT_SIZE_UNSET || textview_font_size_percent == TEXTVIEW_FONT_SIZE_UNSET) - return; - - textview_font_size_percent = 0; - size = textview_font_size_default + ( textview_font_size_default / 100 * textview_font_size_percent ); - - pango_font_description_set_size(font, size); - gtk_widget_override_font(GTK_WIDGET(data), font); - gtk_widget_show(GTK_WIDGET(data)); -} - -static void textview_populate_popup(GtkTextView* textview, - GtkMenu *menu, - gpointer user_data) -{ - GtkWidget *menuitem; - - cm_return_if_fail(menu != NULL); - cm_return_if_fail(GTK_IS_MENU_SHELL(menu)); - - menuitem = gtk_separator_menu_item_new(); - gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); - gtk_widget_show(menuitem); - - menuitem = gtk_menu_item_new_with_mnemonic(_("Zoom _In")); - g_signal_connect(G_OBJECT(menuitem), "activate", - G_CALLBACK(textview_zoom_in), textview); - gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); - gtk_widget_set_sensitive(menuitem, - textview_font_size_percent == TEXTVIEW_FONT_SIZE_UNSET || - ((textview_font_size_percent + TEXTVIEW_FONT_SIZE_STEP ) <= TEXTVIEW_FONT_SIZE_MAX)); - gtk_widget_show(menuitem); - - menuitem = gtk_menu_item_new_with_mnemonic(_("Zoom _Out")); - g_signal_connect(G_OBJECT(menuitem), "activate", - G_CALLBACK(textview_zoom_out), textview); - gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); - gtk_widget_set_sensitive(menuitem, - textview_font_size_percent == TEXTVIEW_FONT_SIZE_UNSET || - ((textview_font_size_percent - TEXTVIEW_FONT_SIZE_STEP ) >= TEXTVIEW_FONT_SIZE_MIN)); - gtk_widget_show(menuitem); - - menuitem = gtk_menu_item_new_with_mnemonic(_("Reset _zoom")); - g_signal_connect(G_OBJECT(menuitem), "activate", - G_CALLBACK(textview_zoom_reset), textview); - gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); - gtk_widget_set_sensitive(menuitem, - (textview_font_size_percent != TEXTVIEW_FONT_SIZE_UNSET && textview_font_size_percent != 0)); - gtk_widget_show(menuitem); -} - -static gboolean textview_scrolled(GtkWidget *widget, - GdkEvent *_event, - gpointer user_data) -{ - GdkEventScroll *event = (GdkEventScroll *)_event; - - /* Ctrl+mousewheel changes font size */ - if (event->state & GDK_CONTROL_MASK || event->state & GDK_SHIFT_MASK) { - - if (event->direction == GDK_SCROLL_UP) { - textview_zoom(widget, TRUE); - } else if (event->direction == GDK_SCROLL_DOWN) { - textview_zoom(widget, FALSE); - } else { - gdouble x, y; - - if ((event->direction == GDK_SCROLL_SMOOTH) && - gdk_event_get_scroll_deltas((GdkEvent *)event, &x, &y)) { - if (y < 0) - textview_zoom(widget, TRUE); - else - if (y >0) - textview_zoom(widget, FALSE); - } else - return FALSE; /* Scrolling left or right */ - } - return TRUE; - } - - return FALSE; -} - static gboolean textview_get_uri_range(TextView *textview, GtkTextIter *iter, GtkTextTag *tag, diff --git a/src/textview.h b/src/textview.h @@ -38,7 +38,7 @@ struct _ClickableText guint start; guint end; - + gboolean is_quote; gint quote_level; gboolean q_expanded; @@ -99,8 +99,6 @@ void textview_show_mime_part (TextView *textview, MimeInfo *partinfo); void textview_clear (TextView *textview); void textview_destroy (TextView *textview); -void textview_set_font (TextView *textview, - const gchar *codeset); void textview_set_text (TextView *textview, const gchar *text); void textview_set_position (TextView *textview, @@ -121,13 +119,13 @@ gboolean textview_search_string_backward (TextView *textview, void textview_cursor_wait(TextView *textview); void textview_cursor_normal(TextView *textview); void textview_show_icon(TextView *textview, const gchar *stock_id); -void textview_get_selection_offsets (TextView *textview, - gint *sel_start, +void textview_get_selection_offsets (TextView *textview, + gint *sel_start, gint *sel_end); -gboolean textview_uri_security_check (TextView *textview, +gboolean textview_uri_security_check (TextView *textview, ClickableText *uri, gboolean copied); -gchar *textview_get_visible_uri (TextView *textview, +gchar *textview_get_visible_uri (TextView *textview, ClickableText *uri); #define TEXTVIEW_INSERT(str) \