Commit Diff


commit - ae27debd60f27b29810b6fe92373bb4064c8ee0d
commit + 8aa5c43ade178e04f68a7aa1fe09de63cfb2225f
blob - e6c459b3a4eb0dbe3a9a660120d0f2ac9f248741
blob + adfcd26b87034443b83b0844479e66942ac82a18
--- src/compose.c
+++ src/compose.c
@@ -82,7 +82,6 @@
 #include "codeconv.h"
 #include "utils.h"
 #include "gtkutils.h"
-#include "gtkshruler.h"
 #include "socket.h"
 #include "alertpanel.h"
 #include "manage_window.h"
@@ -370,9 +369,6 @@ static void compose_add_field_list	( Compose *compose,
 static void compose_notebook_size_alloc (GtkNotebook *notebook,
 					 GtkAllocation *allocation,
 					 GtkPaned *paned);
-static gboolean compose_edit_size_alloc (GtkEditable	*widget,
-					 GtkAllocation	*allocation,
-					 GtkSHRuler	*shruler);
 static void account_activated		(GtkComboBox *optmenu,
 					 gpointer	 data);
 static void attach_selected		(GtkTreeView	*tree_view,
@@ -458,8 +454,6 @@ static void compose_toggle_autowrap_cb	(GtkToggleActio
 static void compose_toggle_autoindent_cb(GtkToggleAction *action,
 					 gpointer	 data);
 
-static void compose_toggle_ruler_cb	(GtkToggleAction *action,
-					 gpointer	 data);
 static void compose_toggle_sign_cb	(GtkToggleAction *action,
 					 gpointer	 data);
 static void compose_toggle_encrypt_cb	(GtkToggleAction *action,
@@ -685,7 +679,6 @@ static GtkToggleActionEntry compose_toggle_entries[] =
 	{"Options/Sign",             NULL, N_("Si_gn"), NULL, NULL, G_CALLBACK(compose_toggle_sign_cb), FALSE }, /* Toggle */
 	{"Options/Encrypt",          NULL, N_("_Encrypt"), NULL, NULL, G_CALLBACK(compose_toggle_encrypt_cb), FALSE }, /* Toggle */
 	{"Options/RemoveReferences", NULL, N_("Remo_ve references"), NULL, NULL, G_CALLBACK(compose_toggle_remove_refs_cb), FALSE }, /* Toggle */
-	{"Tools/ShowRuler",          NULL, N_("Show _ruler"), NULL, NULL, G_CALLBACK(compose_toggle_ruler_cb), FALSE }, /* Toggle */
 };
 
 static GtkRadioActionEntry compose_radio_rm_entries[] =
@@ -2494,7 +2487,6 @@ Compose *compose_redirect(PrefsAccount *account, MsgIn
 	cm_menu_set_sensitive_full(compose->ui_manager, "Menu/Message/ReplaceSig", FALSE);
 	cm_menu_set_sensitive_full(compose->ui_manager, "Menu/Edit", FALSE);
 	cm_menu_set_sensitive_full(compose->ui_manager, "Menu/Options", FALSE);
-	cm_menu_set_sensitive_full(compose->ui_manager, "Menu/Tools/ShowRuler", FALSE);
 	cm_menu_set_sensitive_full(compose->ui_manager, "Menu/Tools/Actions", FALSE);
 
 	if (compose->toolbar->sendl_btn)
@@ -7526,8 +7518,6 @@ static Compose *compose_create(PrefsAccount *account,
 	GtkWidget *paned;
 
 	GtkWidget *edit_vbox;
-	GtkWidget *ruler_hbox;
-	GtkWidget *ruler;
 	GtkWidget *scrolledwin;
 	GtkWidget *text;
 	GtkTextBuffer *buffer;
@@ -7763,7 +7753,6 @@ static Compose *compose_create(PrefsAccount *account,
 /* phew. */
 
 /* Tools menu */
-	MENUITEM_ADDUI_MANAGER(compose->ui_manager, "/Menu/Tools", "ShowRuler", "Tools/ShowRuler", GTK_UI_MANAGER_MENUITEM)
 	MENUITEM_ADDUI_MANAGER(compose->ui_manager, "/Menu/Tools", "AddressBook", "Tools/AddressBook", GTK_UI_MANAGER_MENUITEM)
 	MENUITEM_ADDUI_MANAGER(compose->ui_manager, "/Menu/Tools", "Template", "Tools/Template", GTK_UI_MANAGER_MENU)
 	MENUITEM_ADDUI_MANAGER(compose->ui_manager, "/Menu/Tools/Template", "PlaceHolder", "Tools/Template/PlaceHolder", GTK_UI_MANAGER_MENUITEM)
@@ -7849,15 +7838,6 @@ static Compose *compose_create(PrefsAccount *account,
 
 	gtk_box_pack_start(GTK_BOX(edit_vbox), subject_hbox, FALSE, FALSE, 0);
 
-	/* ruler */
-	ruler_hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
-	gtk_box_pack_start(GTK_BOX(edit_vbox), ruler_hbox, FALSE, FALSE, 0);
-
-	ruler = gtk_shruler_new(GTK_ORIENTATION_HORIZONTAL);
-	gtk_shruler_set_range(GTK_SHRULER(ruler), 0.0, 100.0, 1.0);
-	gtk_box_pack_start(GTK_BOX(ruler_hbox), ruler, TRUE, TRUE,
-			   BORDER_WIDTH);
-
 	/* text widget */
 	scrolledwin = gtk_scrolled_window_new(NULL, NULL);
 	gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwin),
@@ -7879,9 +7859,6 @@ static Compose *compose_create(PrefsAccount *account,
 	gtk_text_buffer_add_selection_clipboard(buffer, clipboard);
 
 	gtk_container_add(GTK_CONTAINER(scrolledwin), text);
-	g_signal_connect_after(G_OBJECT(text), "size_allocate",
-			       G_CALLBACK(compose_edit_size_alloc),
-			       ruler);
 	g_signal_connect(G_OBJECT(buffer), "changed",
 			 G_CALLBACK(compose_changed_cb), compose);
 	g_signal_connect(G_OBJECT(text), "grab_focus",
@@ -7971,8 +7948,6 @@ static Compose *compose_create(PrefsAccount *account,
 
 	compose->notebook      = notebook;
 	compose->edit_vbox     = edit_vbox;
-	compose->ruler_hbox    = ruler_hbox;
-	compose->ruler         = ruler;
 	compose->scrolledwin   = scrolledwin;
 	compose->text	       = text;
 
@@ -8097,11 +8072,6 @@ static Compose *compose_create(PrefsAccount *account,
 
 	compose_list = g_list_append(compose_list, compose);
 
-	if (!prefs_common.show_ruler)
-		gtk_widget_hide(ruler_hbox);
-
-	cm_toggle_menu_set_active_full(compose->ui_manager, "Menu/Tools/ShowRuler", prefs_common.show_ruler);
-
 	compose_set_out_encoding(compose);
 
 	/* Actions menu */
@@ -9521,7 +9491,6 @@ static char *ext_editor_menu_entries[] = {
 #if USE_ENCHANT
 	"Menu/Spelling",
 #endif
-	"Menu/Tools/ShowRuler",
 	"Menu/Tools/Actions",
 	NULL
 };
@@ -9542,8 +9511,6 @@ static void compose_set_ext_editor_sensitive(Compose *
 			if (compose->exteditor_socket)
 				gtk_widget_hide(compose->exteditor_socket);
 			gtk_widget_show(compose->scrolledwin);
-			if (prefs_common.show_ruler)
-				gtk_widget_show(compose->ruler_hbox);
 			/* Fix the focus, as it doesn't go anywhere when the
 			 * socket is hidden or destroyed */
 			gtk_widget_child_focus(compose->window, GTK_DIR_TAB_BACKWARD);
@@ -9554,7 +9521,6 @@ static void compose_set_ext_editor_sensitive(Compose *
 			if (gtk_widget_is_focus(compose->text))
 				gtk_widget_child_focus(compose->window, GTK_DIR_TAB_BACKWARD);
 			gtk_widget_hide(compose->scrolledwin);
-			gtk_widget_hide(compose->ruler_hbox);
 			gtk_widget_show(compose->exteditor_socket);
 		}
 	} else {
@@ -9662,31 +9628,6 @@ static void compose_notebook_size_alloc(GtkNotebook *n
 	prefs_common.compose_notebook_height = gtk_paned_get_position(paned);
 }
 
-/* compose_edit_size_alloc() - called when resized. don't know whether Gtk
- * includes "non-client" (windows-izm) in calculation, so this calculation
- * may not be accurate.
- */
-static gboolean compose_edit_size_alloc(GtkEditable *widget,
-					GtkAllocation *allocation,
-					GtkSHRuler *shruler)
-{
-	if (prefs_common.show_ruler) {
-		gint char_width = 0, char_height = 0;
-		gint line_width_in_chars;
-
-		gtkut_get_font_size(GTK_WIDGET(widget),
-				    &char_width, &char_height);
-		line_width_in_chars =
-			(allocation->width - allocation->x) / char_width;
-
-		/* got the maximum */
-		gtk_shruler_set_range(GTK_SHRULER(shruler),
-				    0.0, line_width_in_chars, 0);
-	}
-
-	return TRUE;
-}
-
 typedef struct {
 	gchar 			*header;
 	gchar 			*entry;
@@ -11253,20 +11194,6 @@ static void compose_apply_folder_privacy_settings(Comp
 	}
 }
 
-static void compose_toggle_ruler_cb(GtkToggleAction *action, gpointer data)
-{
-	Compose *compose = (Compose *)data;
-
-	if (gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action))) {
-		gtk_widget_show(compose->ruler_hbox);
-		prefs_common.show_ruler = TRUE;
-	} else {
-		gtk_widget_hide(compose->ruler_hbox);
-		gtk_widget_queue_resize(compose->edit_vbox);
-		prefs_common.show_ruler = FALSE;
-	}
-}
-
 static void compose_attach_drag_received_cb (GtkWidget		*widget,
 					     GdkDragContext	*context,
 					     gint		 x,
blob - 367e40fbdafcc092ee44adc9d152bb156081d216
blob + 565d444ccbf4b1374714b0be94d815509543d97d
--- src/compose.h
+++ src/compose.h
@@ -143,8 +143,6 @@ struct _Compose
 
 	/* Textedit */
 	GtkWidget *edit_vbox;
-	GtkWidget *ruler_hbox;
-	GtkWidget *ruler;
 	GtkWidget *scrolledwin;
 	GtkWidget *text;
 	GtkWidget *from_name;
blob - b77e0e45ce6a726d0a93cc581d8f912875d2feae
blob + d15f62336d67bfc15c132b150edf423e80be335d
--- src/folderutils.c
+++ src/folderutils.c
@@ -22,7 +22,6 @@
 #include <glib.h>
 
 #include "utils.h"
-#include "prefs_common.h"
 #include "folderutils.h"
 #include "prefs_account.h"
 #include "account.h"
@@ -178,8 +177,6 @@ static gboolean folderutils_mark_all_read_node_func(GN
 {
 	if (node) {
 		FolderItem *sub_item = (FolderItem *) node->data;
-		if (prefs_common.run_processingrules_before_mark_all)
-			folderview_run_processing(sub_item);
 		folderutils_mark_all_read(sub_item, (gboolean) GPOINTER_TO_INT(data));
 	}
 	return(FALSE);
blob - 31b72c81a9118984569e47377f8b1e9c7451a45c
blob + 1c7af9df07afe91991da94997d3c9c20864bc675
--- src/folderview.c
+++ src/folderview.c
@@ -184,8 +184,6 @@ static void folderview_send_queue_cb	(GtkAction 	*acti
 
 static void folderview_search_cb	(GtkAction 	*action,
 					 gpointer	 data);
-static void folderview_run_processing_cb(GtkAction 	*action,
-					 gpointer	 data);
 static void folderview_startup_folder_cb(GtkAction	*action,
 					 gpointer	 data);
 
@@ -228,7 +226,6 @@ static gboolean folderview_update_folder	 (gpointer 	 
 					  gpointer 	    userdata);
 static gboolean folderview_update_item_claws	 (gpointer 	    source,
 					  gpointer	    data);
-static void folderview_processing_cb(GtkAction *action, gpointer data);
 static void folderview_set_sens_and_popup_menu(FolderView *folderview, gint row,
 				GdkEventButton *event);
 static void folderview_header_set_displayed_columns_cb(GtkAction *gaction,
@@ -247,11 +244,9 @@ static GtkActionEntry folderview_common_popup_entries[
 	{"FolderViewPopup/MarkAllReadRec",   NULL, N_("Mark all read recursi_vely"), NULL, NULL, G_CALLBACK(mark_all_read_recursive_cb) },
 	{"FolderViewPopup/MarkAllUnreadRec", NULL, N_("Mark all unread recursi_vely"), NULL, NULL, G_CALLBACK(mark_all_unread_recursive_cb) },
 	{"FolderViewPopup/---",              NULL, "---", NULL, NULL , NULL},
-	{"FolderViewPopup/RunProcessing",    NULL, N_("R_un processing rules"), NULL, NULL, G_CALLBACK(folderview_run_processing_cb) },
 	{"FolderViewPopup/SearchFolder",     NULL, N_("_Search folder..."), NULL, NULL, G_CALLBACK(folderview_search_cb) },
 	{"FolderViewPopup/OpenFolder",       NULL, N_("Open on start-up"), NULL, NULL, G_CALLBACK(folderview_startup_folder_cb) },
 	{"FolderViewPopup/Properties",       NULL, N_("_Properties..."), NULL, NULL, G_CALLBACK(folderview_property_cb) },
-	{"FolderViewPopup/Processing",       NULL, N_("Process_ing..."), NULL, NULL, G_CALLBACK(folderview_processing_cb) },
 	{"FolderViewPopup/EmptyTrash",       NULL, N_("Empty _trash..."), NULL, NULL, G_CALLBACK(folderview_empty_trash_cb) },
 	{"FolderViewPopup/SendQueue",        NULL, N_("Send _queue..."), NULL, NULL, G_CALLBACK(folderview_send_queue_cb) },
 
@@ -884,8 +879,6 @@ static void mark_all_read_unread_handler(GtkAction *ac
 		if (recursive)
 			folderutils_mark_all_read_recursive(item, TRUE);
 		else {
-			if (prefs_common.run_processingrules_before_mark_all)
-				folderview_run_processing(item);
 			folderutils_mark_all_read(item, TRUE);
 		}
 	} else {
@@ -893,8 +886,6 @@ static void mark_all_read_unread_handler(GtkAction *ac
 			folderutils_mark_all_read_recursive(item, FALSE);
 		else {
 			folderutils_mark_all_read(item, FALSE);
-			if (prefs_common.run_processingrules_before_mark_all)
-				folderview_run_processing(item);
 		}
 	}
 	if (folderview->summaryview->folder_item != item && !recursive)
@@ -1162,11 +1153,6 @@ gint folderview_check_new(Folder *folder)
 			if (folder && folder != item->folder) continue;
 			if (!folder && !FOLDER_IS_LOCAL(item->folder)) continue;
 			if (!item->prefs->newmailcheck) continue;
-			if (item->processing_pending == TRUE) {
-				debug_print("skipping %s, processing pending\n",
-					item->path ? item->path : item->name);
-				continue;
-			}
 			if (item->scanning != ITEM_NOT_SCANNING) {
 				debug_print("skipping %s, scanning\n",
 					item->path ? item->path : item->name);
@@ -1187,8 +1173,7 @@ gint folderview_check_new(Folder *folder)
 			if (item->folder->klass->scan_required &&
 			    (item->folder->klass->scan_required(item->folder, item) ||
 			     item->folder->inbox == item ||
-			     item->opened == TRUE ||
-			     item->processing_pending == TRUE)) {
+			     item->opened == TRUE )) {
 				if (folder_item_scan(item) < 0) {
 					if (folder) {
 						if (FOLDER_TYPE(item->folder) == F_NEWS || FOLDER_IS_LOCAL(folder)) {
@@ -1938,11 +1923,9 @@ static void folderview_set_sens_and_popup_menu(FolderV
 	MENUITEM_ADDUI_MANAGER(ui_manager, "/Popup/FolderViewPopup", "MarkAllReadRec", "FolderViewPopup/MarkAllReadRec", GTK_UI_MANAGER_MENUITEM)
 	MENUITEM_ADDUI_MANAGER(ui_manager, "/Popup/FolderViewPopup", "MarkAllUnreadRec", "FolderViewPopup/MarkAllUnreadRec", GTK_UI_MANAGER_MENUITEM)
 	MENUITEM_ADDUI_MANAGER(ui_manager, "/Popup/FolderViewPopup", "Separator1", "FolderViewPopup/---", GTK_UI_MANAGER_SEPARATOR)
-	MENUITEM_ADDUI_MANAGER(ui_manager, "/Popup/FolderViewPopup", "RunProcessing", "FolderViewPopup/RunProcessing", GTK_UI_MANAGER_MENUITEM)
 	MENUITEM_ADDUI_MANAGER(ui_manager, "/Popup/FolderViewPopup", "SearchFolder", "FolderViewPopup/SearchFolder", GTK_UI_MANAGER_MENUITEM)
 	MENUITEM_ADDUI_MANAGER(ui_manager, "/Popup/FolderViewPopup", "OpenFolder", "FolderViewPopup/OpenFolder", GTK_UI_MANAGER_MENUITEM)
 	MENUITEM_ADDUI_MANAGER(ui_manager, "/Popup/FolderViewPopup", "Properties", "FolderViewPopup/Properties", GTK_UI_MANAGER_MENUITEM)
-	MENUITEM_ADDUI_MANAGER(ui_manager, "/Popup/FolderViewPopup", "Processing", "FolderViewPopup/Processing", GTK_UI_MANAGER_MENUITEM)
 
 	if (fpopup->set_sensitivity != NULL)
 		fpopup->set_sensitivity(ui_manager, item);
@@ -1976,11 +1959,6 @@ static void folderview_set_sens_and_popup_menu(FolderV
 		 folderview->selected == folderview->opened);
 	SET_SENS("FolderViewPopup/Properties", TRUE);
 
-	SET_SENS("FolderViewPopup/RunProcessing", item->prefs->processing &&
-		 item->total_msgs >= 1 && !item->processing_pending);
-	SET_SENS("FolderViewPopup/Processing", item->node->parent != NULL &&
-		!item->no_select && !item->processing_pending);
-
 	if (item->node->parent != NULL) {
 		gchar *id = folder_item_get_identifier(item);
 		SET_SENS("FolderViewPopup/OpenFolder", !prefs_common.goto_folder_on_startup
@@ -2561,25 +2539,6 @@ static void folderview_startup_folder_cb(GtkAction *ac
 	prefs_common.goto_folder_on_startup = prefs_common.startup_folder? TRUE : FALSE;
 }
 
-static void folderview_run_processing_cb(GtkAction *action, gpointer data)
-{
-	FolderView *folderview = (FolderView *)data;
-	FolderItem *item;
-
-	if (!folderview->selected) return;
-
-	item = folderview_get_selected_item(folderview);
-
-	folderview_run_processing(item);
-}
-
-void folderview_run_processing(FolderItem *item)
-{
-	cm_return_if_fail(item != NULL);
-	cm_return_if_fail(item->folder != NULL);
-	item->processing_pending = FALSE;
-}
-
 static void folderview_property_cb(GtkAction *action, gpointer data)
 {
 	FolderView *folderview = (FolderView *)data;
@@ -2721,12 +2680,6 @@ static gint folderview_clist_compare(GtkCMCList *clist
 	return g_utf8_collate(item1->name, item2->name);
 }
 
-static void folderview_processing_cb(GtkAction *action, gpointer data)
-{
-	fprintf(stderr, "delete folderview_processing_cb\n");
-	return;
-}
-
 void folderview_set_target_folder_color(GdkRGBA color_op)
 {
 	GList *list;
blob - 96b2f5a6be410813c4049267a96b5b7f144fd619
blob + dc7ec56b1814f5895be45dac69f06be45b5b2c42
--- src/gtk/Makefile.am
+++ src/gtk/Makefile.am
@@ -21,7 +21,6 @@ libclawsgtk_la_SOURCES = \
 	gtkcmclist.c \
 	gtksctree.c \
 	gtkunit.c \
-	gtkshruler.c \
 	gtkutils.c \
 	gtkvscrollbutton.c \
 	icon_legend.c \
@@ -62,8 +61,7 @@ clawsgtkinclude_HEADERS = \
 	claws-marshal.h \
 	gtkcmctree.h \
 	gtkcmclist.h \
-	gtksctree.h \
-	gtkshruler.h
+	gtksctree.h
 
 AM_CPPFLAGS = \
 	-I$(srcdir)/../common \
blob - c1866a1a56d9cb76dc76e24c5b01b84d9e88efb1 (mode 644)
blob + /dev/null
--- src/gtk/gtkshruler.c
+++ /dev/null
@@ -1,1048 +0,0 @@
-/* LIBGTK - The GTK Library
- * Copyright (C) 1995-1997 Peter Mattis and Spencer Kimball
- *
- * This library is free software: you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library.  If not, see
- * <http://www.gnu.org/licenses/>.
- */
-
-#include "config.h"
-#include "claws-features.h"
-
-#include <math.h>
-#include <string.h>
-
-#include <gtk/gtk.h>
-
-#include "gtkutils.h"
-#include "gtkshruler.h"
-#include "gtkunit.h"
-
-#define ROUND(x) ((int) ((x) + 0.5))
-
-/**
- * SECTION: gimpparam
- * @title: gimpparam
- * @short_description: Definitions of useful #GParamFlags.
- *
- * Definitions of useful #GParamFlags.
- **/
-
-
-/**
- * GTK_PARAM_STATIC_STRINGS:
- *
- * Since: GTK 2.4
- **/
-#define GTK_PARAM_STATIC_STRINGS (G_PARAM_STATIC_NAME | \
-                                   G_PARAM_STATIC_NICK | \
-                                   G_PARAM_STATIC_BLURB)
-
-/**
- * GTK_PARAM_READABLE:
- *
- * Since: GTK 2.4
- **/
-#define GTK_PARAM_READABLE       (G_PARAM_READABLE    | \
-                                   GTK_PARAM_STATIC_STRINGS)
-
-/**
- * GTK_PARAM_WRITABLE:
- *
- * Since: GTK 2.4
- **/
-#define GTK_PARAM_WRITABLE       (G_PARAM_WRITABLE    | \
-                                   GTK_PARAM_STATIC_STRINGS)
-
-/**
- * GTK_PARAM_READWRITE:
- *
- * Since: GTK 2.4
- **/
-#define GTK_PARAM_READWRITE      (G_PARAM_READWRITE   | \
-                                   GTK_PARAM_STATIC_STRINGS)
-
-
-/**
- * SECTION: gimpruler
- * @title: GtkSHRuler
- * @short_description: A ruler widget with configurable unit and orientation.
- *
- * A ruler widget with configurable unit and orientation.
- **/
-
-
-#define DEFAULT_RULER_FONT_SCALE  PANGO_SCALE_SMALL
-#define MINIMUM_INCR              5
-
-
-enum
-{
-  PROP_0,
-  PROP_ORIENTATION,
-  PROP_UNIT,
-  PROP_LOWER,
-  PROP_UPPER,
-  PROP_POSITION,
-  PROP_MAX_SIZE
-};
-
-
-/* All distances below are in 1/72nd's of an inch. (According to
- * Adobe that's a point, but points are really 1/72.27 in.)
- */
-typedef struct
-{
-  GtkOrientation   orientation;
-  GtkCMUnit        unit;
-  gdouble          lower;
-  gdouble          upper;
-  gdouble          position;
-  gdouble          max_size;
-
-  GdkWindow       *input_window;
-  cairo_surface_t *backing_store;
-  PangoLayout     *layout;
-  gdouble          font_scale;
-
-  gint             xsrc;
-  gint             ysrc;
-} GtkSHRulerPrivate;
-
-#define GTK_SHRULER_GET_PRIVATE(ruler) \
-  gtk_shruler_get_instance_private((GtkSHRuler *) ruler)
-
-
-static const struct
-{
-  const gdouble  ruler_scale[16];
-  const gint     subdivide[3];
-} ruler_metric =
-{
-  { 1, 2, 5, 10, 25, 50, 100, 250, 500, 1000, 2500, 5000, 10000, 25000, 50000, 100000 },
-  { 1, 5, 10 }
-};
-
-
-static void          gtk_shruler_dispose       (GObject        *object);
-static void          gtk_shruler_set_property  (GObject        *object,
-                                               guint            prop_id,
-                                               const GValue   *value,
-                                               GParamSpec     *pspec);
-static void          gtk_shruler_get_property  (GObject        *object,
-                                               guint           prop_id,
-                                               GValue         *value,
-                                               GParamSpec     *pspec);
-
-static void          gtk_shruler_realize       (GtkWidget      *widget);
-static void          gtk_shruler_unrealize     (GtkWidget      *widget);
-static void          gtk_shruler_map           (GtkWidget      *widget);
-static void          gtk_shruler_unmap         (GtkWidget      *widget);
-static void          gtk_shruler_size_allocate (GtkWidget      *widget,
-                                              GtkAllocation  *allocation);
-static void gtk_shruler_get_preferred_height (GtkWidget *widget,
-                                 gint      *minimal_height,
-                                 gint      *natural_height);
-static void gtk_shruler_get_preferred_width (GtkWidget *widget,
-                                 gint      *minimal_width,
-                                 gint      *natural_width);
-static void          gtk_shruler_size_request  (GtkWidget      *widget,
-                                              GtkRequisition *requisition);
-static void          gtk_shruler_style_set     (GtkWidget      *widget,
-                                              GtkStyle       *prev_style);
-static gboolean      gtk_shruler_motion_notify (GtkWidget      *widget,
-                                              GdkEventMotion *event);
-static gboolean      gtk_shruler_expose        (GtkWidget *widget,
-                                              cairo_t *cr);
-
-static void          gtk_shruler_draw_ticks    (GtkSHRuler      *ruler);
-static void          gtk_shruler_make_pixmap   (GtkSHRuler      *ruler);
-
-static PangoLayout * gtk_shruler_get_layout    (GtkWidget      *widget,
-                                              const gchar    *text);
-
-G_DEFINE_TYPE_WITH_CODE (GtkSHRuler, gtk_shruler, GTK_TYPE_WIDGET,
-		G_ADD_PRIVATE(GtkSHRuler))
-
-#define parent_class gtk_shruler_parent_class
-
-
-static void
-gtk_shruler_class_init (GtkSHRulerClass *klass)
-{
-  GObjectClass   *object_class = G_OBJECT_CLASS (klass);
-  GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
-
-  object_class->dispose             = gtk_shruler_dispose;
-  object_class->set_property        = gtk_shruler_set_property;
-  object_class->get_property        = gtk_shruler_get_property;
-
-  widget_class->realize             = gtk_shruler_realize;
-  widget_class->unrealize           = gtk_shruler_unrealize;
-  widget_class->map                 = gtk_shruler_map;
-  widget_class->unmap               = gtk_shruler_unmap;
-  widget_class->size_allocate       = gtk_shruler_size_allocate;
-  widget_class->get_preferred_width = gtk_shruler_get_preferred_width;
-  widget_class->get_preferred_height = gtk_shruler_get_preferred_height;
-  widget_class->style_set           = gtk_shruler_style_set;
-  widget_class->motion_notify_event = gtk_shruler_motion_notify;
-  widget_class->draw                = gtk_shruler_expose;
-
-  g_object_class_install_property (object_class,
-                                   PROP_ORIENTATION,
-                                   g_param_spec_enum ("orientation",
-                                                      "Orientation",
-                                                      "The orientation of the ruler",
-                                                      GTK_TYPE_ORIENTATION,
-                                                      GTK_ORIENTATION_HORIZONTAL,
-                                                      GTK_PARAM_READWRITE));
-
-  g_object_class_install_property (object_class,
-                                   PROP_LOWER,
-                                   gtk_param_spec_unit ("unit",
-                                                         "Unit",
-                                                         "Unit of ruler",
-                                                         TRUE, TRUE,
-                                                         CM_UNIT_PIXEL,
-                                                         GTK_PARAM_READWRITE));
-
-  g_object_class_install_property (object_class,
-                                   PROP_LOWER,
-                                   g_param_spec_double ("lower",
-                                                        "Lower",
-                                                        "Lower limit of ruler",
-                                                        -G_MAXDOUBLE,
-                                                        G_MAXDOUBLE,
-                                                        0.0,
-                                                        GTK_PARAM_READWRITE));
-
-  g_object_class_install_property (object_class,
-                                   PROP_UPPER,
-                                   g_param_spec_double ("upper",
-                                                        "Upper",
-                                                        "Upper limit of ruler",
-                                                        -G_MAXDOUBLE,
-                                                        G_MAXDOUBLE,
-                                                        0.0,
-                                                        GTK_PARAM_READWRITE));
-
-  g_object_class_install_property (object_class,
-                                   PROP_POSITION,
-                                   g_param_spec_double ("position",
-                                                        "Position",
-                                                        "Position of mark on the ruler",
-                                                        -G_MAXDOUBLE,
-                                                        G_MAXDOUBLE,
-                                                        0.0,
-                                                        GTK_PARAM_READWRITE));
-
-  g_object_class_install_property (object_class,
-                                   PROP_MAX_SIZE,
-                                   g_param_spec_double ("max-size",
-                                                        "Max Size",
-                                                        "Maximum size of the ruler",
-                                                        -G_MAXDOUBLE,
-                                                        G_MAXDOUBLE,
-                                                        0.0,
-                                                        GTK_PARAM_READWRITE));
-
-  gtk_widget_class_install_style_property (widget_class,
-                                           g_param_spec_double ("font-scale",
-                                                                NULL, NULL,
-                                                                0.0,
-                                                                G_MAXDOUBLE,
-                                                                DEFAULT_RULER_FONT_SCALE,
-                                                                GTK_PARAM_READABLE));
-}
-
-static void
-gtk_shruler_init (GtkSHRuler *ruler)
-{
-  GtkSHRulerPrivate *priv = GTK_SHRULER_GET_PRIVATE (ruler);
-
-  gtk_widget_set_has_window (GTK_WIDGET (ruler), FALSE);
-
-  priv->orientation   = GTK_ORIENTATION_HORIZONTAL;
-  priv->unit          = 0;
-  priv->lower         = 0;
-  priv->upper         = 0;
-  priv->position      = 0;
-  priv->max_size      = 0;
-  priv->backing_store = NULL;
-  priv->font_scale    = DEFAULT_RULER_FONT_SCALE;
-}
-
-static void
-gtk_shruler_dispose (GObject *object)
-{
-  G_OBJECT_CLASS (parent_class)->dispose (object);
-}
-
-static void
-gtk_shruler_set_property (GObject      *object,
-                         guint         prop_id,
-                         const GValue *value,
-                         GParamSpec   *pspec)
-{
-  GtkSHRuler        *ruler = GTK_SHRULER (object);
-  GtkSHRulerPrivate *priv  = GTK_SHRULER_GET_PRIVATE (ruler);
-
-  switch (prop_id)
-    {
-    case PROP_ORIENTATION:
-      priv->orientation = g_value_get_enum (value);
-      gtk_widget_queue_resize (GTK_WIDGET (ruler));
-      break;
-
-    case PROP_UNIT:
-      gtk_shruler_set_unit (ruler, g_value_get_int (value));
-      break;
-
-    case PROP_LOWER:
-      gtk_shruler_set_range (ruler,
-                            g_value_get_double (value),
-                            priv->upper,
-                            priv->max_size);
-      break;
-    case PROP_UPPER:
-      gtk_shruler_set_range (ruler,
-                            priv->lower,
-                            g_value_get_double (value),
-                            priv->max_size);
-      break;
-
-    case PROP_POSITION:
-      gtk_shruler_set_position (ruler, g_value_get_double (value));
-      break;
-
-    case PROP_MAX_SIZE:
-      gtk_shruler_set_range (ruler,
-                            priv->lower,
-                            priv->upper,
-                            g_value_get_double (value));
-      break;
-
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-    }
-}
-
-static void
-gtk_shruler_get_property (GObject    *object,
-                         guint       prop_id,
-                         GValue     *value,
-                         GParamSpec *pspec)
-{
-  GtkSHRuler        *ruler = GTK_SHRULER (object);
-  GtkSHRulerPrivate *priv  = GTK_SHRULER_GET_PRIVATE (ruler);
-
-  switch (prop_id)
-    {
-    case PROP_ORIENTATION:
-      g_value_set_enum (value, priv->orientation);
-      break;
-
-    case PROP_UNIT:
-      g_value_set_int (value, priv->unit);
-      break;
-
-    case PROP_LOWER:
-      g_value_set_double (value, priv->lower);
-      break;
-
-    case PROP_UPPER:
-      g_value_set_double (value, priv->upper);
-      break;
-
-    case PROP_POSITION:
-      g_value_set_double (value, priv->position);
-      break;
-
-    case PROP_MAX_SIZE:
-      g_value_set_double (value, priv->max_size);
-      break;
-
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-    }
-}
-
-/**
- * gtk_shruler_new:
- * @orientation: the ruler's orientation.
- *
- * Creates a new ruler.
- *
- * Return value: a new #GtkSHRuler widget.
- *
- * Since: GTK 2.8
- **/
-GtkWidget *
-gtk_shruler_new (GtkOrientation orientation)
-{
-  return g_object_new (GTK_TYPE_SHRULER,
-                       "orientation", orientation,
-                       NULL);
-}
-
-static void
-gtk_shruler_update_position (GtkSHRuler *ruler,
-                            gdouble    x,
-                            gdouble    y)
-{
-  GtkSHRulerPrivate *priv = GTK_SHRULER_GET_PRIVATE (ruler);
-  GtkAllocation     allocation;
-  gdouble           lower;
-  gdouble           upper;
-
-  gtk_widget_get_allocation (GTK_WIDGET (ruler), &allocation);
-  gtk_shruler_get_range (ruler, &lower, &upper, NULL);
-
-  if (priv->orientation == GTK_ORIENTATION_HORIZONTAL)
-    {
-      gtk_shruler_set_position (ruler,
-                               lower +
-                               (upper - lower) * x / allocation.width);
-    }
-  else
-    {
-      gtk_shruler_set_position (ruler,
-                               lower +
-                               (upper - lower) * y / allocation.height);
-    }
-}
-
-/**
- * gtk_shruler_set_unit:
- * @ruler: a #GtkSHRuler
- * @unit:  the #GtkCMUnit to set the ruler to
- *
- * This sets the unit of the ruler.
- *
- * Since: GTK 2.8
- */
-void
-gtk_shruler_set_unit (GtkSHRuler *ruler,
-                     GtkCMUnit  unit)
-{
-  GtkSHRulerPrivate *priv;
-
-  g_return_if_fail (GTK_IS_SHRULER (ruler));
-
-  priv = GTK_SHRULER_GET_PRIVATE (ruler);
-
-  if (priv->unit != unit)
-    {
-      priv->unit = unit;
-      g_object_notify (G_OBJECT (ruler), "unit");
-
-      gtk_widget_queue_draw (GTK_WIDGET (ruler));
-    }
-}
-
-/**
- * gtk_shruler_get_unit:
- * @ruler: a #GtkSHRuler
- *
- * Return value: the unit currently used in the @ruler widget.
- *
- * Since: GTK 2.8
- **/
-GtkCMUnit
-gtk_shruler_get_unit (GtkSHRuler *ruler)
-{
-  GtkSHRulerPrivate *priv;
-
-  g_return_val_if_fail (GTK_IS_SHRULER (ruler), 0);
-
-  priv = GTK_SHRULER_GET_PRIVATE (ruler);
-
-  return priv->unit;
-}
-
-/**
- * gtk_shruler_set_position:
- * @ruler: a #GtkSHRuler
- * @position: the position to set the ruler to
- *
- * This sets the position of the ruler.
- *
- * Since: GTK 2.8
- */
-void
-gtk_shruler_set_position (GtkSHRuler *ruler,
-                         gdouble    position)
-{
-  GtkSHRulerPrivate *priv;
-
-  g_return_if_fail (GTK_IS_SHRULER (ruler));
-
-  priv = GTK_SHRULER_GET_PRIVATE (ruler);
-
-  if (priv->position != position)
-    {
-      priv->position = position;
-      g_object_notify (G_OBJECT (ruler), "position");
-    }
-}
-
-/**
- * gtk_shruler_get_position:
- * @ruler: a #GtkSHRuler
- *
- * Return value: the current position of the @ruler widget.
- *
- * Since: GTK 2.8
- **/
-gdouble
-gtk_shruler_get_position (GtkSHRuler *ruler)
-{
-  GtkSHRulerPrivate *priv;
-
-  g_return_val_if_fail (GTK_IS_SHRULER (ruler), 0.0);
-
-  priv = GTK_SHRULER_GET_PRIVATE (ruler);
-
-  return priv->position;
-}
-
-/**
- * gtk_shruler_set_range:
- * @ruler: a #GtkSHRuler
- * @lower: the lower limit of the ruler
- * @upper: the upper limit of the ruler
- * @max_size: the maximum size of the ruler used when calculating the space to
- * leave for the text
- *
- * This sets the range of the ruler.
- *
- * Since: GTK 2.8
- */
-void
-gtk_shruler_set_range (GtkSHRuler *ruler,
-                      gdouble    lower,
-                      gdouble    upper,
-                      gdouble    max_size)
-{
-  GtkSHRulerPrivate *priv;
-
-  g_return_if_fail (GTK_IS_SHRULER (ruler));
-
-  priv = GTK_SHRULER_GET_PRIVATE (ruler);
-
-  g_object_freeze_notify (G_OBJECT (ruler));
-  if (priv->lower != lower)
-    {
-      priv->lower = lower;
-      g_object_notify (G_OBJECT (ruler), "lower");
-    }
-  if (priv->upper != upper)
-    {
-      priv->upper = upper;
-      g_object_notify (G_OBJECT (ruler), "upper");
-    }
-  if (priv->max_size != max_size)
-    {
-      priv->max_size = max_size;
-      g_object_notify (G_OBJECT (ruler), "max-size");
-    }
-  g_object_thaw_notify (G_OBJECT (ruler));
-
-  gtk_widget_queue_draw (GTK_WIDGET (ruler));
-}
-
-/**
- * gtk_shruler_get_range:
- * @ruler: a #GtkSHRuler
- * @lower: location to store lower limit of the ruler, or %NULL
- * @upper: location to store upper limit of the ruler, or %NULL
- * @max_size: location to store the maximum size of the ruler used when
- *            calculating the space to leave for the text, or %NULL.
- *
- * Retrieves values indicating the range and current position of a #GtkSHRuler.
- * See gtk_shruler_set_range().
- *
- * Since: GTK 2.8
- **/
-void
-gtk_shruler_get_range (GtkSHRuler *ruler,
-                      gdouble   *lower,
-                      gdouble   *upper,
-                      gdouble   *max_size)
-{
-  GtkSHRulerPrivate *priv;
-
-  g_return_if_fail (GTK_IS_SHRULER (ruler));
-
-  priv = GTK_SHRULER_GET_PRIVATE (ruler);
-
-  if (lower)
-    *lower = priv->lower;
-  if (upper)
-    *upper = priv->upper;
-  if (max_size)
-    *max_size = priv->max_size;
-}
-
-static void
-gtk_shruler_realize (GtkWidget *widget)
-{
-  GtkSHRuler        *ruler = GTK_SHRULER (widget);
-  GtkSHRulerPrivate *priv  = GTK_SHRULER_GET_PRIVATE (ruler);
-  GtkAllocation     allocation;
-  GdkWindowAttr     attributes;
-  gint              attributes_mask;
-
-  GTK_WIDGET_CLASS (gtk_shruler_parent_class)->realize (widget);
-
-  gtk_widget_get_allocation (widget, &allocation);
-
-  attributes.window_type = GDK_WINDOW_CHILD;
-  attributes.x           = allocation.x;
-  attributes.y           = allocation.y;
-  attributes.width       = allocation.width;
-  attributes.height      = allocation.height;
-  attributes.wclass      = GDK_INPUT_ONLY;
-  attributes.event_mask  = (gtk_widget_get_events (widget) |
-                            GDK_EXPOSURE_MASK              |
-                            GDK_POINTER_MOTION_MASK        |
-                            GDK_POINTER_MOTION_HINT_MASK);
-
-  attributes_mask = GDK_WA_X | GDK_WA_Y;
-
-  priv->input_window = gdk_window_new (gtk_widget_get_window (widget),
-                                       &attributes, attributes_mask);
-  gtk_widget_register_window (widget, priv->input_window);
-
-  gtk_shruler_make_pixmap (ruler);
-}
-
-static void
-gtk_shruler_unrealize (GtkWidget *widget)
-{
-  GtkSHRuler        *ruler = GTK_SHRULER (widget);
-  GtkSHRulerPrivate *priv  = GTK_SHRULER_GET_PRIVATE (ruler);
-
-  if (priv->backing_store)
-    {
-      cairo_surface_destroy (priv->backing_store);
-      priv->backing_store = NULL;
-    }
-
-  if (priv->layout)
-    {
-      g_object_unref (priv->layout);
-      priv->layout = NULL;
-    }
-
-  if (priv->input_window)
-    {
-      gtk_widget_unregister_window (widget, priv->input_window);
-      gdk_window_destroy (priv->input_window);
-      priv->input_window = NULL;
-    }
-
-  GTK_WIDGET_CLASS (gtk_shruler_parent_class)->unrealize (widget);
-}
-
-static void
-gtk_shruler_map (GtkWidget *widget)
-{
-  GtkSHRulerPrivate *priv = GTK_SHRULER_GET_PRIVATE (widget);
-
-  GTK_WIDGET_CLASS (parent_class)->map (widget);
-
-  if (priv->input_window)
-    gdk_window_show (priv->input_window);
-}
-
-static void
-gtk_shruler_unmap (GtkWidget *widget)
-{
-  GtkSHRulerPrivate *priv = GTK_SHRULER_GET_PRIVATE (widget);
-
-  if (priv->input_window)
-    gdk_window_hide (priv->input_window);
-
-  GTK_WIDGET_CLASS (parent_class)->unmap (widget);
-}
-
-static void
-gtk_shruler_size_allocate (GtkWidget     *widget,
-                          GtkAllocation *allocation)
-{
-  GtkSHRuler        *ruler = GTK_SHRULER (widget);
-  GtkSHRulerPrivate *priv  = GTK_SHRULER_GET_PRIVATE (ruler);
-
-  gtk_widget_set_allocation (widget, allocation);
-
-  if (gtk_widget_get_realized (widget))
-    {
-      gdk_window_move_resize (priv->input_window,
-                              allocation->x, allocation->y,
-                              allocation->width, allocation->height);
-
-      gtk_shruler_make_pixmap (ruler);
-    }
-}
-
-static void
-gtk_shruler_get_preferred_width (GtkWidget *widget,
-                                 gint      *minimal_width,
-                                 gint      *natural_width)
-{
-  GtkRequisition requisition;
-
-  gtk_shruler_size_request (widget, &requisition);
-
-  *minimal_width = *natural_width = requisition.width;
-}
-
-static void
-gtk_shruler_get_preferred_height (GtkWidget *widget,
-                                  gint      *minimal_height,
-                                  gint      *natural_height)
-{
-  GtkRequisition requisition;
-
-  gtk_shruler_size_request (widget, &requisition);
-
-  *minimal_height = *natural_height = requisition.height;
-}
-
-static void
-gtk_shruler_size_request (GtkWidget      *widget,
-                         GtkRequisition *requisition)
-{
-  GtkSHRulerPrivate *priv  = GTK_SHRULER_GET_PRIVATE (widget);
-  GtkStyle         *style = gtk_widget_get_style (widget);
-  PangoLayout      *layout;
-  PangoRectangle    ink_rect;
-  gint              size;
-
-  layout = gtk_shruler_get_layout (widget, "0123456789");
-  pango_layout_get_pixel_extents (layout, &ink_rect, NULL);
-
-  size = 2 + ink_rect.height * 1.7;
-
-  if (priv->orientation == GTK_ORIENTATION_HORIZONTAL)
-    {
-      requisition->width  = style->xthickness * 2 + 1;
-      requisition->height = style->ythickness * 2 + size;
-    }
-  else
-    {
-      requisition->width  = style->xthickness * 2 + size;
-      requisition->height = style->ythickness * 2 + 1;
-    }
-}
-
-static void
-gtk_shruler_style_set (GtkWidget *widget,
-                      GtkStyle  *prev_style)
-{
-  GtkSHRulerPrivate *priv = GTK_SHRULER_GET_PRIVATE (widget);
-
-  GTK_WIDGET_CLASS (gtk_shruler_parent_class)->style_set (widget, prev_style);
-
-  gtk_widget_style_get (widget,
-                        "font-scale", &priv->font_scale,
-                        NULL);
-
-  if (priv->layout)
-    {
-      g_object_unref (priv->layout);
-      priv->layout = NULL;
-    }
-}
-
-static gboolean
-gtk_shruler_motion_notify (GtkWidget      *widget,
-                          GdkEventMotion *event)
-{
-  GtkSHRuler *ruler = GTK_SHRULER (widget);
-
-  gdk_event_request_motions (event);
-
-  gtk_shruler_update_position (ruler, event->x, event->y);
-
-  return FALSE;
-}
-
-static gboolean
-gtk_shruler_expose (GtkWidget *widget,
-                    cairo_t   *cr)
-{
-  if (gtk_widget_is_drawable (widget))
-    {
-      GtkSHRuler        *ruler = GTK_SHRULER (widget);
-      GtkSHRulerPrivate *priv  = GTK_SHRULER_GET_PRIVATE (ruler);
-      GtkAllocation     allocation;
-
-      gtk_shruler_draw_ticks (ruler);
-
-      gtk_widget_get_allocation (widget, &allocation);
-
-      cairo_set_source_surface (cr, priv->backing_store, 0, 0);
-      cairo_paint (cr);
-    }
-
-  return FALSE;
-}
-
-static void
-gtk_shruler_draw_ticks (GtkSHRuler *ruler)
-{
-  GtkWidget        *widget = GTK_WIDGET (ruler);
-  GtkStyle         *style  = gtk_widget_get_style (widget);
-  GtkSHRulerPrivate *priv   = GTK_SHRULER_GET_PRIVATE (ruler);
-  GtkStateType      state  = gtk_widget_get_state (widget);
-  GtkAllocation     allocation;
-  cairo_t          *cr;
-  gint              i;
-  gint              width, height;
-  gint              xthickness;
-  gint              ythickness;
-  gint              length;
-  gdouble           lower, upper;  /* Upper and lower limits, in ruler units */
-  gdouble           increment;     /* Number of pixels per unit */
-  gint              scale;         /* Number of units per major unit */
-  gdouble           start, end, cur;
-  gchar             unit_str[32];
-  gint              digit_height;
-  gint              digit_offset;
-  gint              text_size;
-  gint              pos;
-  gdouble           max_size;
-  GtkCMUnit           unit;
-  PangoLayout      *layout;
-  PangoRectangle    logical_rect, ink_rect;
-
-  if (! gtk_widget_is_drawable (widget))
-    return;
-
-  gtk_widget_get_allocation (widget, &allocation);
-
-  xthickness = style->xthickness;
-  ythickness = style->ythickness;
-
-  layout = gtk_shruler_get_layout (widget, "0123456789");
-  pango_layout_get_extents (layout, &ink_rect, &logical_rect);
-
-  digit_height = PANGO_PIXELS (ink_rect.height) + 2;
-  digit_offset = ink_rect.y;
-
-  if (priv->orientation == GTK_ORIENTATION_HORIZONTAL)
-    {
-      width  = allocation.width;
-      height = allocation.height - ythickness * 2;
-    }
-  else
-    {
-      width  = allocation.height;
-      height = allocation.width - ythickness * 2;
-    }
-
-  cr = cairo_create (priv->backing_store);
-  gdk_cairo_set_source_color (cr, &style->bg[state]);
-
-  cairo_paint (cr);
-
-  gdk_cairo_set_source_color (cr, &style->fg[state]);
-
-  gtk_shruler_get_range (ruler, &lower, &upper, &max_size);
-
-  if ((upper - lower) == 0)
-    goto out;
-
-  increment = (gdouble) width / (upper - lower);
-
-  /* determine the scale
-   *   use the maximum extents of the ruler to determine the largest
-   *   possible number to be displayed.  Calculate the height in pixels
-   *   of this displayed text. Use this height to find a scale which
-   *   leaves sufficient room for drawing the ruler.
-   *
-   *   We calculate the text size as for the vruler instead of
-   *   actually measuring the text width, so that the result for the
-   *   scale looks consistent with an accompanying vruler.
-   */
-  scale = ceil (max_size);
-  g_snprintf (unit_str, sizeof (unit_str), "%d", scale);
-  text_size = strlen (unit_str) * digit_height + 1;
-
-  for (scale = 0; scale < G_N_ELEMENTS (ruler_metric.ruler_scale); scale++)
-    if (ruler_metric.ruler_scale[scale] * fabs (increment) > 2 * text_size)
-      break;
-
-  if (scale == G_N_ELEMENTS (ruler_metric.ruler_scale))
-    scale = G_N_ELEMENTS (ruler_metric.ruler_scale) - 1;
-
-  unit = gtk_shruler_get_unit (ruler);
-
-  /* drawing starts here */
-  length = 0;
-  for (i = G_N_ELEMENTS (ruler_metric.subdivide) - 1; i >= 0; i--)
-    {
-      gdouble subd_incr;
-
-      /* hack to get proper subdivisions at full pixels */
-      if (unit == CM_UNIT_PIXEL && scale == 1 && i == 1)
-        subd_incr = 1.0;
-      else
-        subd_incr = ((gdouble) ruler_metric.ruler_scale[scale] /
-                     (gdouble) ruler_metric.subdivide[i]);
-
-      if (subd_incr * fabs (increment) <= MINIMUM_INCR)
-        continue;
-
-      /* don't subdivide pixels */
-      if (unit == CM_UNIT_PIXEL && subd_incr < 1.0)
-        continue;
-
-      if (lower < upper)
-        {
-          start = floor (lower / subd_incr) * subd_incr;
-          end   = ceil  (upper / subd_incr) * subd_incr;
-        }
-      else
-        {
-          start = floor (upper / subd_incr) * subd_incr;
-          end   = ceil  (lower / subd_incr) * subd_incr;
-        }
-
-      for (cur = start; cur <= end; cur += subd_incr)
-        {
-          if (((int)cur) % 10 == 0)
-          	length = height * 2 / 3;
-          else if (((int)cur) % 5 == 0)
-            length = height / 3;
-          else
-            length = height / 4;
-
-          pos = ROUND ((cur - lower) * increment);
-
-          if (priv->orientation == GTK_ORIENTATION_HORIZONTAL)
-            {
-              cairo_rectangle (cr,
-                               pos, height + ythickness - length,
-                               1,   length);
-            }
-          else
-            {
-              cairo_rectangle (cr,
-                               height + xthickness - length, pos,
-                               length,                       1);
-            }
-
-          /* draw label */
-          if (i == 0 && ((int)cur) % 10 == 0)
-            {
-              g_snprintf (unit_str, sizeof (unit_str), "%d", (int) cur);
-
-              if (priv->orientation == GTK_ORIENTATION_HORIZONTAL)
-                {
-                  pango_layout_set_text (layout, unit_str, -1);
-                  pango_layout_get_extents (layout, &logical_rect, NULL);
-
-                  cairo_move_to (cr,
-                                 pos + 2,
-                                 ythickness + PANGO_PIXELS (logical_rect.y - digit_offset));
-                  pango_cairo_show_layout (cr, layout);
-                }
-              else
-                {
-                  gint j;
-
-                  for (j = 0; j < (int) strlen (unit_str); j++)
-                    {
-                      pango_layout_set_text (layout, unit_str + j, 1);
-                      pango_layout_get_extents (layout, NULL, &logical_rect);
-
-                      cairo_move_to (cr,
-                                     xthickness + 1,
-                                     pos + digit_height * j + 2 + PANGO_PIXELS (logical_rect.y - digit_offset));
-                      pango_cairo_show_layout (cr, layout);
-                    }
-                }
-            }
-        }
-    }
-
-  cairo_fill (cr);
-out:
-  cairo_destroy (cr);
-}
-
-static void
-gtk_shruler_make_pixmap (GtkSHRuler *ruler)
-{
-  GtkWidget        *widget = GTK_WIDGET (ruler);
-  GtkSHRulerPrivate *priv   = GTK_SHRULER_GET_PRIVATE (ruler);
-  GtkAllocation     allocation;
-
-  gtk_widget_get_allocation (widget, &allocation);
-
-  if (priv->backing_store)
-    cairo_surface_destroy (priv->backing_store);
-
-  priv->backing_store =
-    gdk_window_create_similar_surface (gtk_widget_get_window (widget),
-                                       CAIRO_CONTENT_COLOR,
-                                       allocation.width,
-                                       allocation.height);
-}
-
-
-static PangoLayout *
-gtk_shruler_create_layout (GtkWidget   *widget,
-                          const gchar *text)
-{
-  GtkSHRulerPrivate *priv = GTK_SHRULER_GET_PRIVATE (widget);
-  PangoLayout      *layout;
-  PangoAttrList    *attrs;
-  PangoAttribute   *attr;
-
-  layout = gtk_widget_create_pango_layout (widget, text);
-
-  attrs = pango_attr_list_new ();
-
-  attr = pango_attr_scale_new (priv->font_scale);
-  attr->start_index = 0;
-  attr->end_index   = -1;
-  pango_attr_list_insert (attrs, attr);
-
-  pango_layout_set_attributes (layout, attrs);
-  pango_attr_list_unref (attrs);
-
-  return layout;
-}
-
-static PangoLayout *
-gtk_shruler_get_layout (GtkWidget   *widget,
-                       const gchar *text)
-{
-  GtkSHRulerPrivate *priv = GTK_SHRULER_GET_PRIVATE (widget);
-
-  if (priv->layout)
-    {
-      pango_layout_set_text (priv->layout, text, -1);
-      return priv->layout;
-    }
-
-  priv->layout = gtk_shruler_create_layout (widget, text);
-
-  return priv->layout;
-}
blob - 59c1cd7fdacc1228654c9070f924cf8553328af1 (mode 644)
blob + /dev/null
--- src/gtk/gtkshruler.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/* LIBGTK - The GTK Library
- * Copyright (C) 1995-1997 Peter Mattis and Spencer Kimball
- *
- * This library is free software: you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library.  If not, see
- * <http://www.gnu.org/licenses/>.
- */
-
-#ifndef __GTK_SHRULER_H__
-#define __GTK_SHRULER_H__
-
-#include "gtkunit.h"
-
-G_BEGIN_DECLS
-
-#define GTK_TYPE_SHRULER            (gtk_shruler_get_type ())
-#define GTK_SHRULER(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_SHRULER, GtkSHRuler))
-#define GTK_SHRULER_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_SHRULER, GtkSHRulerClass))
-#define GTK_IS_SHRULER(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_SHRULER))
-#define GTK_IS_SHRULER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_SHRULER))
-#define GTK_SHRULER_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_SHRULER, GtkSHRulerClass))
-
-typedef struct _GtkSHRuler        GtkSHRuler;
-typedef struct _GtkSHRulerClass   GtkSHRulerClass;
-
-struct _GtkSHRuler
-{
-  GtkWidget  parent_instance;
-};
-
-struct _GtkSHRulerClass
-{
-  GtkWidgetClass  parent_class;
-
-  /* Padding for future expansion */
-  void (*_gtk_reserved1) (void);
-  void (*_gtk_reserved2) (void);
-  void (*_gtk_reserved3) (void);
-  void (*_gtk_reserved4) (void);
-};
-
-
-GType       gtk_shruler_get_type            (void) G_GNUC_CONST;
-
-GtkWidget * gtk_shruler_new                 (GtkOrientation  orientation);
-
-void        gtk_shruler_add_track_widget    (GtkSHRuler      *ruler,
-                                            GtkWidget      *widget);
-void        gtk_shruler_remove_track_widget (GtkSHRuler      *ruler,
-                                            GtkWidget      *widget);
-
-void        gtk_shruler_set_unit            (GtkSHRuler      *ruler,
-                                            GtkCMUnit        unit);
-GtkCMUnit     gtk_shruler_get_unit            (GtkSHRuler      *ruler);
-void        gtk_shruler_set_position        (GtkSHRuler      *ruler,
-                                            gdouble         position);
-gdouble     gtk_shruler_get_position        (GtkSHRuler      *ruler);
-void        gtk_shruler_set_range           (GtkSHRuler      *ruler,
-                                            gdouble         lower,
-                                            gdouble         upper,
-                                            gdouble         max_size);
-void        gtk_shruler_get_range           (GtkSHRuler      *ruler,
-                                            gdouble        *lower,
-                                            gdouble        *upper,
-                                            gdouble        *max_size);
-
-G_END_DECLS
-
-#endif /* __GTK_SHRULER_H__ */
blob - b4bed8b705904eee200464e6bcbe380a503ec9ba
blob + 838f338d8ae42c661b5142bf37064fac6932c22b
--- src/prefs_common.c
+++ src/prefs_common.c
@@ -228,9 +228,6 @@ static PrefParam param[] = {
 	{"default_reply_list", "TRUE", &prefs_common.default_reply_list, P_BOOL,
 	 NULL, NULL, NULL},
 
-	{"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
-	 NULL, NULL, NULL},
-
 	{"reply_quote_format", N_("On %d\\n%f wrote:\\n\\n%q\\n%X"),
 	 &prefs_common.quotefmt, P_STRING, NULL, NULL, NULL},
 
@@ -667,16 +664,9 @@ static PrefParam param[] = {
 	 &prefs_common.pixmap_theme_path, P_STRING,
 	 NULL, NULL, NULL},
 
-	{"run_processingrules_before_mark_all", "FALSE", &prefs_common.run_processingrules_before_mark_all, P_BOOL,
-	 NULL, NULL, NULL},
 	{"ask_mark_all_read", "TRUE", &prefs_common.ask_mark_all_read, P_BOOL,
 	 NULL, NULL, NULL},
 
-	{"ask_apply_per_account_filtering_rules", "TRUE", &prefs_common.ask_apply_per_account_filtering_rules, P_BOOL,
-	 NULL, NULL, NULL},
-	{"apply_per_account_filtering_rules", "0", &prefs_common.apply_per_account_filtering_rules, P_ENUM,
-	 NULL, NULL, NULL},
-
 	/* Addressbook */
 	{"addressbook_use_editaddress_dialog", "TRUE", &prefs_common.addressbook_use_editaddress_dialog,
 	 P_BOOL, NULL, NULL, NULL},
blob - a6afab69f71de9ec6ae35e413bfe840b52b3cc48
blob + 5f032280fc2458ddbc8bdcf7ebae7ac079afb717
--- src/prefs_common.h
+++ src/prefs_common.h
@@ -192,7 +192,6 @@ struct _PrefsCommon
 	gboolean default_reply_list;
 	gboolean forward_account_autosel;
 	gboolean reedit_account_autosel;
-	gboolean show_ruler;
 	gboolean autosave;
 	gint autosave_length;
 	gboolean autosave_encrypted;
@@ -413,9 +412,6 @@ struct _PrefsCommon
 
 	int hover_timeout; /* msecs mouse hover timeout */
 	gboolean ask_mark_all_read;
-	gboolean run_processingrules_before_mark_all;
-	gboolean ask_apply_per_account_filtering_rules;
-	gint apply_per_account_filtering_rules;
 
 	/* Other */
 	gchar *uri_cmd;
blob - 35924188cbcde96cd130c2ba066fce01e81dc9a1
blob + bc3f83ad3e6a3509be7033de8935875b58ca3c4c
--- src/prefs_other.c
+++ src/prefs_other.c
@@ -60,7 +60,6 @@ typedef struct _OtherPage
 	GtkWidget *checkbtn_warnqueued;
 	GtkWidget *spinbtn_iotimeout;
 	GtkWidget *checkbtn_gtk_enable_accels;
-	GtkWidget *checkbtn_askonfilter;
 	GtkWidget *checkbtn_real_time_sync;
 	GtkWidget *entry_attach_save_chmod;
 	GtkWidget *checkbtn_transhdr;
@@ -355,7 +354,6 @@ static void prefs_other_create_widget(PrefsPage *_page
 	GtkWidget *vbox2;
 	GtkWidget *checkbtn_transhdr;
 	GtkWidget *checkbtn_askonclean;
-	GtkWidget *checkbtn_askonfilter;
 	GtkWidget *checkbtn_real_time_sync;
 	GtkWidget *label_attach_save_chmod;
 	GtkWidget *entry_attach_save_chmod;
@@ -441,9 +439,6 @@ static void prefs_other_create_widget(PrefsPage *_page
 			     "will be translated into your language"));
 	PACK_CHECK_BUTTON (vbox2, checkbtn_askonclean,
 			   _("Ask before emptying trash"));
-	PACK_CHECK_BUTTON (vbox2, checkbtn_askonfilter,
-			   _("Ask about account specific filtering rules when "
-			     "filtering manually"));
 	PACK_CHECK_BUTTON (vbox2, checkbtn_real_time_sync,
 				   _("Synchronise offline folders as soon as possible"));
 
@@ -491,8 +486,6 @@ static void prefs_other_create_widget(PrefsPage *_page
 
 	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_transhdr),
 		prefs_common.trans_hdr);
-	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_askonfilter),
-		prefs_common.ask_apply_per_account_filtering_rules);
 	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_real_time_sync),
 		prefs_common.real_time_sync);
 
@@ -506,7 +499,6 @@ static void prefs_other_create_widget(PrefsPage *_page
 	prefs_other->spinbtn_iotimeout = spinbtn_iotimeout;
 	prefs_other->checkbtn_transhdr = checkbtn_transhdr;
 	prefs_other->checkbtn_gtk_enable_accels = checkbtn_gtk_enable_accels;
-	prefs_other->checkbtn_askonfilter = checkbtn_askonfilter;
 	prefs_other->checkbtn_real_time_sync = checkbtn_real_time_sync;
 	prefs_other->entry_attach_save_chmod = entry_attach_save_chmod;
 	prefs_other->page.widget = vbox1;
@@ -537,9 +529,6 @@ static void prefs_other_save(PrefsPage *_page)
 #endif
 	prefs_common.trans_hdr = gtk_toggle_button_get_active(
 			GTK_TOGGLE_BUTTON(page->checkbtn_transhdr));
-	prefs_common.ask_apply_per_account_filtering_rules =
-		gtk_toggle_button_get_active(
-			GTK_TOGGLE_BUTTON(page->checkbtn_askonfilter));
 	prefs_common.real_time_sync =
 		gtk_toggle_button_get_active(
 			GTK_TOGGLE_BUTTON(page->checkbtn_real_time_sync));
blob - 7c07ecb206d3d15b02c77bf0c466ac8310985717
blob + b98c2f093cb9f5015f86f7af94e963ce15bf4ac6
--- src/prefs_summaries.c
+++ src/prefs_summaries.c
@@ -73,7 +73,6 @@ typedef struct _SummariesPage
 	GtkWidget *spinbtn_mark_as_read_delay;
 	GtkWidget *checkbtn_immedexec;
 	GtkWidget *checkbtn_ask_mark_all_read;
-	GtkWidget *checkbtn_run_processingrules_mark_all_read;
   	GtkWidget *optmenu_sort_key;
   	GtkWidget *optmenu_sort_type;
 	GtkWidget *optmenu_summaryfromshow;
@@ -388,7 +387,6 @@ static void prefs_summaries_create_widget(PrefsPage *_
 	GtkAdjustment *spinbtn_mark_as_read_delay_adj;
 	GtkWidget *checkbtn_immedexec;
 	GtkWidget *checkbtn_ask_mark_all_read;
-	GtkWidget *checkbtn_run_processingrules_mark_all_read;
 	GtkWidget *label, *label_fill;
 	GtkListStore *menu;
 	GtkTreeIter iter;
@@ -477,10 +475,6 @@ static void prefs_summaries_create_widget(PrefsPage *_
 	g_signal_connect(G_OBJECT(startup_folder_select), "clicked",
 			 G_CALLBACK(foldersel_cb), startup_folder_entry);
 
-	PACK_CHECK_BUTTON
-		(vbox1, checkbtn_run_processingrules_mark_all_read,
-		 _("Run processing rules before marking all messages in a folder as read or unread"));
-
 	hbox1 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 8);
 	gtk_widget_show (hbox1);
 	gtk_box_pack_start(GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0);
@@ -754,7 +748,6 @@ static void prefs_summaries_create_widget(PrefsPage *_
 	prefs_summaries->spinbtn_mark_as_read_delay = spinbtn_mark_as_read_delay;
 	prefs_summaries->checkbtn_immedexec = checkbtn_immedexec;
 	prefs_summaries->checkbtn_ask_mark_all_read = checkbtn_ask_mark_all_read;
-	prefs_summaries->checkbtn_run_processingrules_mark_all_read = checkbtn_run_processingrules_mark_all_read;
 	prefs_summaries->optmenu_sort_key = optmenu_sort_key;
 	prefs_summaries->optmenu_sort_type = optmenu_sort_type;
 	prefs_summaries->optmenu_nextunreadmsgdialog = optmenu_nextunreadmsgdialog;
@@ -817,8 +810,6 @@ static void prefs_summaries_create_widget(PrefsPage *_
 			prefs_common.immediate_exec);
 	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_ask_mark_all_read),
 			prefs_common.ask_mark_all_read);
-	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_run_processingrules_mark_all_read),
-			prefs_common.run_processingrules_before_mark_all);
 
 	combobox_select_by_data(GTK_COMBO_BOX(optmenu_sort_key),
 			prefs_common.default_sort_key);
@@ -895,8 +886,6 @@ static void prefs_summaries_save(PrefsPage *_page)
 		GTK_TOGGLE_BUTTON(page->checkbtn_immedexec));
 	prefs_common.ask_mark_all_read = gtk_toggle_button_get_active(
 		GTK_TOGGLE_BUTTON(page->checkbtn_ask_mark_all_read));
-	prefs_common.run_processingrules_before_mark_all = gtk_toggle_button_get_active(
-		GTK_TOGGLE_BUTTON(page->checkbtn_run_processingrules_mark_all_read));
 	prefs_common.mark_as_read_delay = gtk_spin_button_get_value_as_int(
 			GTK_SPIN_BUTTON(page->spinbtn_mark_as_read_delay));
 	prefs_common.summary_col_lock = gtk_toggle_button_get_active(