Xournal 단축키 변경May 14, 2008

타블렛 노트북(후지쯔 P1610)을 쓰고 있는 터라, 필기장 프로그램인 Xournal 을 애용하고 있다.
윈도우의 OneNote 정도의 기능까지는 아니더라도, 타블렛XP 내장 필기장보다는 훨씬 강력하다.
무엇보다도 PDF에 끄적일 수 있는 게 강점이랄까. 윈도우에서는 Acrobat Pro나 PDF annotator 같은 상용 툴로 해야 하니까.

하나 불만인 점은, 단축키 바인딩이 컨트롤+쉬프트 조합으로 되어 있어서 누르기 불편하다는 거다.
텍스트 툴과 펜 툴을 자주 오가면서 쓰는 터라 좀 오래 쓰다 보면 새끼손가락에 쥐가 난다.
그래서 수업은 안듣고 소스를 열어봤다. -_-;

단순히 단축키만 바꿔놨더만(P, E, H, T 로) 텍스트 입력시에도 단축키를 인식해 버리는 바람에
좀 무식하게 accel_group 을 전역으로 빼버린 다음, 텍스트 입력을 시작할 때 단축키를 전부 꺼버리고
입력을 종료할 때(ESC키를 눌러도 입력이 종료되도록 변경함) 단축키를 켜게 해버렸다. -_-;;

