From d69d201890c3086200053e3be2126077a3e00b8d Mon Sep 17 00:00:00 2001
From: Luciano Antonio Siqueira <lcnsqr@gmail.com>
Date: Tue, 6 Nov 2012 17:40:58 -0200
Subject: [PATCH 1/3] Added pencil cursor option to the pen tool (from config
 file only)

---
 src/xo-file.c  | 4 ++++
 src/xo-paint.c | 4 ++++
 src/xournal.h  | 1 +
 3 files changed, 9 insertions(+)

diff --git a/src/xo-file.c b/src/xo-file.c
index ac8753c..884f11d 100644
--- a/src/xo-file.c
+++ b/src/xo-file.c
@@ -1715,6 +1715,9 @@ void save_config_to_file(void)
   update_keyval("tools", "startup_tool",
     _(" selected tool at startup (pen, eraser, highlighter, selectregion, selectrect, vertspace, hand, image)"),
     g_strdup(tool_names[ui.startuptool]));
+  update_keyval("tools", "pen_cursor",
+    _(" Use the pencil from cursor theme instead of a color dot (true/false)"),
+    g_strdup(ui.pen_cursor?"true":"false"));
   update_keyval("tools", "pen_color",
     _(" default pen color"),
     (ui.default_brushes[TOOL_PEN].color_no>=0)?
@@ -2060,6 +2063,7 @@ void load_config_from_file(void)
 
   parse_keyval_enum("tools", "startup_tool", &ui.startuptool, tool_names, NUM_TOOLS);
   ui.toolno[0] = ui.startuptool;
+  parse_keyval_boolean("tools", "pen_cursor", &ui.pen_cursor);
   parse_keyval_enum_color("tools", "pen_color", 
      &(ui.brushes[0][TOOL_PEN].color_no), &(ui.brushes[0][TOOL_PEN].color_rgba),
      color_names, predef_colors_rgba, COLOR_MAX);
diff --git a/src/xo-paint.c b/src/xo-paint.c
index 5b2e776..41c8f48 100644
--- a/src/xo-paint.c
+++ b/src/xo-paint.c
@@ -54,6 +54,10 @@ void set_cursor_busy(gboolean busy)
 
 GdkCursor *make_pen_cursor(guint color_rgba)
 {
+  if (ui.pen_cursor == TRUE) {
+	  return gdk_cursor_new_for_display(gdk_display_get_default(), GDK_PENCIL);
+  }
+  
   int rowstride, x, y;
   guchar col[4], *pixels;
   
diff --git a/src/xournal.h b/src/xournal.h
index 62625ab..b3a91c4 100644
--- a/src/xournal.h
+++ b/src/xournal.h
@@ -287,6 +287,7 @@ typedef struct UIData {
   gboolean view_continuous, fullscreen, maximize_at_start;
   gboolean in_update_page_stuff; // semaphore to avoid scrollbar retroaction
   struct Selection *selection;
+  gboolean pen_cursor; // Use pencil cursor (default is a dot in current color)
   GdkCursor *cursor;
   GdkPixbuf *pen_cursor_pix, *hiliter_cursor_pix;
   gboolean progressive_bg; // update PDF bg's one at a time
-- 
1.7.11.7


From 745c1765512ae253f6c9f12b0314f345f8465e9f Mon Sep 17 00:00:00 2001
From: Luciano Antonio Siqueira <lcnsqr@gmail.com>
Date: Tue, 6 Nov 2012 19:04:31 -0200
Subject: [PATCH 2/3] Added menu option to change the pen cursor

---
 po/pt_BR.po        |  3 +++
 src/main.c         |  4 ++++
 src/xo-callbacks.c |  9 +++++++++
 src/xo-callbacks.h |  4 ++++
 src/xo-interface.c | 16 ++++++++++++++++
 5 files changed, 36 insertions(+)

diff --git a/po/pt_BR.po b/po/pt_BR.po
index beccd8b..494d244 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -404,6 +404,9 @@ msgstr "_grosso"
 msgid "ver_y thick"
 msgstr "m_uito grosso"
 
+msgid "Pencil cursor"
+msgstr "Cursor de lápis"
+
 #: src/xo-interface.c:1071
 msgid "Eraser Optio_ns"
 msgstr "Opções da borracha"
diff --git a/src/main.c b/src/main.c
index e35d50a..912c8dd 100644
--- a/src/main.c
+++ b/src/main.c
@@ -199,6 +199,10 @@ void init_stuff (int argc, char *argv[])
   ui.screen_width = gdk_screen_get_width(screen);
   ui.screen_height = gdk_screen_get_height(screen);
   
+  // Pencil cursor
+  gtk_check_menu_item_set_active(
+    GTK_CHECK_MENU_ITEM(GET_COMPONENT("penCursor")), TRUE);
+  
   can_xinput = FALSE;
   dev_list = gdk_devices_list();
   while (dev_list != NULL) {
diff --git a/src/xo-callbacks.c b/src/xo-callbacks.c
index 8dad7c9..4e29ae8 100644
--- a/src/xo-callbacks.c
+++ b/src/xo-callbacks.c
@@ -2020,6 +2020,15 @@ on_penthicknessVeryThick_activate      (GtkMenuItem     *menuitem,
 
 
 void
+on_penCursor_activate           (GtkMenuItem     *menuitem,
+                                 gpointer         user_data)
+{
+  ui.pen_cursor = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM (menuitem));
+  update_cursor();
+}
+
+
+void
 on_eraserFine_activate                 (GtkMenuItem     *menuitem,
                                         gpointer         user_data)
 {
diff --git a/src/xo-callbacks.h b/src/xo-callbacks.h
index bce8b48..bf52472 100644
--- a/src/xo-callbacks.h
+++ b/src/xo-callbacks.h
@@ -309,6 +309,10 @@ on_penthicknessVeryThick_activate      (GtkMenuItem     *menuitem,
                                         gpointer         user_data);
 
 void
+on_penCursor_activate                  (GtkMenuItem     *menuitem,
+                                        gpointer         user_data);
+
+void
 on_eraserFine_activate                 (GtkMenuItem     *menuitem,
                                         gpointer         user_data);
 
diff --git a/src/xo-interface.c b/src/xo-interface.c
index b4d71e8..ed2ae86 100644
--- a/src/xo-interface.c
+++ b/src/xo-interface.c
@@ -179,6 +179,8 @@ create_winMain (void)
   GtkWidget *penthicknessMedium;
   GtkWidget *penthicknessThick;
   GtkWidget *penthicknessVeryThick;
+  GtkWidget *separator26;
+  GtkWidget *penCursor;
   GtkWidget *toolsEraserOptions;
   GtkWidget *toolsEraserOptions_menu;
   GSList *eraserFine_group = NULL;
@@ -1081,6 +1083,15 @@ create_winMain (void)
   gtk_container_add (GTK_CONTAINER (toolsPenOptions_menu), penthicknessVeryThick);
   gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (penthicknessVeryThick), TRUE);
 
+  separator26 = gtk_separator_menu_item_new ();
+  gtk_widget_show (separator26);
+  gtk_container_add (GTK_CONTAINER (toolsPenOptions_menu), separator26);
+  gtk_widget_set_sensitive (separator26, FALSE);
+
+  penCursor = gtk_check_menu_item_new_with_mnemonic (_("Pencil cursor"));
+  gtk_widget_show (penCursor);
+  gtk_container_add (GTK_CONTAINER (toolsPenOptions_menu), penCursor);
+
   toolsEraserOptions = gtk_menu_item_new_with_mnemonic (_("Eraser Optio_ns"));
   gtk_widget_show (toolsEraserOptions);
   gtk_container_add (GTK_CONTAINER (menuTools_menu), toolsEraserOptions);
@@ -2255,6 +2266,9 @@ create_winMain (void)
   g_signal_connect ((gpointer) penthicknessVeryThick, "toggled",
                     G_CALLBACK (on_penthicknessVeryThick_activate),
                     NULL);
+  g_signal_connect ((gpointer) penCursor, "toggled",
+                    G_CALLBACK (on_penCursor_activate),
+                    NULL);
   g_signal_connect ((gpointer) eraserFine, "toggled",
                     G_CALLBACK (on_eraserFine_activate),
                     NULL);
@@ -2698,6 +2712,8 @@ create_winMain (void)
   GLADE_HOOKUP_OBJECT (winMain, penthicknessMedium, "penthicknessMedium");
   GLADE_HOOKUP_OBJECT (winMain, penthicknessThick, "penthicknessThick");
   GLADE_HOOKUP_OBJECT (winMain, penthicknessVeryThick, "penthicknessVeryThick");
+  GLADE_HOOKUP_OBJECT (winMain, separator26, "separator26");
+  GLADE_HOOKUP_OBJECT (winMain, penCursor, "penCursor");
   GLADE_HOOKUP_OBJECT (winMain, toolsEraserOptions, "toolsEraserOptions");
   GLADE_HOOKUP_OBJECT (winMain, toolsEraserOptions_menu, "toolsEraserOptions_menu");
   GLADE_HOOKUP_OBJECT (winMain, eraserFine, "eraserFine");
-- 
1.7.11.7


From 6abef6d2683525e4f9298e06dc2ba62e8cf7cb13 Mon Sep 17 00:00:00 2001
From: Luciano Antonio Siqueira <lcnsqr@gmail.com>
Date: Wed, 7 Nov 2012 19:33:54 -0200
Subject: [PATCH 3/3] Pencil cursor option moved from Tools to Options

---
 src/main.c         |  8 ++++----
 src/xo-callbacks.c |  4 ++--
 src/xo-callbacks.h |  8 ++++----
 src/xo-file.c      | 10 ++++++----
 src/xo-interface.c | 25 +++++++++----------------
 src/xo-paint.c     |  2 +-
 src/xournal.h      |  2 +-
 7 files changed, 27 insertions(+), 32 deletions(-)

diff --git a/src/main.c b/src/main.c
index 912c8dd..00d3ff9 100644
--- a/src/main.c
+++ b/src/main.c
@@ -199,10 +199,6 @@ void init_stuff (int argc, char *argv[])
   ui.screen_width = gdk_screen_get_width(screen);
   ui.screen_height = gdk_screen_get_height(screen);
   
-  // Pencil cursor
-  gtk_check_menu_item_set_active(
-    GTK_CHECK_MENU_ITEM(GET_COMPONENT("penCursor")), TRUE);
-  
   can_xinput = FALSE;
   dev_list = gdk_devices_list();
   while (dev_list != NULL) {
@@ -240,6 +236,10 @@ void init_stuff (int argc, char *argv[])
   gtk_check_menu_item_set_active(
     GTK_CHECK_MENU_ITEM(GET_COMPONENT("optionsButtonSwitchMapping")), ui.button_switch_mapping);
   
+  // Pencil cursor
+  gtk_check_menu_item_set_active(
+    GTK_CHECK_MENU_ITEM(GET_COMPONENT("optionsPencilCursor")), ui.pencil_cursor);
+  
   hide_unimplemented();
 
   update_undo_redo_enabled();
diff --git a/src/xo-callbacks.c b/src/xo-callbacks.c
index 4e29ae8..543916f 100644
--- a/src/xo-callbacks.c
+++ b/src/xo-callbacks.c
@@ -2020,10 +2020,10 @@ on_penthicknessVeryThick_activate      (GtkMenuItem     *menuitem,
 
 
 void
-on_penCursor_activate           (GtkMenuItem     *menuitem,
+on_optionsPencilCursor_activate (GtkMenuItem     *menuitem,
                                  gpointer         user_data)
 {
-  ui.pen_cursor = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM (menuitem));
+  ui.pencil_cursor = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM (menuitem));
   update_cursor();
 }
 
diff --git a/src/xo-callbacks.h b/src/xo-callbacks.h
index bf52472..3e776b6 100644
--- a/src/xo-callbacks.h
+++ b/src/xo-callbacks.h
@@ -309,10 +309,6 @@ on_penthicknessVeryThick_activate      (GtkMenuItem     *menuitem,
                                         gpointer         user_data);
 
 void
-on_penCursor_activate                  (GtkMenuItem     *menuitem,
-                                        gpointer         user_data);
-
-void
 on_eraserFine_activate                 (GtkMenuItem     *menuitem,
                                         gpointer         user_data);
 
@@ -501,6 +497,10 @@ on_optionsProgressiveBG_activate       (GtkMenuItem     *menuitem,
                                         gpointer         user_data);
 
 void
+on_optionsPencilCursor_activate        (GtkMenuItem     *menuitem,
+                                        gpointer         user_data);
+
+void
 on_mru_activate                        (GtkMenuItem     *menuitem,
                                         gpointer         user_data);
 
diff --git a/src/xo-file.c b/src/xo-file.c
index 884f11d..2665535 100644
--- a/src/xo-file.c
+++ b/src/xo-file.c
@@ -1480,6 +1480,7 @@ void init_config_default(void)
   ui.ignore_other_devices = TRUE;
   ui.left_handed = FALSE;
   ui.shorten_menus = FALSE;
+  ui.pencil_cursor = TRUE;
   ui.shorten_menu_items = g_strdup(DEFAULT_SHORTEN_MENUS);
   ui.auto_save_prefs = FALSE;
   ui.bg_apply_all_pages = FALSE;
@@ -1678,6 +1679,9 @@ void save_config_to_file(void)
   update_keyval("general", "poppler_force_cairo",
     _(" force PDF rendering through cairo (slower but nicer) (true/false)"),
     g_strdup(ui.poppler_force_cairo?"true":"false"));
+  update_keyval("general", "pencil_cursor",
+    _(" Use the pencil from cursor theme instead of a color dot (true/false)"),
+    g_strdup(ui.pencil_cursor?"true":"false"));
 
   update_keyval("paper", "width",
     _(" the default page width, in points (1/72 in)"),
@@ -1715,9 +1719,6 @@ void save_config_to_file(void)
   update_keyval("tools", "startup_tool",
     _(" selected tool at startup (pen, eraser, highlighter, selectregion, selectrect, vertspace, hand, image)"),
     g_strdup(tool_names[ui.startuptool]));
-  update_keyval("tools", "pen_cursor",
-    _(" Use the pencil from cursor theme instead of a color dot (true/false)"),
-    g_strdup(ui.pen_cursor?"true":"false"));
   update_keyval("tools", "pen_color",
     _(" default pen color"),
     (ui.default_brushes[TOOL_PEN].color_no>=0)?
@@ -2048,6 +2049,8 @@ void load_config_from_file(void)
   parse_keyval_boolean("general", "autosave_prefs", &ui.auto_save_prefs);
   parse_keyval_boolean("general", "poppler_force_cairo", &ui.poppler_force_cairo);
   
+  parse_keyval_boolean("general", "pencil_cursor", &ui.pencil_cursor);
+
   parse_keyval_float("paper", "width", &ui.default_page.width, 1., 5000.);
   parse_keyval_float("paper", "height", &ui.default_page.height, 1., 5000.);
   parse_keyval_enum_color("paper", "color", 
@@ -2063,7 +2066,6 @@ void load_config_from_file(void)
 
   parse_keyval_enum("tools", "startup_tool", &ui.startuptool, tool_names, NUM_TOOLS);
   ui.toolno[0] = ui.startuptool;
-  parse_keyval_boolean("tools", "pen_cursor", &ui.pen_cursor);
   parse_keyval_enum_color("tools", "pen_color", 
      &(ui.brushes[0][TOOL_PEN].color_no), &(ui.brushes[0][TOOL_PEN].color_rgba),
      color_names, predef_colors_rgba, COLOR_MAX);
diff --git a/src/xo-interface.c b/src/xo-interface.c
index ed2ae86..b30ab48 100644
--- a/src/xo-interface.c
+++ b/src/xo-interface.c
@@ -179,8 +179,6 @@ create_winMain (void)
   GtkWidget *penthicknessMedium;
   GtkWidget *penthicknessThick;
   GtkWidget *penthicknessVeryThick;
-  GtkWidget *separator26;
-  GtkWidget *penCursor;
   GtkWidget *toolsEraserOptions;
   GtkWidget *toolsEraserOptions_menu;
   GSList *eraserFine_group = NULL;
@@ -252,6 +250,7 @@ create_winMain (void)
   GtkWidget *optionsAutoloadPdfXoj;
   GtkWidget *optionsLeftHanded;
   GtkWidget *optionsShortenMenus;
+  GtkWidget *optionsPencilCursor;
   GtkWidget *separator21;
   GtkWidget *optionsAutoSavePrefs;
   GtkWidget *optionsSavePreferences;
@@ -1083,15 +1082,6 @@ create_winMain (void)
   gtk_container_add (GTK_CONTAINER (toolsPenOptions_menu), penthicknessVeryThick);
   gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (penthicknessVeryThick), TRUE);
 
-  separator26 = gtk_separator_menu_item_new ();
-  gtk_widget_show (separator26);
-  gtk_container_add (GTK_CONTAINER (toolsPenOptions_menu), separator26);
-  gtk_widget_set_sensitive (separator26, FALSE);
-
-  penCursor = gtk_check_menu_item_new_with_mnemonic (_("Pencil cursor"));
-  gtk_widget_show (penCursor);
-  gtk_container_add (GTK_CONTAINER (toolsPenOptions_menu), penCursor);
-
   toolsEraserOptions = gtk_menu_item_new_with_mnemonic (_("Eraser Optio_ns"));
   gtk_widget_show (toolsEraserOptions);
   gtk_container_add (GTK_CONTAINER (menuTools_menu), toolsEraserOptions);
@@ -1413,6 +1403,10 @@ create_winMain (void)
   gtk_widget_show (optionsShortenMenus);
   gtk_container_add (GTK_CONTAINER (menuOptions_menu), optionsShortenMenus);
 
+  optionsPencilCursor = gtk_check_menu_item_new_with_mnemonic (_("Pencil cursor"));
+  gtk_widget_show (optionsPencilCursor);
+  gtk_container_add (GTK_CONTAINER (menuOptions_menu), optionsPencilCursor);
+
   separator21 = gtk_separator_menu_item_new ();
   gtk_widget_show (separator21);
   gtk_container_add (GTK_CONTAINER (menuOptions_menu), separator21);
@@ -2266,9 +2260,6 @@ create_winMain (void)
   g_signal_connect ((gpointer) penthicknessVeryThick, "toggled",
                     G_CALLBACK (on_penthicknessVeryThick_activate),
                     NULL);
-  g_signal_connect ((gpointer) penCursor, "toggled",
-                    G_CALLBACK (on_penCursor_activate),
-                    NULL);
   g_signal_connect ((gpointer) eraserFine, "toggled",
                     G_CALLBACK (on_eraserFine_activate),
                     NULL);
@@ -2407,6 +2398,9 @@ create_winMain (void)
   g_signal_connect ((gpointer) optionsShortenMenus, "toggled",
                     G_CALLBACK (on_optionsShortenMenus_activate),
                     NULL);
+  g_signal_connect ((gpointer) optionsPencilCursor, "toggled",
+                    G_CALLBACK (on_optionsPencilCursor_activate),
+                    NULL);
   g_signal_connect ((gpointer) optionsAutoSavePrefs, "toggled",
                     G_CALLBACK (on_optionsAutoSavePrefs_activate),
                     NULL);
@@ -2712,8 +2706,6 @@ create_winMain (void)
   GLADE_HOOKUP_OBJECT (winMain, penthicknessMedium, "penthicknessMedium");
   GLADE_HOOKUP_OBJECT (winMain, penthicknessThick, "penthicknessThick");
   GLADE_HOOKUP_OBJECT (winMain, penthicknessVeryThick, "penthicknessVeryThick");
-  GLADE_HOOKUP_OBJECT (winMain, separator26, "separator26");
-  GLADE_HOOKUP_OBJECT (winMain, penCursor, "penCursor");
   GLADE_HOOKUP_OBJECT (winMain, toolsEraserOptions, "toolsEraserOptions");
   GLADE_HOOKUP_OBJECT (winMain, toolsEraserOptions_menu, "toolsEraserOptions_menu");
   GLADE_HOOKUP_OBJECT (winMain, eraserFine, "eraserFine");
@@ -2778,6 +2770,7 @@ create_winMain (void)
   GLADE_HOOKUP_OBJECT (winMain, optionsAutoloadPdfXoj, "optionsAutoloadPdfXoj");
   GLADE_HOOKUP_OBJECT (winMain, optionsLeftHanded, "optionsLeftHanded");
   GLADE_HOOKUP_OBJECT (winMain, optionsShortenMenus, "optionsShortenMenus");
+  GLADE_HOOKUP_OBJECT (winMain, optionsPencilCursor, "optionsPencilCursor");
   GLADE_HOOKUP_OBJECT (winMain, separator21, "separator21");
   GLADE_HOOKUP_OBJECT (winMain, optionsAutoSavePrefs, "optionsAutoSavePrefs");
   GLADE_HOOKUP_OBJECT (winMain, optionsSavePreferences, "optionsSavePreferences");
diff --git a/src/xo-paint.c b/src/xo-paint.c
index 41c8f48..83a27bc 100644
--- a/src/xo-paint.c
+++ b/src/xo-paint.c
@@ -54,7 +54,7 @@ void set_cursor_busy(gboolean busy)
 
 GdkCursor *make_pen_cursor(guint color_rgba)
 {
-  if (ui.pen_cursor == TRUE) {
+  if (ui.pencil_cursor == TRUE) {
 	  return gdk_cursor_new_for_display(gdk_display_get_default(), GDK_PENCIL);
   }
   
diff --git a/src/xournal.h b/src/xournal.h
index b3a91c4..ea5eacf 100644
--- a/src/xournal.h
+++ b/src/xournal.h
@@ -287,7 +287,7 @@ typedef struct UIData {
   gboolean view_continuous, fullscreen, maximize_at_start;
   gboolean in_update_page_stuff; // semaphore to avoid scrollbar retroaction
   struct Selection *selection;
-  gboolean pen_cursor; // Use pencil cursor (default is a dot in current color)
+  gboolean pencil_cursor; // Use pencil cursor (default is a dot in current color)
   GdkCursor *cursor;
   GdkPixbuf *pen_cursor_pix, *hiliter_cursor_pix;
   gboolean progressive_bg; // update PDF bg's one at a time
-- 
1.7.11.7