CODE:
  1. diff -urN xournal-0.4.1.orig/src/main.c xournal-0.4.1/src/main.c
  2. --- xournal-0.4.1.orig/src/main.c   2007-09-16 10:17:27.000000000 +0900
  3. +++ xournal-0.4.1/src/main.c    2008-05-15 13:16:08.000000000 +0900
  4. @@ -14,6 +14,7 @@
  5.  #include "xo-file.h"
  6.  
  7.  GtkWidget *winMain;
  8. +GtkAccelGroup *accel_group;
  9.  GnomeCanvas *canvas;
  10.  
  11.  struct Journal journal; // the journal
  12. diff -urN xournal-0.4.1.orig/src/xo-callbacks.c xournal-0.4.1/src/xo-callbacks.c
  13. --- xournal-0.4.1.orig/src/xo-callbacks.c   2007-09-16 10:17:27.000000000 +0900
  14. +++ xournal-0.4.1/src/xo-callbacks.c    2008-05-15 13:16:08.000000000 +0900
  15. @@ -2505,6 +2505,9 @@
  16.                                          GdkEventKey     *event,
  17.                                          gpointer         user_data)
  18.  {
  19. +  if (event->keyval == 65307) {
  20. +    end_text();
  21. }
  22.    return FALSE;
  23.  }
  24.  
  25. diff -urN xournal-0.4.1.orig/src/xo-interface.c xournal-0.4.1/src/xo-interface.c
  26. --- xournal-0.4.1.orig/src/xo-interface.c   2007-09-16 10:17:27.000000000 +0900
  27. +++ xournal-0.4.1/src/xo-interface.c    2008-05-15 13:16:43.000000000 +0900
  28. @@ -334,7 +334,7 @@
  29.    GtkWidget *labelLayer;
  30.    GtkWidget *comboLayer;
  31.    GtkWidget *statusbar;
  32. -  GtkAccelGroup *accel_group;
  33. +  extern GtkAccelGroup *accel_group;
  34.    GtkTooltips *tooltips;
  35.  
  36.    tooltips = gtk_tooltips_new ();
  37. @@ -555,7 +555,7 @@
  38.    gtk_widget_show (viewZoomIn);
  39.    gtk_container_add (GTK_CONTAINER (menuViewZoom_menu), viewZoomIn);
  40.    gtk_widget_add_accelerator (viewZoomIn, "activate", accel_group,
  41. -                              GDK_plus, (GdkModifierType) GDK_CONTROL_MASK,
  42. +                              GDK_equal, (GdkModifierType) GDK_CONTROL_MASK,
  43.                                GTK_ACCEL_VISIBLE);
  44.  
  45.    viewZoomOut = gtk_image_menu_item_new_from_stock ("gtk-zoom-out", accel_group);
  46. @@ -576,7 +576,7 @@
  47.    gtk_widget_show (viewPageWidth);
  48.    gtk_container_add (GTK_CONTAINER (menuViewZoom_menu), viewPageWidth);
  49.    gtk_widget_add_accelerator (viewPageWidth, "activate", accel_group,
  50. -                              GDK_equal, (GdkModifierType) GDK_CONTROL_MASK,
  51. +                              GDK_plus, (GdkModifierType) GDK_CONTROL_MASK,
  52.                                GTK_ACCEL_VISIBLE);
  53.  
  54.    image625 = gtk_image_new_from_stock ("gtk-zoom-fit", GTK_ICON_SIZE_MENU);
  55. @@ -842,7 +842,7 @@
  56.    gtk_widget_show (toolsPen);
  57.    gtk_container_add (GTK_CONTAINER (menuTools_menu), toolsPen);
  58.    gtk_widget_add_accelerator (toolsPen, "activate", accel_group,
  59. -                              GDK_P, (GdkModifierType) GDK_CONTROL_MASK | GDK_SHIFT_MASK,
  60. +                              GDK_P, (GdkModifierType) NULL,
  61.                                GTK_ACCEL_VISIBLE);
  62.    gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (toolsPen), TRUE);
  63.  
  64. @@ -851,7 +851,7 @@
  65.    gtk_widget_show (toolsEraser);
  66.    gtk_container_add (GTK_CONTAINER (menuTools_menu), toolsEraser);
  67.    gtk_widget_add_accelerator (toolsEraser, "activate", accel_group,
  68. -                              GDK_E, (GdkModifierType) GDK_CONTROL_MASK | GDK_SHIFT_MASK,
  69. +                              GDK_E, (GdkModifierType) NULL,
  70.                                GTK_ACCEL_VISIBLE);
  71.    gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (toolsEraser), TRUE);
  72.  
  73. @@ -860,7 +860,7 @@
  74.    gtk_widget_show (toolsHighlighter);
  75.    gtk_container_add (GTK_CONTAINER (menuTools_menu), toolsHighlighter);
  76.    gtk_widget_add_accelerator (toolsHighlighter, "activate", accel_group,
  77. -                              GDK_H, (GdkModifierType) GDK_CONTROL_MASK | GDK_SHIFT_MASK,
  78. +                              GDK_H, (GdkModifierType) NULL,
  79.                                GTK_ACCEL_VISIBLE);
  80.    gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (toolsHighlighter), TRUE);
  81.  
  82. @@ -869,7 +869,7 @@
  83.    gtk_widget_show (toolsText);
  84.    gtk_container_add (GTK_CONTAINER (menuTools_menu), toolsText);
  85.    gtk_widget_add_accelerator (toolsText, "activate", accel_group,
  86. -                              GDK_T, (GdkModifierType) GDK_CONTROL_MASK | GDK_SHIFT_MASK,
  87. +                              GDK_T, (GdkModifierType) NULL,
  88.                                GTK_ACCEL_VISIBLE);
  89.    gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (toolsText), TRUE);
  90.  
  91. @@ -892,7 +892,7 @@
  92.    gtk_widget_show (toolsSelectRectangle);
  93.    gtk_container_add (GTK_CONTAINER (menuTools_menu), toolsSelectRectangle);
  94.    gtk_widget_add_accelerator (toolsSelectRectangle, "activate", accel_group,
  95. -                              GDK_R, (GdkModifierType) GDK_CONTROL_MASK | GDK_SHIFT_MASK,
  96. +                              GDK_R, (GdkModifierType) NULL,
  97.                                GTK_ACCEL_VISIBLE);
  98.    gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (toolsSelectRectangle), TRUE);
  99.  
  100. @@ -901,7 +901,7 @@
  101.    gtk_widget_show (toolsVerticalSpace);
  102.    gtk_container_add (GTK_CONTAINER (menuTools_menu), toolsVerticalSpace);
  103.    gtk_widget_add_accelerator (toolsVerticalSpace, "activate", accel_group,
  104. -                              GDK_V, (GdkModifierType) GDK_CONTROL_MASK | GDK_SHIFT_MASK,
  105. +                              GDK_V, (GdkModifierType) NULL,
  106.                                GTK_ACCEL_VISIBLE);
  107.    gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (toolsVerticalSpace), TRUE);
  108.  
  109. @@ -910,7 +910,7 @@
  110.    gtk_widget_show (toolsHand);
  111.    gtk_container_add (GTK_CONTAINER (menuTools_menu), toolsHand);
  112.    gtk_widget_add_accelerator (toolsHand, "activate", accel_group,
  113. -                              GDK_A, (GdkModifierType) GDK_CONTROL_MASK | GDK_SHIFT_MASK,
  114. +                              GDK_A, (GdkModifierType) NULL,
  115.                                GTK_ACCEL_VISIBLE);
  116.  
  117.    separator16 = gtk_separator_menu_item_new ();
  118. diff -urN xournal-0.4.1.orig/src/xo-paint.c xournal-0.4.1/src/xo-paint.c
  119. --- xournal-0.4.1.orig/src/xo-paint.c   2007-09-16 10:17:27.000000000 +0900
  120. +++ xournal-0.4.1/src/xo-paint.c    2008-05-15 13:16:08.000000000 +0900
  121. @@ -989,6 +989,9 @@
  122.    GnomeCanvasItem *canvas_item;
  123.    PangoFontDescription *font_desc;
  124.    GdkColor color;
  125. +  extern GtkWidget *winMain;
  126. +  extern GtkAccelGroup *accel_group;
  127. +  gtk_window_remove_accel_group (GTK_WINDOW (winMain), accel_group);
  128.    
  129.    get_pointer_coords(event, pt);
  130.    ui.cur_item_type = ITEM_TEXT;
  131. @@ -1053,6 +1056,9 @@
  132.    gchar *new_text;
  133.    struct UndoErasureData *erasure;
  134.    GnomeCanvasItem *tmpitem;
  135. +  extern GtkWidget *winMain;
  136. +  extern GtkAccelGroup *accel_group;
  137. +  gtk_window_add_accel_group (GTK_WINDOW (winMain), accel_group);
  138.  
  139.    if (ui.cur_item_type!=ITEM_TEXT) return; // nothing for us to do!

덤으로 확대 단축키도 변경. 이제 좀 편하구먼.
패키지는 xournal_041-0ubuntu1_i386.deb.

덧붙임.
패키지 버전을 hold 할 때는 echo "packagename hold" | dpkg --set-selections