make keyboard shortcuts user-definable

git-svn-id: https://geany.svn.sourceforge.net/svnroot/geany/trunk@342 ea778897-0a13-0410-b9d1-a72fbfd435f5
This commit is contained in:
Enrico Tröger 2006-05-19 17:18:06 +00:00
parent d5fb7376b7
commit d47e10998f
13 changed files with 1151 additions and 1042 deletions

View File

@ -57,7 +57,7 @@
<property name="use_underline">True</property>
<child internal-child="image">
<widget class="GtkImage" id="image586">
<widget class="GtkImage" id="image602">
<property name="visible">True</property>
<property name="stock">gtk-new</property>
<property name="icon_size">1</property>
@ -128,10 +128,9 @@
<property name="label" translatable="yes">Save all</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_save_all1_activate" last_modification_time="Thu, 02 Jun 2005 14:15:30 GMT"/>
<accelerator key="s" modifiers="GDK_CONTROL_MASK | GDK_SHIFT_MASK" signal="activate"/>
<child internal-child="image">
<widget class="GtkImage" id="image587">
<widget class="GtkImage" id="image603">
<property name="visible">True</property>
<property name="stock">gtk-save</property>
<property name="icon_size">1</property>
@ -190,10 +189,9 @@
<property name="label" translatable="yes">Close all</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_close_all1_activate" last_modification_time="Thu, 02 Jun 2005 14:15:30 GMT"/>
<accelerator key="d" modifiers="GDK_MOD1_MASK" signal="activate"/>
<child internal-child="image">
<widget class="GtkImage" id="image588">
<widget class="GtkImage" id="image604">
<property name="visible">True</property>
<property name="stock">gtk-close</property>
<property name="icon_size">1</property>
@ -335,7 +333,7 @@
<property name="use_underline">True</property>
<child internal-child="image">
<widget class="GtkImage" id="image589">
<widget class="GtkImage" id="image605">
<property name="visible">True</property>
<property name="stock">gtk-add</property>
<property name="icon_size">1</property>
@ -367,7 +365,7 @@
<property name="use_underline">True</property>
<child internal-child="image">
<widget class="GtkImage" id="image590">
<widget class="GtkImage" id="image606">
<property name="visible">True</property>
<property name="stock">gtk-add</property>
<property name="icon_size">1</property>
@ -503,10 +501,9 @@
<property name="label" translatable="yes">Find _next</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_find_next1_activate" last_modification_time="Thu, 16 Jun 2005 18:40:58 GMT"/>
<accelerator key="F3" modifiers="0" signal="activate"/>
<child internal-child="image">
<widget class="GtkImage" id="image591">
<widget class="GtkImage" id="image607">
<property name="visible">True</property>
<property name="stock">gtk-find</property>
<property name="icon_size">1</property>
@ -527,7 +524,7 @@
<signal name="activate" handler="on_replace1_activate" last_modification_time="Sun, 23 Oct 2005 13:22:36 GMT"/>
<child internal-child="image">
<widget class="GtkImage" id="image592">
<widget class="GtkImage" id="image608">
<property name="visible">True</property>
<property name="stock">gtk-find-and-replace</property>
<property name="icon_size">1</property>
@ -577,7 +574,7 @@
<signal name="activate" handler="on_change_font1_activate" last_modification_time="Fri, 22 Apr 2005 18:58:45 GMT"/>
<child internal-child="image">
<widget class="GtkImage" id="image593">
<widget class="GtkImage" id="image609">
<property name="visible">True</property>
<property name="stock">gtk-select-font</property>
<property name="icon_size">1</property>
@ -599,7 +596,7 @@
<signal name="activate" handler="on_show_color_chooser1_activate" last_modification_time="Wed, 22 Jun 2005 18:10:21 GMT"/>
<child internal-child="image">
<widget class="GtkImage" id="image594">
<widget class="GtkImage" id="image610">
<property name="visible">True</property>
<property name="stock">gtk-select-color</property>
<property name="icon_size">1</property>
@ -625,7 +622,6 @@
<property name="use_underline">True</property>
<property name="active">False</property>
<signal name="toggled" handler="on_fullscreen1_toggled" last_modification_time="Tue, 10 May 2005 18:34:16 GMT"/>
<accelerator key="F11" modifiers="0" signal="activate"/>
</widget>
</child>
@ -3716,36 +3712,16 @@
<child>
<widget class="GtkTable" id="table1">
<property name="visible">True</property>
<property name="n_rows">8</property>
<property name="n_rows">3</property>
<property name="n_columns">3</property>
<property name="homogeneous">False</property>
<property name="row_spacing">7</property>
<property name="column_spacing">5</property>
<child>
<widget class="GtkEntry" id="entry_com_c">
<property name="tooltip" translatable="yes">Path and options for the C compiler</property>
<property name="can_focus">True</property>
<property name="editable">True</property>
<property name="visibility">True</property>
<property name="max_length">0</property>
<property name="text" translatable="yes"></property>
<property name="has_frame">True</property>
<property name="invisible_char">*</property>
<property name="activates_default">False</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">0</property>
<property name="bottom_attach">1</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label12">
<property name="label" translatable="yes">C Compiler</property>
<widget class="GtkLabel" id="label11">
<property name="visible">True</property>
<property name="label" translatable="yes">Make</property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
@ -3770,102 +3746,6 @@
</packing>
</child>
<child>
<widget class="GtkLabel" id="label13">
<property name="label" translatable="yes">C++ Compiler</property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">0</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
</widget>
<packing>
<property name="left_attach">0</property>
<property name="right_attach">1</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label114">
<property name="label" translatable="yes">Java Compiler</property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">0</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
</widget>
<packing>
<property name="left_attach">0</property>
<property name="right_attach">1</property>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkEntry" id="entry_com_javac">
<property name="tooltip" translatable="yes">Path and options for the Java compiler</property>
<property name="can_focus">True</property>
<property name="editable">True</property>
<property name="visibility">True</property>
<property name="max_length">0</property>
<property name="text" translatable="yes"></property>
<property name="has_frame">True</property>
<property name="invisible_char">*</property>
<property name="activates_default">False</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkEntry" id="entry_com_cpp">
<property name="tooltip" translatable="yes">Path and options for the C++ compiler</property>
<property name="can_focus">True</property>
<property name="editable">True</property>
<property name="visibility">True</property>
<property name="max_length">0</property>
<property name="text" translatable="yes"></property>
<property name="has_frame">True</property>
<property name="invisible_char">*</property>
<property name="activates_default">False</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label97">
<property name="visible">True</property>
@ -3887,181 +3767,13 @@
<packing>
<property name="left_attach">0</property>
<property name="right_attach">1</property>
<property name="top_attach">6</property>
<property name="bottom_attach">7</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkEntry" id="entry_com_term">
<property name="visible">True</property>
<property name="tooltip" translatable="yes">A terminal emulator like xterm, gnome-terminal or konsole (should accept the -e argument)</property>
<property name="can_focus">True</property>
<property name="editable">True</property>
<property name="visibility">True</property>
<property name="max_length">0</property>
<property name="text" translatable="yes"></property>
<property name="has_frame">True</property>
<property name="invisible_char">*</property>
<property name="activates_default">False</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">6</property>
<property name="bottom_attach">7</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label11">
<property name="visible">True</property>
<property name="label" translatable="yes">Make</property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">0</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
</widget>
<packing>
<property name="left_attach">0</property>
<property name="right_attach">1</property>
<property name="top_attach">5</property>
<property name="bottom_attach">6</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label113">
<property name="label" translatable="yes">Pascal Compiler</property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">0</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
</widget>
<packing>
<property name="left_attach">0</property>
<property name="right_attach">1</property>
<property name="top_attach">4</property>
<property name="bottom_attach">5</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkEntry" id="entry_com_make">
<property name="visible">True</property>
<property name="tooltip" translatable="yes">Path and options for the make tool</property>
<property name="can_focus">True</property>
<property name="editable">True</property>
<property name="visibility">True</property>
<property name="max_length">0</property>
<property name="text" translatable="yes"></property>
<property name="has_frame">True</property>
<property name="invisible_char">*</property>
<property name="activates_default">False</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">5</property>
<property name="bottom_attach">6</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkEntry" id="entry_com_pascal">
<property name="tooltip" translatable="yes">Path and options for the Pascal compiler</property>
<property name="can_focus">True</property>
<property name="editable">True</property>
<property name="visibility">True</property>
<property name="max_length">0</property>
<property name="text" translatable="yes"></property>
<property name="has_frame">True</property>
<property name="invisible_char">*</property>
<property name="activates_default">False</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">4</property>
<property name="bottom_attach">5</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label115">
<property name="label" translatable="yes">Java executable</property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">0</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
</widget>
<packing>
<property name="left_attach">0</property>
<property name="right_attach">1</property>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkEntry" id="entry_com_java">
<property name="tooltip" translatable="yes">Path and options for the java executable, to run java bytecode files(compiled java source files)</property>
<property name="can_focus">True</property>
<property name="editable">True</property>
<property name="visibility">True</property>
<property name="max_length">0</property>
<property name="text" translatable="yes"></property>
<property name="has_frame">True</property>
<property name="invisible_char">*</property>
<property name="activates_default">False</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label117">
<property name="visible">True</property>
@ -4083,13 +3795,57 @@
<packing>
<property name="left_attach">0</property>
<property name="right_attach">1</property>
<property name="top_attach">7</property>
<property name="bottom_attach">8</property>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkEntry" id="entry_com_make">
<property name="visible">True</property>
<property name="tooltip" translatable="yes">Path and options for the make tool</property>
<property name="can_focus">True</property>
<property name="editable">True</property>
<property name="visibility">True</property>
<property name="max_length">0</property>
<property name="text" translatable="yes"></property>
<property name="has_frame">True</property>
<property name="invisible_char">*</property>
<property name="activates_default">False</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">0</property>
<property name="bottom_attach">1</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkEntry" id="entry_com_term">
<property name="visible">True</property>
<property name="tooltip" translatable="yes">A terminal emulator like xterm, gnome-terminal or konsole (should accept the -e argument)</property>
<property name="can_focus">True</property>
<property name="editable">True</property>
<property name="visibility">True</property>
<property name="max_length">0</property>
<property name="text" translatable="yes"></property>
<property name="has_frame">True</property>
<property name="invisible_char">*</property>
<property name="activates_default">False</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkEntry" id="entry_browser">
<property name="visible">True</property>
@ -4106,120 +3862,8 @@
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">7</property>
<property name="bottom_attach">8</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkButton" id="button_gcc">
<property name="can_focus">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
<property name="focus_on_click">True</property>
<child>
<widget class="GtkImage" id="image280">
<property name="visible">True</property>
<property name="stock">gtk-open</property>
<property name="icon_size">4</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
</widget>
</child>
</widget>
<packing>
<property name="left_attach">2</property>
<property name="right_attach">3</property>
<property name="top_attach">0</property>
<property name="bottom_attach">1</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkButton" id="button_gpp">
<property name="can_focus">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
<property name="focus_on_click">True</property>
<child>
<widget class="GtkImage" id="bu">
<property name="visible">True</property>
<property name="stock">gtk-open</property>
<property name="icon_size">4</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
</widget>
</child>
</widget>
<packing>
<property name="left_attach">2</property>
<property name="right_attach">3</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkButton" id="button_java">
<property name="can_focus">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
<property name="focus_on_click">True</property>
<child>
<widget class="GtkImage" id="image283">
<property name="visible">True</property>
<property name="stock">gtk-open</property>
<property name="icon_size">4</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
</widget>
</child>
</widget>
<packing>
<property name="left_attach">2</property>
<property name="right_attach">3</property>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkButton" id="button_fpc">
<property name="can_focus">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
<property name="focus_on_click">True</property>
<child>
<widget class="GtkImage" id="image284">
<property name="visible">True</property>
<property name="stock">gtk-open</property>
<property name="icon_size">4</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
</widget>
</child>
</widget>
<packing>
<property name="left_attach">2</property>
<property name="right_attach">3</property>
<property name="top_attach">4</property>
<property name="bottom_attach">5</property>
<property name="x_options">fill</property>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="y_options"></property>
</packing>
</child>
@ -4246,8 +3890,8 @@
<packing>
<property name="left_attach">2</property>
<property name="right_attach">3</property>
<property name="top_attach">5</property>
<property name="bottom_attach">6</property>
<property name="top_attach">0</property>
<property name="bottom_attach">1</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
@ -4275,8 +3919,8 @@
<packing>
<property name="left_attach">2</property>
<property name="right_attach">3</property>
<property name="top_attach">6</property>
<property name="bottom_attach">7</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
@ -4301,34 +3945,6 @@
</widget>
</child>
</widget>
<packing>
<property name="left_attach">2</property>
<property name="right_attach">3</property>
<property name="top_attach">7</property>
<property name="bottom_attach">8</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkButton" id="button_javac">
<property name="can_focus">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
<property name="focus_on_click">True</property>
<child>
<widget class="GtkImage" id="image288">
<property name="visible">True</property>
<property name="stock">gtk-open</property>
<property name="icon_size">4</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
</widget>
</child>
</widget>
<packing>
<property name="left_attach">2</property>
<property name="right_attach">3</property>
@ -4727,6 +4343,126 @@ you need to restart Geany to take effect.</property>
<property name="type">tab</property>
</packing>
</child>
<child>
<widget class="GtkVBox" id="vbox13">
<property name="visible">True</property>
<property name="homogeneous">False</property>
<property name="spacing">5</property>
<child>
<widget class="GtkLabel" id="label152">
<property name="visible">True</property>
<property name="label" translatable="yes">Here you can change keyboard shortcuts for various actions. Just double click on a action or select one and press the Change button to enter a new shortcut. You can also edit the string representation of the shortcut directly.</property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_FILL</property>
<property name="wrap">True</property>
<property name="selectable">False</property>
<property name="xalign">0.10000000149</property>
<property name="yalign">0</property>
<property name="xpad">0</property>
<property name="ypad">5</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
<property name="fill">True</property>
</packing>
</child>
<child>
<widget class="GtkScrolledWindow" id="scrolledwindow8">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="hscrollbar_policy">GTK_POLICY_ALWAYS</property>
<property name="vscrollbar_policy">GTK_POLICY_ALWAYS</property>
<property name="shadow_type">GTK_SHADOW_IN</property>
<property name="window_placement">GTK_CORNER_TOP_LEFT</property>
<child>
<widget class="GtkTreeView" id="treeview7">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="headers_visible">True</property>
<property name="rules_hint">False</property>
<property name="reorderable">False</property>
<property name="enable_search">False</property>
<property name="fixed_height_mode">False</property>
<property name="hover_selection">False</property>
<property name="hover_expand">False</property>
</widget>
</child>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">True</property>
<property name="fill">True</property>
</packing>
</child>
<child>
<widget class="GtkAlignment" id="alignment10">
<property name="visible">True</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xscale">0.300000011921</property>
<property name="yscale">1</property>
<property name="top_padding">0</property>
<property name="bottom_padding">5</property>
<property name="left_padding">0</property>
<property name="right_padding">0</property>
<child>
<widget class="GtkButton" id="button2">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="label" translatable="yes">Change</property>
<property name="use_underline">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
<property name="focus_on_click">True</property>
</widget>
</child>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
</child>
</widget>
<packing>
<property name="tab_expand">False</property>
<property name="tab_fill">True</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label151">
<property name="visible">True</property>
<property name="label" translatable="yes">Keybindings</property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
</widget>
<packing>
<property name="type">tab</property>
</packing>
</child>
</widget>
<packing>
<property name="padding">0</property>

View File

@ -23,3 +23,4 @@ src/templates.c
src/encodings.c
src/treeviews.c
src/vte.c
src/keybindings.c

View File

@ -14,6 +14,7 @@ bin_PROGRAMS = geany
geany_SOURCES = \
main.c geany.h \
keybindings.c keybindings.h \
templates.c templates.h \
treeviews.c treeviews.h \
about.c about.h \
@ -35,6 +36,6 @@ geany_SOURCES = \
callbacks.c callbacks.h
#AM_CFLAGS = -Wall -pipe
AM_CFLAGS = -DGEANY_DEBUG -Wall -pipe
#AM_CFLAGS = -DGEANY_DEBUG -g -Wall -pipe
#AM_CFLAGS = -DGEANY_DEBUG -Wall -pipe
AM_CFLAGS = -DGEANY_DEBUG -g -Wall -pipe
geany_LDADD = @PACKAGE_LIBS@ -lstdc++ ../scintilla/libscintilla.a ../tagmanager/libtagmanager.a $(INTLLIBS)

View File

@ -105,6 +105,7 @@ gint destroyapp(GtkWidget *widget, gpointer gdata)
}
#endif
keybindings_free();
filetypes_free_types();
styleset_free_styles();
templates_free_templates();
@ -930,276 +931,7 @@ on_window_key_press_event (GtkWidget *widget,
GdkEventKey *event,
gpointer user_data)
{
if (event->keyval == GDK_F12)
{
gtk_notebook_set_current_page(GTK_NOTEBOOK(msgwindow.notebook), MSG_SCRATCH);
gtk_widget_grab_focus(lookup_widget(app->window, "textview_scribble"));
return TRUE;
}
#ifdef HAVE_VTE
if (event->keyval == GDK_F6 && app->have_vte)
{
gtk_notebook_set_current_page(GTK_NOTEBOOK(msgwindow.notebook), MSG_VTE);
gtk_widget_grab_focus(vc->vte);
return TRUE;
}
#endif
return FALSE;
}
gboolean
on_editor_key_press_event (GtkWidget *widget,
GdkEventKey *event,
gpointer user_data)
{
gboolean ret = TRUE;
gint idx = GPOINTER_TO_INT(user_data);
gint pos = sci_get_current_position(doc_list[idx].sci);
switch(event->keyval)
{
// show userlist with macros and variables on strg+space
case 'g':
{
if (event->state & GDK_CONTROL_MASK)
{
sci_line_duplicate(doc_list[idx].sci);
}
else
ret = FALSE;
break;
}
// show userlist with macros and variables on strg+space
case ' ':
{
if (event->state & GDK_CONTROL_MASK)
{
sci_cb_start_auto_complete(
doc_list[GPOINTER_TO_INT(user_data)].sci,
sci_get_current_position(doc_list[idx].sci));
}
else if (event->state & GDK_MOD1_MASK)
{ // ALT+Space
sci_cb_show_calltip(doc_list[idx].sci, -1);
}
else if (event->state & GDK_SHIFT_MASK)
{ // Shift+Space, catch this explicitly to suppress sci_cb_auto_forif() ;-)
sci_add_text(doc_list[idx].sci, " ");
}
else
ret = FALSE;
break;
}
// refreshs the tag lists
case 'R':
{
if (event->state & GDK_CONTROL_MASK)
document_update_tag_list(idx, TRUE);
else
ret = FALSE;
break;
}
// reloads the document
case 'r':
{
if (event->state & GDK_CONTROL_MASK)
{
gchar *basename = g_path_get_basename(doc_list[idx].file_name);
if (dialogs_show_question(_
("Are you sure you want to reload '%s'?\nAny unsaved changes will be lost."),
basename))
{
document_open_file(idx, NULL, 0, doc_list[idx].readonly, doc_list[idx].file_type);
}
g_free(basename);
}
else
ret = FALSE;
break;
}
// comment the current line or selected lines
case 'd':
{
if (event->state & GDK_CONTROL_MASK)
sci_cb_do_comment(idx);
else
ret = FALSE;
break;
}
// uri handling testing
case '^':
{
if (event->state & GDK_CONTROL_MASK)
sci_cb_handle_uri(doc_list[idx].sci, pos);
else
ret = FALSE;
break;
}
// zoom in the text
case '+':
{
if (event->state & GDK_CONTROL_MASK)
sci_zoom_in(doc_list[idx].sci);
else
ret = FALSE;
break;
}
// zoom out the text
case '-':
{
if (event->state & GDK_CONTROL_MASK)
sci_zoom_out(doc_list[idx].sci);
else
ret = FALSE;
break;
}
// open the preferences dialog
case 'p':
{
if (event->state & GDK_CONTROL_MASK)
on_preferences1_activate(NULL, NULL);
else
ret = FALSE;
break;
}
// switch to the next open notebook tab to the right
case GDK_Right:
{
if (event->state & GDK_MOD1_MASK)
utils_switch_document(RIGHT);
else
ret = FALSE;
break;
}
// switch to the next open notebook tab to the right
case GDK_Left:
{
if (event->state & GDK_MOD1_MASK)
{
utils_switch_document(LEFT);
}
else
ret = FALSE;
break;
}
// show macro list
case GDK_Return:
{
if (event->state & GDK_CONTROL_MASK)
{
sci_cb_show_macro_list(doc_list[idx].sci);
}
else
ret = FALSE;
break;
}
case GDK_Insert:
{
if (! (event->state & GDK_SHIFT_MASK))
doc_list[idx].do_overwrite = (doc_list[idx].do_overwrite) ? FALSE : TRUE;
else
ret = FALSE;
break;
}
case GDK_F12:
{
gtk_notebook_set_current_page(GTK_NOTEBOOK(msgwindow.notebook), MSG_SCRATCH);
gtk_widget_grab_focus(lookup_widget(app->window, "textview_scribble"));
break;
}
#ifdef HAVE_VTE
case GDK_F6:
{
if (app->have_vte)
{
gtk_notebook_set_current_page(GTK_NOTEBOOK(msgwindow.notebook), MSG_VTE);
gtk_widget_grab_focus(vc->vte);
break;
}
break;
}
#endif
// build menu shortcuts temporarily defined here, until new keyboard shortcuts management is
// implemented, hope this fixes at least for the moment the shortcut problem
case GDK_F8:
{
if (doc_list[idx].file_type->menu_items->can_compile &&
doc_list[idx].file_name != NULL)
{
on_build_compile_activate(NULL, NULL);
}
break;
}
case GDK_F9:
{
if (event->state & GDK_SHIFT_MASK)
{
if (doc_list[idx].file_name != NULL) on_build_make_activate(NULL, NULL);
}
else if (doc_list[idx].file_type->menu_items->can_link &&
doc_list[idx].file_name != NULL)
{
on_build_build_activate(NULL, NULL);
}
break;
}
case GDK_F5:
{
if (doc_list[idx].file_type->menu_items->can_exec &&
doc_list[idx].file_name != NULL)
{
on_build_execute_activate(NULL, NULL);
}
break;
}
default: ret = FALSE;
/* following code is unusable unless I get a signal for a line changed, don't want to do this with
* updateUI(), additional problem: at line changes the column isn't kept
case GDK_End:
{ // extending HOME and END default behaviour, for details look at the start of this function
if (cursor_pos_end == -1 || current_line != sci_get_current_line(doc_list[idx].sci, pos))
{
cursor_pos_end = pos;
sci_cmd(doc_list[idx].sci, SCI_LINEEND);
current_line = sci_get_current_line(doc_list[idx].sci, pos);
}
else if (current_line == sci_get_current_line(doc_list[idx].sci, pos))
{
sci_set_current_position(doc_list[idx].sci, cursor_pos_end);
cursor_pos_end = -1;
}
break;
}
case GDK_Home:
{
if (cursor_pos_home_state == 0 || current_line != sci_get_current_line(doc_list[idx].sci, pos))
{
cursor_pos_home = sci_get_current_position(doc_list[idx].sci);
sci_cmd(doc_list[idx].sci, SCI_VCHOME);
cursor_pos_home_state = 1;
current_line = sci_get_current_line(doc_list[idx].sci, pos);
}
else if (cursor_pos_home_state == 1 && current_line == sci_get_current_line(doc_list[idx].sci, pos))
{
sci_cmd(doc_list[idx].sci, SCI_HOME);
cursor_pos_home_state = 2;
cursor_pos_home_state = 0;
}
else// if (current_line == sci_get_current_line(doc_list[idx].sci, pos))
{
sci_set_current_position(doc_list[idx].sci, cursor_pos_home);
cursor_pos_home_state = 0;
}
break;
}
*/ }
return ret;
return keybindings_got_event(widget, event, user_data);
}
@ -1866,9 +1598,9 @@ on_build_execute_activate (GtkMenuItem *menuitem,
{
gint idx = document_get_cur_idx();
if (doc_list[idx].file_type->id == GEANY_FILETYPES_LATEX)
if (doc_list[idx].file_type->id == GEANY_FILETYPES_LATEX && user_data != NULL)
{
if (build_view_tex_file(idx, 0) == (GPid) 0)
if (build_view_tex_file(idx, GPOINTER_TO_INT(user_data)) == (GPid) 0)
{
msgwin_status_add(_("Failed to execute the view program"));
}

View File

@ -138,12 +138,6 @@ gboolean
on_close_all1_activate (GtkMenuItem *menuitem,
gpointer user_data);
gboolean
on_editor_key_press_event (GtkWidget *widget,
GdkEventKey *event,
gpointer user_data);
gboolean
on_editor_button_press_event (GtkWidget *widget,
GdkEventButton *event,

View File

@ -224,6 +224,7 @@ void dialogs_show_file_open_error(void)
}
/// TODO is there a difference to dialogs_show_question? if not, remove this one
gboolean dialogs_show_not_found(const gchar *text)
{
GtkWidget *dialog;
@ -274,6 +275,7 @@ void dialogs_show_info(const gchar *text, ...)
}
/// TODO is there a difference to dialogs_show_question? if not, remove this one
gboolean dialogs_show_fifo_error(const gchar *text, ...)
{
GtkWidget *dialog;
@ -452,7 +454,7 @@ void dialogs_show_about(void)
info = about_info_new(PACKAGE, VERSION, _("A fast and lightweight IDE"),
ABOUT_COPYRIGHT_TEXT("2006", "Enrico Troeger"), GEANY_HOMEPAGE, GEANY_CODENAME);
about_info_add_credit(info, "Enrico Troeger", "enrico.troeger@uvena.de", _("Maintainer"));
about_info_add_credit(info, "Nick Treleaven", "nick.treleaven@btinternet.com", _("Contributor"));
about_info_add_credit(info, "Nick Treleaven", "nick.treleaven@btinternet.com", _("Developer"));
for (n = 0; translators[n].name != NULL; ++n)
{
@ -557,9 +559,10 @@ GtkWidget *dialogs_create_build_menu_gen(gint idx)
gtk_widget_show(item);
gtk_container_add(GTK_CONTAINER(menu), item);
gtk_tooltips_set_tip(tooltips, item, _("Compiles the current file"), NULL);
/* gtk_widget_add_accelerator(item, "activate", accel_group, GDK_F8,
(GdkModifierType) 0, GTK_ACCEL_VISIBLE);
*/ image = gtk_image_new_from_stock("gtk-convert", GTK_ICON_SIZE_MENU);
if (keys[GEANY_KEYS_BUILD_COMPILE]->key)
gtk_widget_add_accelerator(item, "activate", accel_group, keys[GEANY_KEYS_BUILD_COMPILE]->key,
keys[GEANY_KEYS_BUILD_COMPILE]->mods, GTK_ACCEL_VISIBLE);
image = gtk_image_new_from_stock("gtk-convert", GTK_ICON_SIZE_MENU);
gtk_widget_show(image);
gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), image);
g_signal_connect((gpointer) item, "activate", G_CALLBACK(on_build_compile_activate), NULL);
@ -573,8 +576,9 @@ GtkWidget *dialogs_create_build_menu_gen(gint idx)
gtk_container_add(GTK_CONTAINER(menu), item);
gtk_tooltips_set_tip(tooltips, item,
_("Builds the current file (generate an executable file)"), NULL);
gtk_widget_add_accelerator(item, "activate", accel_group, GDK_F9,
(GdkModifierType) 0, GTK_ACCEL_VISIBLE);
if (keys[GEANY_KEYS_BUILD_LINK]->key)
gtk_widget_add_accelerator(item, "activate", accel_group, keys[GEANY_KEYS_BUILD_LINK]->key,
keys[GEANY_KEYS_BUILD_LINK]->mods, GTK_ACCEL_VISIBLE);
g_signal_connect((gpointer) item, "activate", G_CALLBACK(on_build_build_activate), NULL);
ft->menu_items->item_link = item;
}
@ -585,13 +589,17 @@ GtkWidget *dialogs_create_build_menu_gen(gint idx)
gtk_container_add(GTK_CONTAINER(menu), item);
gtk_tooltips_set_tip(tooltips, item, _("Builds the current file with the "
"make tool and the default target"), NULL);
gtk_widget_add_accelerator(item, "activate", accel_group, GDK_F9,
(GdkModifierType) GDK_SHIFT_MASK, GTK_ACCEL_VISIBLE);
if (keys[GEANY_KEYS_BUILD_MAKE]->key)
gtk_widget_add_accelerator(item, "activate", accel_group, keys[GEANY_KEYS_BUILD_MAKE]->key,
keys[GEANY_KEYS_BUILD_MAKE]->mods, GTK_ACCEL_VISIBLE);
g_signal_connect((gpointer) item, "activate", G_CALLBACK(on_build_make_activate), GINT_TO_POINTER(0));
// build the code with make
item = gtk_image_menu_item_new_with_mnemonic(_("Build with make (custom target)"));
gtk_widget_show(item);
if (keys[GEANY_KEYS_BUILD_MAKEOWNTARGET]->key)
gtk_widget_add_accelerator(item, "activate", accel_group, keys[GEANY_KEYS_BUILD_MAKEOWNTARGET]->key,
keys[GEANY_KEYS_BUILD_MAKEOWNTARGET]->mods, GTK_ACCEL_VISIBLE);
gtk_container_add(GTK_CONTAINER(menu), item);
gtk_tooltips_set_tip(tooltips, item, _("Builds the current file with the "
"make tool and the specified target"), NULL);
@ -603,8 +611,9 @@ GtkWidget *dialogs_create_build_menu_gen(gint idx)
gtk_widget_show(item);
gtk_container_add(GTK_CONTAINER(menu), item);
gtk_tooltips_set_tip(tooltips, item, _("Run or view the current file"), NULL);
gtk_widget_add_accelerator(item, "activate", accel_group, GDK_F5,
(GdkModifierType) 0, GTK_ACCEL_VISIBLE);
if (keys[GEANY_KEYS_BUILD_RUN]->key)
gtk_widget_add_accelerator(item, "activate", accel_group, keys[GEANY_KEYS_BUILD_RUN]->key,
keys[GEANY_KEYS_BUILD_RUN]->mods, GTK_ACCEL_VISIBLE);
g_signal_connect((gpointer) item, "activate", G_CALLBACK(on_build_execute_activate), NULL);
ft->menu_items->item_exec = item;
}
@ -620,6 +629,9 @@ GtkWidget *dialogs_create_build_menu_gen(gint idx)
item = gtk_image_menu_item_new_with_mnemonic(_("Set Includes and Arguments"));
gtk_widget_show(item);
if (keys[GEANY_KEYS_BUILD_OPTIONS]->key)
gtk_widget_add_accelerator(item, "activate", accel_group, keys[GEANY_KEYS_BUILD_OPTIONS]->key,
keys[GEANY_KEYS_BUILD_OPTIONS]->mods, GTK_ACCEL_VISIBLE);
gtk_container_add(GTK_CONTAINER (menu), item);
gtk_tooltips_set_tip(tooltips, item,
_("Sets the includes and library paths for the compiler and "
@ -630,9 +642,6 @@ GtkWidget *dialogs_create_build_menu_gen(gint idx)
g_signal_connect((gpointer) item, "activate", G_CALLBACK(on_build_arguments_activate), NULL);
}
// temporarily moved to on_editor_key_press_event() until new keyboard shortcut management is available
//gtk_window_add_accel_group(GTK_WINDOW(app->window), accel_group);
return menu;
}
@ -650,7 +659,9 @@ GtkWidget *dialogs_create_build_menu_tex(gint idx)
gtk_widget_show(item);
gtk_container_add(GTK_CONTAINER(menu), item);
gtk_tooltips_set_tip(tooltips, item, _("Compiles the current file into a DVI file"), NULL);
// gtk_widget_add_accelerator(item, "activate", accel_group, GDK_F8, (GdkModifierType) 0, GTK_ACCEL_VISIBLE);
if (keys[GEANY_KEYS_BUILD_COMPILE]->key)
gtk_widget_add_accelerator(item, "activate", accel_group, keys[GEANY_KEYS_BUILD_COMPILE]->key,
keys[GEANY_KEYS_BUILD_COMPILE]->mods, GTK_ACCEL_VISIBLE);
image = gtk_image_new_from_stock("gtk-convert", GTK_ICON_SIZE_MENU);
gtk_widget_show(image);
gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), image);
@ -661,7 +672,9 @@ GtkWidget *dialogs_create_build_menu_tex(gint idx)
gtk_widget_show(item);
gtk_container_add(GTK_CONTAINER(menu), item);
gtk_tooltips_set_tip(tooltips, item, _("Compiles the current file into a PDF file"), NULL);
// gtk_widget_add_accelerator(item, "activate", accel_group, GDK_F9, (GdkModifierType) 0, GTK_ACCEL_VISIBLE);
if (keys[GEANY_KEYS_BUILD_LINK]->key)
gtk_widget_add_accelerator(item, "activate", accel_group, keys[GEANY_KEYS_BUILD_LINK]->key,
keys[GEANY_KEYS_BUILD_LINK]->mods, GTK_ACCEL_VISIBLE);
image = gtk_image_new_from_stock("gtk-convert", GTK_ICON_SIZE_MENU);
gtk_widget_show(image);
gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), image);
@ -673,13 +686,17 @@ GtkWidget *dialogs_create_build_menu_tex(gint idx)
gtk_container_add(GTK_CONTAINER(menu), item);
gtk_tooltips_set_tip(tooltips, item, _("Builds the current file with the "
"make tool and the default target"), NULL);
/* gtk_widget_add_accelerator(item, "activate", accel_group, GDK_F9,
(GdkModifierType) GDK_SHIFT_MASK, GTK_ACCEL_VISIBLE);
*/ g_signal_connect((gpointer) item, "activate", G_CALLBACK(on_build_make_activate), GINT_TO_POINTER(0));
if (keys[GEANY_KEYS_BUILD_MAKE]->key)
gtk_widget_add_accelerator(item, "activate", accel_group, keys[GEANY_KEYS_BUILD_MAKE]->key,
keys[GEANY_KEYS_BUILD_MAKE]->mods, GTK_ACCEL_VISIBLE);
g_signal_connect((gpointer) item, "activate", G_CALLBACK(on_build_make_activate), GINT_TO_POINTER(0));
// build the code with make
item = gtk_image_menu_item_new_with_mnemonic(_("Build with make (custom target)"));
gtk_widget_show(item);
if (keys[GEANY_KEYS_BUILD_MAKEOWNTARGET]->key)
gtk_widget_add_accelerator(item, "activate", accel_group, keys[GEANY_KEYS_BUILD_MAKEOWNTARGET]->key,
keys[GEANY_KEYS_BUILD_MAKEOWNTARGET]->mods, GTK_ACCEL_VISIBLE);
gtk_container_add(GTK_CONTAINER(menu), item);
gtk_tooltips_set_tip(tooltips, item, _("Builds the current file with the "
"make tool and the specified target"), NULL);
@ -689,7 +706,9 @@ GtkWidget *dialogs_create_build_menu_tex(gint idx)
item = gtk_image_menu_item_new_with_mnemonic(_("View DVI file"));
gtk_widget_show(item);
gtk_container_add(GTK_CONTAINER(menu), item);
// gtk_widget_add_accelerator(item, "activate", accel_group, GDK_F5, (GdkModifierType) 0, GTK_ACCEL_VISIBLE);
if (keys[GEANY_KEYS_BUILD_RUN]->key)
gtk_widget_add_accelerator(item, "activate", accel_group, keys[GEANY_KEYS_BUILD_RUN]->key,
keys[GEANY_KEYS_BUILD_RUN]->mods, GTK_ACCEL_VISIBLE);
gtk_tooltips_set_tip(tooltips, item, _("Compiles and view the current file"), NULL);
image = gtk_image_new_from_stock("gtk-find", GTK_ICON_SIZE_MENU);
gtk_widget_show(image);
@ -700,9 +719,10 @@ GtkWidget *dialogs_create_build_menu_tex(gint idx)
item = gtk_image_menu_item_new_with_mnemonic(_("View PDF file"));
gtk_widget_show(item);
gtk_container_add(GTK_CONTAINER(menu), item);
/* gtk_widget_add_accelerator(item, "activate", accel_group, GDK_F5,
(GdkModifierType) GDK_SHIFT_MASK, GTK_ACCEL_VISIBLE);
*/ gtk_tooltips_set_tip(tooltips, item, _("Compiles and view the current file"), NULL);
if (keys[GEANY_KEYS_BUILD_RUN2]->key)
gtk_widget_add_accelerator(item, "activate", accel_group, keys[GEANY_KEYS_BUILD_RUN2]->key,
keys[GEANY_KEYS_BUILD_RUN2]->mods, GTK_ACCEL_VISIBLE);
gtk_tooltips_set_tip(tooltips, item, _("Compiles and view the current file"), NULL);
image = gtk_image_new_from_stock("gtk-find", GTK_ICON_SIZE_MENU);
gtk_widget_show(image);
gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), image);
@ -717,6 +737,9 @@ GtkWidget *dialogs_create_build_menu_tex(gint idx)
// arguments
item = gtk_image_menu_item_new_with_mnemonic(_("Set Arguments"));
gtk_widget_show(item);
if (keys[GEANY_KEYS_BUILD_OPTIONS]->key)
gtk_widget_add_accelerator(item, "activate", accel_group, keys[GEANY_KEYS_BUILD_OPTIONS]->key,
keys[GEANY_KEYS_BUILD_OPTIONS]->mods, GTK_ACCEL_VISIBLE);
gtk_container_add(GTK_CONTAINER (menu), item);
gtk_tooltips_set_tip(tooltips, item,
_("Sets the program paths and arguments"), NULL);
@ -772,6 +795,7 @@ void dialogs_show_make_target(void)
g_signal_connect((gpointer) entry, "activate", G_CALLBACK (on_make_target_entry_activate), dialog);
g_signal_connect((gpointer) dialog, "response", G_CALLBACK (on_make_target_dialog_response), entry);
g_signal_connect((gpointer) dialog, "delete_event", G_CALLBACK(gtk_widget_destroy), NULL);
gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), label);
gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), entry);
@ -1768,7 +1792,7 @@ void dialogs_show_prefs_dialog(void)
label = gtk_label_new(_("Terminal"));
gtk_notebook_set_tab_label(GTK_NOTEBOOK(notebook), gtk_notebook_get_nth_page(
GTK_NOTEBOOK(notebook), 4), label);
GTK_NOTEBOOK(notebook), 5), label);
g_object_set_data_full(G_OBJECT(app->prefs_dialog), "font_term",
gtk_widget_ref(font_term), (GDestroyNotify) gtk_widget_unref);
@ -1805,14 +1829,6 @@ void dialogs_show_prefs_dialog(void)
g_signal_connect((gpointer) lookup_widget(app->prefs_dialog, "long_line_color"),
"color-set", G_CALLBACK(on_prefs_color_choosed), GINT_TO_POINTER(1));
// file chooser buttons in the tools tab
g_signal_connect((gpointer) lookup_widget(app->prefs_dialog, "button_gcc"),
"clicked", G_CALLBACK(on_pref_tools_button_clicked), lookup_widget(app->prefs_dialog, "entry_com_c"));
g_signal_connect((gpointer) lookup_widget(app->prefs_dialog, "button_gpp"),
"clicked", G_CALLBACK(on_pref_tools_button_clicked), lookup_widget(app->prefs_dialog, "entry_com_cpp"));
g_signal_connect((gpointer) lookup_widget(app->prefs_dialog, "button_javac"),
"clicked", G_CALLBACK(on_pref_tools_button_clicked), lookup_widget(app->prefs_dialog, "entry_com_javac"));
g_signal_connect((gpointer) lookup_widget(app->prefs_dialog, "button_java"),
"clicked", G_CALLBACK(on_pref_tools_button_clicked), lookup_widget(app->prefs_dialog, "entry_com_java"));
g_signal_connect((gpointer) lookup_widget(app->prefs_dialog, "button_make"),
"clicked", G_CALLBACK(on_pref_tools_button_clicked), lookup_widget(app->prefs_dialog, "entry_com_make"));
g_signal_connect((gpointer) lookup_widget(app->prefs_dialog, "button_term"),

View File

@ -36,9 +36,6 @@
#ifdef HAVE_SYS_TYPES_H
# include <sys/types.h>
#endif
#ifdef HAVE_MMAP
# include <sys/mman.h>
#endif
#ifdef HAVE_FCNTL_H
# include <fcntl.h>
#endif
@ -282,9 +279,9 @@ gint document_create_new_sci(const gchar *filename)
g_signal_connect((GtkWidget*) sci, "sci-notify",
G_CALLBACK(on_editor_notification), GINT_TO_POINTER(new_idx));
// signal for insert-key(works without too, but to update the right status bar)
g_signal_connect((GtkWidget*) sci, "key-press-event",
G_CALLBACK(on_editor_key_press_event), GINT_TO_POINTER(new_idx));
// signal for the popup menu
/* g_signal_connect((GtkWidget*) sci, "key-press-event",
G_CALLBACK(keybindings_got_event), GINT_TO_POINTER(new_idx));
*/ // signal for the popup menu
g_signal_connect((GtkWidget*) sci, "button-press-event",
G_CALLBACK(on_editor_button_press_event), GINT_TO_POINTER(new_idx));
// signal for clicking the tab-close button

View File

@ -40,6 +40,7 @@
#include "tm_tagmanager.h"
#include "filetypes.h"
#include "keybindings.h"
#define SSM(s, m, w, l) scintilla_send_message(s, m, w, l)
@ -57,6 +58,7 @@
// for detailed description look in the documentation, things are not
// listed in the documentation should not be changed ;-)
#define GEANY_HOME_DIR g_get_home_dir()
#define GEANY_FILEDEFS_SUBDIR "filedefs"
#define GEANY_FIFO_NAME "geany_fifo.0"
#define GEANY_CODENAME "Ravik"
#define GEANY_HOMEPAGE "http://geany.uvena.de/"
@ -214,9 +216,10 @@ typedef struct MyApp
MyApp *app;
/// TODO remove me
gboolean alternative_scrolling;
// small struct to track tag name and type together
typedef struct GeanySymbol
{

View File

@ -37,7 +37,7 @@ create_window1 (void)
GtkWidget *menuitem1_menu;
GtkWidget *menu_new1;
GtkWidget *menu_new_with_template1;
GtkWidget *image586;
GtkWidget *image602;
GtkWidget *menu_new_with_template1_menu;
GtkWidget *invisible2;
GtkWidget *separator12;
@ -46,14 +46,14 @@ create_window1 (void)
GtkWidget *menu_save1;
GtkWidget *menu_save_as1;
GtkWidget *menu_save_all1;
GtkWidget *image587;
GtkWidget *image603;
GtkWidget *revert1;
GtkWidget *separator21;
GtkWidget *preferences2;
GtkWidget *separator14;
GtkWidget *menu_close1;
GtkWidget *menu_close_all1;
GtkWidget *image588;
GtkWidget *image604;
GtkWidget *menu_separatormenuitem1;
GtkWidget *recent_files1;
GtkWidget *recent_files1_menu;
@ -71,11 +71,11 @@ create_window1 (void)
GtkWidget *menu_delete1;
GtkWidget *menu_seperator2;
GtkWidget *insert_include2;
GtkWidget *image589;
GtkWidget *image605;
GtkWidget *insert_include2_menu;
GtkWidget *invisible4;
GtkWidget *add_comments1;
GtkWidget *image590;
GtkWidget *image606;
GtkWidget *add_comments1_menu;
GtkWidget *menu_add_changelog_entry1;
GtkWidget *insert_file_header1;
@ -91,17 +91,17 @@ create_window1 (void)
GtkWidget *separator9;
GtkWidget *find1;
GtkWidget *find_next1;
GtkWidget *image591;
GtkWidget *image607;
GtkWidget *replace1;
GtkWidget *image592;
GtkWidget *image608;
GtkWidget *separator11;
GtkWidget *preferences1;
GtkWidget *menuitem3;
GtkWidget *menuitem3_menu;
GtkWidget *menu_change_font1;
GtkWidget *image593;
GtkWidget *image609;
GtkWidget *menu_choose_color1;
GtkWidget *image594;
GtkWidget *image610;
GtkWidget *menu_separator4;
GtkWidget *menu_fullscreen1;
GtkWidget *menu_show_messages_window1;
@ -228,9 +228,9 @@ create_window1 (void)
gtk_widget_show (menu_new_with_template1);
gtk_container_add (GTK_CONTAINER (menuitem1_menu), menu_new_with_template1);
image586 = gtk_image_new_from_stock ("gtk-new", GTK_ICON_SIZE_MENU);
gtk_widget_show (image586);
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_new_with_template1), image586);
image602 = gtk_image_new_from_stock ("gtk-new", GTK_ICON_SIZE_MENU);
gtk_widget_show (image602);
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_new_with_template1), image602);
menu_new_with_template1_menu = gtk_menu_new ();
gtk_menu_item_set_submenu (GTK_MENU_ITEM (menu_new_with_template1), menu_new_with_template1_menu);
@ -264,13 +264,10 @@ create_window1 (void)
gtk_widget_show (menu_save_all1);
gtk_container_add (GTK_CONTAINER (menuitem1_menu), menu_save_all1);
gtk_tooltips_set_tip (tooltips, menu_save_all1, _("Saves all open files"), NULL);
gtk_widget_add_accelerator (menu_save_all1, "activate", accel_group,
GDK_s, (GdkModifierType) GDK_CONTROL_MASK | GDK_SHIFT_MASK,
GTK_ACCEL_VISIBLE);
image587 = gtk_image_new_from_stock ("gtk-save", GTK_ICON_SIZE_MENU);
gtk_widget_show (image587);
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_save_all1), image587);
image603 = gtk_image_new_from_stock ("gtk-save", GTK_ICON_SIZE_MENU);
gtk_widget_show (image603);
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_save_all1), image603);
revert1 = gtk_image_menu_item_new_from_stock ("gtk-revert-to-saved", accel_group);
gtk_widget_show (revert1);
@ -298,13 +295,10 @@ create_window1 (void)
gtk_widget_show (menu_close_all1);
gtk_container_add (GTK_CONTAINER (menuitem1_menu), menu_close_all1);
gtk_tooltips_set_tip (tooltips, menu_close_all1, _("Closes all open files"), NULL);
gtk_widget_add_accelerator (menu_close_all1, "activate", accel_group,
GDK_d, (GdkModifierType) GDK_MOD1_MASK,
GTK_ACCEL_VISIBLE);
image588 = gtk_image_new_from_stock ("gtk-close", GTK_ICON_SIZE_MENU);
gtk_widget_show (image588);
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_close_all1), image588);
image604 = gtk_image_new_from_stock ("gtk-close", GTK_ICON_SIZE_MENU);
gtk_widget_show (image604);
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_close_all1), image604);
menu_separatormenuitem1 = gtk_separator_menu_item_new ();
gtk_widget_show (menu_separatormenuitem1);
@ -376,9 +370,9 @@ create_window1 (void)
gtk_widget_show (insert_include2);
gtk_container_add (GTK_CONTAINER (edit1_menu), insert_include2);
image589 = gtk_image_new_from_stock ("gtk-add", GTK_ICON_SIZE_MENU);
gtk_widget_show (image589);
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (insert_include2), image589);
image605 = gtk_image_new_from_stock ("gtk-add", GTK_ICON_SIZE_MENU);
gtk_widget_show (image605);
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (insert_include2), image605);
insert_include2_menu = gtk_menu_new ();
gtk_menu_item_set_submenu (GTK_MENU_ITEM (insert_include2), insert_include2_menu);
@ -390,9 +384,9 @@ create_window1 (void)
gtk_widget_show (add_comments1);
gtk_container_add (GTK_CONTAINER (edit1_menu), add_comments1);
image590 = gtk_image_new_from_stock ("gtk-add", GTK_ICON_SIZE_MENU);
gtk_widget_show (image590);
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (add_comments1), image590);
image606 = gtk_image_new_from_stock ("gtk-add", GTK_ICON_SIZE_MENU);
gtk_widget_show (image606);
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (add_comments1), image606);
add_comments1_menu = gtk_menu_new ();
gtk_menu_item_set_submenu (GTK_MENU_ITEM (add_comments1), add_comments1_menu);
@ -459,21 +453,18 @@ create_window1 (void)
find_next1 = gtk_image_menu_item_new_with_mnemonic (_("Find _next"));
gtk_widget_show (find_next1);
gtk_container_add (GTK_CONTAINER (edit1_menu), find_next1);
gtk_widget_add_accelerator (find_next1, "activate", accel_group,
GDK_F3, (GdkModifierType) 0,
GTK_ACCEL_VISIBLE);
image591 = gtk_image_new_from_stock ("gtk-find", GTK_ICON_SIZE_MENU);
gtk_widget_show (image591);
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (find_next1), image591);
image607 = gtk_image_new_from_stock ("gtk-find", GTK_ICON_SIZE_MENU);
gtk_widget_show (image607);
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (find_next1), image607);
replace1 = gtk_image_menu_item_new_with_mnemonic (_("_Replace"));
gtk_widget_show (replace1);
gtk_container_add (GTK_CONTAINER (edit1_menu), replace1);
image592 = gtk_image_new_from_stock ("gtk-find-and-replace", GTK_ICON_SIZE_MENU);
gtk_widget_show (image592);
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (replace1), image592);
image608 = gtk_image_new_from_stock ("gtk-find-and-replace", GTK_ICON_SIZE_MENU);
gtk_widget_show (image608);
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (replace1), image608);
separator11 = gtk_separator_menu_item_new ();
gtk_widget_show (separator11);
@ -496,18 +487,18 @@ create_window1 (void)
gtk_container_add (GTK_CONTAINER (menuitem3_menu), menu_change_font1);
gtk_tooltips_set_tip (tooltips, menu_change_font1, _("Change the default font"), NULL);
image593 = gtk_image_new_from_stock ("gtk-select-font", GTK_ICON_SIZE_MENU);
gtk_widget_show (image593);
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_change_font1), image593);
image609 = gtk_image_new_from_stock ("gtk-select-font", GTK_ICON_SIZE_MENU);
gtk_widget_show (image609);
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_change_font1), image609);
menu_choose_color1 = gtk_image_menu_item_new_with_mnemonic (_("Show Color Chooser"));
gtk_widget_show (menu_choose_color1);
gtk_container_add (GTK_CONTAINER (menuitem3_menu), menu_choose_color1);
gtk_tooltips_set_tip (tooltips, menu_choose_color1, _("Open a color chooser dialog, to interactively pick colors from a palette."), NULL);
image594 = gtk_image_new_from_stock ("gtk-select-color", GTK_ICON_SIZE_MENU);
gtk_widget_show (image594);
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_choose_color1), image594);
image610 = gtk_image_new_from_stock ("gtk-select-color", GTK_ICON_SIZE_MENU);
gtk_widget_show (image610);
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_choose_color1), image610);
menu_separator4 = gtk_separator_menu_item_new ();
gtk_widget_show (menu_separator4);
@ -517,9 +508,6 @@ create_window1 (void)
menu_fullscreen1 = gtk_check_menu_item_new_with_mnemonic (_("Fullscreen"));
gtk_widget_show (menu_fullscreen1);
gtk_container_add (GTK_CONTAINER (menuitem3_menu), menu_fullscreen1);
gtk_widget_add_accelerator (menu_fullscreen1, "activate", accel_group,
GDK_F11, (GdkModifierType) 0,
GTK_ACCEL_VISIBLE);
menu_show_messages_window1 = gtk_check_menu_item_new_with_mnemonic (_("Show messages window"));
gtk_widget_show (menu_show_messages_window1);
@ -1163,7 +1151,7 @@ create_window1 (void)
GLADE_HOOKUP_OBJECT (window1, menuitem1_menu, "menuitem1_menu");
GLADE_HOOKUP_OBJECT (window1, menu_new1, "menu_new1");
GLADE_HOOKUP_OBJECT (window1, menu_new_with_template1, "menu_new_with_template1");
GLADE_HOOKUP_OBJECT (window1, image586, "image586");
GLADE_HOOKUP_OBJECT (window1, image602, "image602");
GLADE_HOOKUP_OBJECT (window1, menu_new_with_template1_menu, "menu_new_with_template1_menu");
GLADE_HOOKUP_OBJECT (window1, invisible2, "invisible2");
GLADE_HOOKUP_OBJECT (window1, separator12, "separator12");
@ -1172,14 +1160,14 @@ create_window1 (void)
GLADE_HOOKUP_OBJECT (window1, menu_save1, "menu_save1");
GLADE_HOOKUP_OBJECT (window1, menu_save_as1, "menu_save_as1");
GLADE_HOOKUP_OBJECT (window1, menu_save_all1, "menu_save_all1");
GLADE_HOOKUP_OBJECT (window1, image587, "image587");
GLADE_HOOKUP_OBJECT (window1, image603, "image603");
GLADE_HOOKUP_OBJECT (window1, revert1, "revert1");
GLADE_HOOKUP_OBJECT (window1, separator21, "separator21");
GLADE_HOOKUP_OBJECT (window1, preferences2, "preferences2");
GLADE_HOOKUP_OBJECT (window1, separator14, "separator14");
GLADE_HOOKUP_OBJECT (window1, menu_close1, "menu_close1");
GLADE_HOOKUP_OBJECT (window1, menu_close_all1, "menu_close_all1");
GLADE_HOOKUP_OBJECT (window1, image588, "image588");
GLADE_HOOKUP_OBJECT (window1, image604, "image604");
GLADE_HOOKUP_OBJECT (window1, menu_separatormenuitem1, "menu_separatormenuitem1");
GLADE_HOOKUP_OBJECT (window1, recent_files1, "recent_files1");
GLADE_HOOKUP_OBJECT (window1, recent_files1_menu, "recent_files1_menu");
@ -1197,11 +1185,11 @@ create_window1 (void)
GLADE_HOOKUP_OBJECT (window1, menu_delete1, "menu_delete1");
GLADE_HOOKUP_OBJECT (window1, menu_seperator2, "menu_seperator2");
GLADE_HOOKUP_OBJECT (window1, insert_include2, "insert_include2");
GLADE_HOOKUP_OBJECT (window1, image589, "image589");
GLADE_HOOKUP_OBJECT (window1, image605, "image605");
GLADE_HOOKUP_OBJECT (window1, insert_include2_menu, "insert_include2_menu");
GLADE_HOOKUP_OBJECT (window1, invisible4, "invisible4");
GLADE_HOOKUP_OBJECT (window1, add_comments1, "add_comments1");
GLADE_HOOKUP_OBJECT (window1, image590, "image590");
GLADE_HOOKUP_OBJECT (window1, image606, "image606");
GLADE_HOOKUP_OBJECT (window1, add_comments1_menu, "add_comments1_menu");
GLADE_HOOKUP_OBJECT (window1, menu_add_changelog_entry1, "menu_add_changelog_entry1");
GLADE_HOOKUP_OBJECT (window1, insert_file_header1, "insert_file_header1");
@ -1217,17 +1205,17 @@ create_window1 (void)
GLADE_HOOKUP_OBJECT (window1, separator9, "separator9");
GLADE_HOOKUP_OBJECT (window1, find1, "find1");
GLADE_HOOKUP_OBJECT (window1, find_next1, "find_next1");
GLADE_HOOKUP_OBJECT (window1, image591, "image591");
GLADE_HOOKUP_OBJECT (window1, image607, "image607");
GLADE_HOOKUP_OBJECT (window1, replace1, "replace1");
GLADE_HOOKUP_OBJECT (window1, image592, "image592");
GLADE_HOOKUP_OBJECT (window1, image608, "image608");
GLADE_HOOKUP_OBJECT (window1, separator11, "separator11");
GLADE_HOOKUP_OBJECT (window1, preferences1, "preferences1");
GLADE_HOOKUP_OBJECT (window1, menuitem3, "menuitem3");
GLADE_HOOKUP_OBJECT (window1, menuitem3_menu, "menuitem3_menu");
GLADE_HOOKUP_OBJECT (window1, menu_change_font1, "menu_change_font1");
GLADE_HOOKUP_OBJECT (window1, image593, "image593");
GLADE_HOOKUP_OBJECT (window1, image609, "image609");
GLADE_HOOKUP_OBJECT (window1, menu_choose_color1, "menu_choose_color1");
GLADE_HOOKUP_OBJECT (window1, image594, "image594");
GLADE_HOOKUP_OBJECT (window1, image610, "image610");
GLADE_HOOKUP_OBJECT (window1, menu_separator4, "menu_separator4");
GLADE_HOOKUP_OBJECT (window1, menu_fullscreen1, "menu_fullscreen1");
GLADE_HOOKUP_OBJECT (window1, menu_show_messages_window1, "menu_show_messages_window1");
@ -1822,38 +1810,18 @@ create_prefs_dialog (void)
GtkWidget *vbox2;
GtkWidget *label17;
GtkWidget *table1;
GtkWidget *entry_com_c;
GtkWidget *label12;
GtkWidget *label13;
GtkWidget *label114;
GtkWidget *entry_com_javac;
GtkWidget *entry_com_cpp;
GtkWidget *label97;
GtkWidget *entry_com_term;
GtkWidget *label11;
GtkWidget *label113;
GtkWidget *entry_com_make;
GtkWidget *entry_com_pascal;
GtkWidget *label115;
GtkWidget *entry_com_java;
GtkWidget *label97;
GtkWidget *label117;
GtkWidget *entry_com_make;
GtkWidget *entry_com_term;
GtkWidget *entry_browser;
GtkWidget *button_gcc;
GtkWidget *image280;
GtkWidget *button_gpp;
GtkWidget *bu;
GtkWidget *button_java;
GtkWidget *image283;
GtkWidget *button_fpc;
GtkWidget *image284;
GtkWidget *button_make;
GtkWidget *image285;
GtkWidget *button_term;
GtkWidget *image286;
GtkWidget *button_browser;
GtkWidget *image287;
GtkWidget *button_javac;
GtkWidget *image288;
GtkWidget *label96;
GtkWidget *vbox9;
GtkWidget *label120;
@ -1870,6 +1838,13 @@ create_prefs_dialog (void)
GtkWidget *entry_template_developer;
GtkWidget *label132;
GtkWidget *label119;
GtkWidget *vbox13;
GtkWidget *label152;
GtkWidget *scrolledwindow8;
GtkWidget *treeview7;
GtkWidget *alignment10;
GtkWidget *button2;
GtkWidget *label151;
GtkWidget *dialog_action_area3;
GtkWidget *cancelbutton1;
GtkWidget *okbutton1;
@ -2329,153 +2304,57 @@ create_prefs_dialog (void)
gtk_box_pack_start (GTK_BOX (vbox2), label17, FALSE, FALSE, 0);
gtk_misc_set_padding (GTK_MISC (label17), 0, 6);
table1 = gtk_table_new (8, 3, FALSE);
table1 = gtk_table_new (3, 3, FALSE);
gtk_widget_show (table1);
gtk_box_pack_start (GTK_BOX (vbox2), table1, TRUE, TRUE, 0);
gtk_table_set_row_spacings (GTK_TABLE (table1), 7);
gtk_table_set_col_spacings (GTK_TABLE (table1), 5);
entry_com_c = gtk_entry_new ();
gtk_table_attach (GTK_TABLE (table1), entry_com_c, 1, 2, 0, 1,
(GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
(GtkAttachOptions) (0), 0, 0);
gtk_tooltips_set_tip (tooltips, entry_com_c, _("Path and options for the C compiler"), NULL);
label12 = gtk_label_new (_("C Compiler"));
gtk_table_attach (GTK_TABLE (table1), label12, 0, 1, 0, 1,
(GtkAttachOptions) (GTK_FILL),
(GtkAttachOptions) (0), 0, 0);
gtk_misc_set_alignment (GTK_MISC (label12), 0, 0.5);
label13 = gtk_label_new (_("C++ Compiler"));
gtk_table_attach (GTK_TABLE (table1), label13, 0, 1, 1, 2,
(GtkAttachOptions) (GTK_FILL),
(GtkAttachOptions) (0), 0, 0);
gtk_misc_set_alignment (GTK_MISC (label13), 0, 0.5);
label114 = gtk_label_new (_("Java Compiler"));
gtk_table_attach (GTK_TABLE (table1), label114, 0, 1, 2, 3,
(GtkAttachOptions) (GTK_FILL),
(GtkAttachOptions) (0), 0, 0);
gtk_misc_set_alignment (GTK_MISC (label114), 0, 0.5);
entry_com_javac = gtk_entry_new ();
gtk_table_attach (GTK_TABLE (table1), entry_com_javac, 1, 2, 2, 3,
(GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
(GtkAttachOptions) (0), 0, 0);
gtk_tooltips_set_tip (tooltips, entry_com_javac, _("Path and options for the Java compiler"), NULL);
entry_com_cpp = gtk_entry_new ();
gtk_table_attach (GTK_TABLE (table1), entry_com_cpp, 1, 2, 1, 2,
(GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
(GtkAttachOptions) (0), 0, 0);
gtk_tooltips_set_tip (tooltips, entry_com_cpp, _("Path and options for the C++ compiler"), NULL);
label97 = gtk_label_new (_("Terminal"));
gtk_widget_show (label97);
gtk_table_attach (GTK_TABLE (table1), label97, 0, 1, 6, 7,
(GtkAttachOptions) (GTK_FILL),
(GtkAttachOptions) (0), 0, 0);
gtk_misc_set_alignment (GTK_MISC (label97), 0, 0.5);
entry_com_term = gtk_entry_new ();
gtk_widget_show (entry_com_term);
gtk_table_attach (GTK_TABLE (table1), entry_com_term, 1, 2, 6, 7,
(GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
(GtkAttachOptions) (0), 0, 0);
gtk_tooltips_set_tip (tooltips, entry_com_term, _("A terminal emulator like xterm, gnome-terminal or konsole (should accept the -e argument)"), NULL);
label11 = gtk_label_new (_("Make"));
gtk_widget_show (label11);
gtk_table_attach (GTK_TABLE (table1), label11, 0, 1, 5, 6,
gtk_table_attach (GTK_TABLE (table1), label11, 0, 1, 0, 1,
(GtkAttachOptions) (GTK_FILL),
(GtkAttachOptions) (0), 0, 0);
gtk_misc_set_alignment (GTK_MISC (label11), 0, 0.5);
label113 = gtk_label_new (_("Pascal Compiler"));
gtk_table_attach (GTK_TABLE (table1), label113, 0, 1, 4, 5,
label97 = gtk_label_new (_("Terminal"));
gtk_widget_show (label97);
gtk_table_attach (GTK_TABLE (table1), label97, 0, 1, 1, 2,
(GtkAttachOptions) (GTK_FILL),
(GtkAttachOptions) (0), 0, 0);
gtk_misc_set_alignment (GTK_MISC (label113), 0, 0.5);
entry_com_make = gtk_entry_new ();
gtk_widget_show (entry_com_make);
gtk_table_attach (GTK_TABLE (table1), entry_com_make, 1, 2, 5, 6,
(GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
(GtkAttachOptions) (0), 0, 0);
gtk_tooltips_set_tip (tooltips, entry_com_make, _("Path and options for the make tool"), NULL);
entry_com_pascal = gtk_entry_new ();
gtk_table_attach (GTK_TABLE (table1), entry_com_pascal, 1, 2, 4, 5,
(GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
(GtkAttachOptions) (0), 0, 0);
gtk_tooltips_set_tip (tooltips, entry_com_pascal, _("Path and options for the Pascal compiler"), NULL);
label115 = gtk_label_new (_("Java executable"));
gtk_table_attach (GTK_TABLE (table1), label115, 0, 1, 3, 4,
(GtkAttachOptions) (GTK_FILL),
(GtkAttachOptions) (0), 0, 0);
gtk_misc_set_alignment (GTK_MISC (label115), 0, 0.5);
entry_com_java = gtk_entry_new ();
gtk_table_attach (GTK_TABLE (table1), entry_com_java, 1, 2, 3, 4,
(GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
(GtkAttachOptions) (0), 0, 0);
gtk_tooltips_set_tip (tooltips, entry_com_java, _("Path and options for the java executable, to run java bytecode files(compiled java source files)"), NULL);
gtk_misc_set_alignment (GTK_MISC (label97), 0, 0.5);
label117 = gtk_label_new (_("Browser"));
gtk_widget_show (label117);
gtk_table_attach (GTK_TABLE (table1), label117, 0, 1, 7, 8,
gtk_table_attach (GTK_TABLE (table1), label117, 0, 1, 2, 3,
(GtkAttachOptions) (GTK_FILL),
(GtkAttachOptions) (0), 0, 0);
gtk_misc_set_alignment (GTK_MISC (label117), 0, 0.5);
entry_com_make = gtk_entry_new ();
gtk_widget_show (entry_com_make);
gtk_table_attach (GTK_TABLE (table1), entry_com_make, 1, 2, 0, 1,
(GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
(GtkAttachOptions) (0), 0, 0);
gtk_tooltips_set_tip (tooltips, entry_com_make, _("Path and options for the make tool"), NULL);
entry_com_term = gtk_entry_new ();
gtk_widget_show (entry_com_term);
gtk_table_attach (GTK_TABLE (table1), entry_com_term, 1, 2, 1, 2,
(GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
(GtkAttachOptions) (0), 0, 0);
gtk_tooltips_set_tip (tooltips, entry_com_term, _("A terminal emulator like xterm, gnome-terminal or konsole (should accept the -e argument)"), NULL);
entry_browser = gtk_entry_new ();
gtk_widget_show (entry_browser);
gtk_table_attach (GTK_TABLE (table1), entry_browser, 1, 2, 7, 8,
gtk_table_attach (GTK_TABLE (table1), entry_browser, 1, 2, 2, 3,
(GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
(GtkAttachOptions) (0), 0, 0);
gtk_tooltips_set_tip (tooltips, entry_browser, _("Path (and possibly additional arguments) to your favorite browser"), NULL);
button_gcc = gtk_button_new ();
gtk_table_attach (GTK_TABLE (table1), button_gcc, 2, 3, 0, 1,
(GtkAttachOptions) (GTK_FILL),
(GtkAttachOptions) (0), 0, 0);
image280 = gtk_image_new_from_stock ("gtk-open", GTK_ICON_SIZE_BUTTON);
gtk_widget_show (image280);
gtk_container_add (GTK_CONTAINER (button_gcc), image280);
button_gpp = gtk_button_new ();
gtk_table_attach (GTK_TABLE (table1), button_gpp, 2, 3, 1, 2,
(GtkAttachOptions) (GTK_FILL),
(GtkAttachOptions) (0), 0, 0);
bu = gtk_image_new_from_stock ("gtk-open", GTK_ICON_SIZE_BUTTON);
gtk_widget_show (bu);
gtk_container_add (GTK_CONTAINER (button_gpp), bu);
button_java = gtk_button_new ();
gtk_table_attach (GTK_TABLE (table1), button_java, 2, 3, 3, 4,
(GtkAttachOptions) (GTK_FILL),
(GtkAttachOptions) (0), 0, 0);
image283 = gtk_image_new_from_stock ("gtk-open", GTK_ICON_SIZE_BUTTON);
gtk_widget_show (image283);
gtk_container_add (GTK_CONTAINER (button_java), image283);
button_fpc = gtk_button_new ();
gtk_table_attach (GTK_TABLE (table1), button_fpc, 2, 3, 4, 5,
(GtkAttachOptions) (GTK_FILL),
(GtkAttachOptions) (0), 0, 0);
image284 = gtk_image_new_from_stock ("gtk-open", GTK_ICON_SIZE_BUTTON);
gtk_widget_show (image284);
gtk_container_add (GTK_CONTAINER (button_fpc), image284);
button_make = gtk_button_new ();
gtk_widget_show (button_make);
gtk_table_attach (GTK_TABLE (table1), button_make, 2, 3, 5, 6,
gtk_table_attach (GTK_TABLE (table1), button_make, 2, 3, 0, 1,
(GtkAttachOptions) (GTK_FILL),
(GtkAttachOptions) (0), 0, 0);
@ -2485,7 +2364,7 @@ create_prefs_dialog (void)
button_term = gtk_button_new ();
gtk_widget_show (button_term);
gtk_table_attach (GTK_TABLE (table1), button_term, 2, 3, 6, 7,
gtk_table_attach (GTK_TABLE (table1), button_term, 2, 3, 1, 2,
(GtkAttachOptions) (GTK_FILL),
(GtkAttachOptions) (0), 0, 0);
@ -2495,7 +2374,7 @@ create_prefs_dialog (void)
button_browser = gtk_button_new ();
gtk_widget_show (button_browser);
gtk_table_attach (GTK_TABLE (table1), button_browser, 2, 3, 7, 8,
gtk_table_attach (GTK_TABLE (table1), button_browser, 2, 3, 2, 3,
(GtkAttachOptions) (GTK_FILL),
(GtkAttachOptions) (0), 0, 0);
@ -2503,15 +2382,6 @@ create_prefs_dialog (void)
gtk_widget_show (image287);
gtk_container_add (GTK_CONTAINER (button_browser), image287);
button_javac = gtk_button_new ();
gtk_table_attach (GTK_TABLE (table1), button_javac, 2, 3, 2, 3,
(GtkAttachOptions) (GTK_FILL),
(GtkAttachOptions) (0), 0, 0);
image288 = gtk_image_new_from_stock ("gtk-open", GTK_ICON_SIZE_BUTTON);
gtk_widget_show (image288);
gtk_container_add (GTK_CONTAINER (button_javac), image288);
label96 = gtk_label_new (_("Tools"));
gtk_widget_show (label96);
gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook2), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook2), 2), label96);
@ -2609,6 +2479,41 @@ create_prefs_dialog (void)
gtk_widget_show (label119);
gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook2), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook2), 3), label119);
vbox13 = gtk_vbox_new (FALSE, 5);
gtk_widget_show (vbox13);
gtk_container_add (GTK_CONTAINER (notebook2), vbox13);
label152 = gtk_label_new (_("Here you can change keyboard shortcuts for various actions. Just double click on a action or select one and press the Change button to enter a new shortcut. You can also edit the string representation of the shortcut directly."));
gtk_widget_show (label152);
gtk_box_pack_start (GTK_BOX (vbox13), label152, FALSE, TRUE, 0);
gtk_label_set_justify (GTK_LABEL (label152), GTK_JUSTIFY_FILL);
gtk_label_set_line_wrap (GTK_LABEL (label152), TRUE);
gtk_misc_set_alignment (GTK_MISC (label152), 0.1, 0);
gtk_misc_set_padding (GTK_MISC (label152), 0, 5);
scrolledwindow8 = gtk_scrolled_window_new (NULL, NULL);
gtk_widget_show (scrolledwindow8);
gtk_box_pack_start (GTK_BOX (vbox13), scrolledwindow8, TRUE, TRUE, 0);
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow8), GTK_SHADOW_IN);
treeview7 = gtk_tree_view_new ();
gtk_widget_show (treeview7);
gtk_container_add (GTK_CONTAINER (scrolledwindow8), treeview7);
gtk_tree_view_set_enable_search (GTK_TREE_VIEW (treeview7), FALSE);
alignment10 = gtk_alignment_new (0.5, 0.5, 0.3, 1);
gtk_widget_show (alignment10);
gtk_box_pack_start (GTK_BOX (vbox13), alignment10, FALSE, FALSE, 0);
gtk_alignment_set_padding (GTK_ALIGNMENT (alignment10), 0, 5, 0, 0);
button2 = gtk_button_new_with_mnemonic (_("Change"));
gtk_widget_show (button2);
gtk_container_add (GTK_CONTAINER (alignment10), button2);
label151 = gtk_label_new (_("Keybindings"));
gtk_widget_show (label151);
gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook2), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook2), 4), label151);
dialog_action_area3 = GTK_DIALOG (prefs_dialog)->action_area;
gtk_widget_show (dialog_action_area3);
gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area3), GTK_BUTTONBOX_END);
@ -2705,38 +2610,18 @@ create_prefs_dialog (void)
GLADE_HOOKUP_OBJECT (prefs_dialog, vbox2, "vbox2");
GLADE_HOOKUP_OBJECT (prefs_dialog, label17, "label17");
GLADE_HOOKUP_OBJECT (prefs_dialog, table1, "table1");
GLADE_HOOKUP_OBJECT (prefs_dialog, entry_com_c, "entry_com_c");
GLADE_HOOKUP_OBJECT (prefs_dialog, label12, "label12");
GLADE_HOOKUP_OBJECT (prefs_dialog, label13, "label13");
GLADE_HOOKUP_OBJECT (prefs_dialog, label114, "label114");
GLADE_HOOKUP_OBJECT (prefs_dialog, entry_com_javac, "entry_com_javac");
GLADE_HOOKUP_OBJECT (prefs_dialog, entry_com_cpp, "entry_com_cpp");
GLADE_HOOKUP_OBJECT (prefs_dialog, label97, "label97");
GLADE_HOOKUP_OBJECT (prefs_dialog, entry_com_term, "entry_com_term");
GLADE_HOOKUP_OBJECT (prefs_dialog, label11, "label11");
GLADE_HOOKUP_OBJECT (prefs_dialog, label113, "label113");
GLADE_HOOKUP_OBJECT (prefs_dialog, entry_com_make, "entry_com_make");
GLADE_HOOKUP_OBJECT (prefs_dialog, entry_com_pascal, "entry_com_pascal");
GLADE_HOOKUP_OBJECT (prefs_dialog, label115, "label115");
GLADE_HOOKUP_OBJECT (prefs_dialog, entry_com_java, "entry_com_java");
GLADE_HOOKUP_OBJECT (prefs_dialog, label97, "label97");
GLADE_HOOKUP_OBJECT (prefs_dialog, label117, "label117");
GLADE_HOOKUP_OBJECT (prefs_dialog, entry_com_make, "entry_com_make");
GLADE_HOOKUP_OBJECT (prefs_dialog, entry_com_term, "entry_com_term");
GLADE_HOOKUP_OBJECT (prefs_dialog, entry_browser, "entry_browser");
GLADE_HOOKUP_OBJECT (prefs_dialog, button_gcc, "button_gcc");
GLADE_HOOKUP_OBJECT (prefs_dialog, image280, "image280");
GLADE_HOOKUP_OBJECT (prefs_dialog, button_gpp, "button_gpp");
GLADE_HOOKUP_OBJECT (prefs_dialog, bu, "bu");
GLADE_HOOKUP_OBJECT (prefs_dialog, button_java, "button_java");
GLADE_HOOKUP_OBJECT (prefs_dialog, image283, "image283");
GLADE_HOOKUP_OBJECT (prefs_dialog, button_fpc, "button_fpc");
GLADE_HOOKUP_OBJECT (prefs_dialog, image284, "image284");
GLADE_HOOKUP_OBJECT (prefs_dialog, button_make, "button_make");
GLADE_HOOKUP_OBJECT (prefs_dialog, image285, "image285");
GLADE_HOOKUP_OBJECT (prefs_dialog, button_term, "button_term");
GLADE_HOOKUP_OBJECT (prefs_dialog, image286, "image286");
GLADE_HOOKUP_OBJECT (prefs_dialog, button_browser, "button_browser");
GLADE_HOOKUP_OBJECT (prefs_dialog, image287, "image287");
GLADE_HOOKUP_OBJECT (prefs_dialog, button_javac, "button_javac");
GLADE_HOOKUP_OBJECT (prefs_dialog, image288, "image288");
GLADE_HOOKUP_OBJECT (prefs_dialog, label96, "label96");
GLADE_HOOKUP_OBJECT (prefs_dialog, vbox9, "vbox9");
GLADE_HOOKUP_OBJECT (prefs_dialog, label120, "label120");
@ -2753,6 +2638,13 @@ create_prefs_dialog (void)
GLADE_HOOKUP_OBJECT (prefs_dialog, entry_template_developer, "entry_template_developer");
GLADE_HOOKUP_OBJECT (prefs_dialog, label132, "label132");
GLADE_HOOKUP_OBJECT (prefs_dialog, label119, "label119");
GLADE_HOOKUP_OBJECT (prefs_dialog, vbox13, "vbox13");
GLADE_HOOKUP_OBJECT (prefs_dialog, label152, "label152");
GLADE_HOOKUP_OBJECT (prefs_dialog, scrolledwindow8, "scrolledwindow8");
GLADE_HOOKUP_OBJECT (prefs_dialog, treeview7, "treeview7");
GLADE_HOOKUP_OBJECT (prefs_dialog, alignment10, "alignment10");
GLADE_HOOKUP_OBJECT (prefs_dialog, button2, "button2");
GLADE_HOOKUP_OBJECT (prefs_dialog, label151, "label151");
GLADE_HOOKUP_OBJECT_NO_REF (prefs_dialog, dialog_action_area3, "dialog_action_area3");
GLADE_HOOKUP_OBJECT (prefs_dialog, cancelbutton1, "cancelbutton1");
GLADE_HOOKUP_OBJECT (prefs_dialog, okbutton1, "okbutton1");

505
src/keybindings.c Normal file
View File

@ -0,0 +1,505 @@
/*
* keybindings.c - this file is part of Geany, a fast and lightweight IDE
*
* Copyright 2006 Enrico Troeger <enrico.troeger@uvena.de>
*
* 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 2 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* $Id$
*/
#include <gdk/gdkkeysyms.h>
#include "geany.h"
#include "keybindings.h"
#include "support.h"
#include "utils.h"
#include "document.h"
#include "callbacks.h"
#include "dialogs.h"
#include "msgwindow.h"
#include "sci_cb.h"
#include "sciwrappers.h"
// include vte.h on non-Win32 systems, else define fake vte_init
#ifdef HAVE_VTE
# include "vte.h"
#endif
/* simple convenience function to allocate and fill the struct */
static binding *fill(void (*func) (void), guint key, GdkModifierType mod, const gchar *name);
static void cb_func_menu_new(void);
static void cb_func_menu_open(void);
static void cb_func_menu_save(void);
static void cb_func_menu_saveall(void);
static void cb_func_menu_closeall(void);
static void cb_func_menu_reloadfile(void);
static void cb_func_menu_undo(void);
static void cb_func_menu_redo(void);
static void cb_func_menu_findnext(void);
static void cb_func_menu_replace(void);
static void cb_func_menu_preferences(void);
static void cb_func_menu_opencolorchooser(void);
static void cb_func_menu_fullscreen(void);
static void cb_func_menu_zoomin(void);
static void cb_func_menu_zoomout(void);
static void cb_func_menu_foldall(void);
static void cb_func_menu_unfoldall(void);
static void cb_func_build_compile(void);
static void cb_func_build_link(void);
static void cb_func_build_make(void);
static void cb_func_build_makeowntarget(void);
static void cb_func_build_run(void);
static void cb_func_build_run2(void);
static void cb_func_build_options(void);
static void cb_func_reloadtaglist(void);
static void cb_func_switch_editor(void);
static void cb_func_switch_scribble(void);
static void cb_func_switch_vte(void);
static void cb_func_switch_tableft(void);
static void cb_func_switch_tabright(void);
static void cb_func_edit_duplicateline(void);
static void cb_func_edit_commentline(void);
static void cb_func_edit_autocomplete(void);
static void cb_func_edit_calltip(void);
static void cb_func_edit_macrolist(void);
static void cb_func_edit_suppresscompletion(void);
void keybindings_init(void)
{
gchar *configfile = g_strconcat(app->configdir, G_DIR_SEPARATOR_S, "keybindings.conf", NULL);
gchar *val;
guint i;
guint key;
GdkModifierType mods;
GKeyFile *config = g_key_file_new();
GtkAccelGroup *accel_group = gtk_accel_group_new();
// init all fields of keys with default values
keys[GEANY_KEYS_MENU_NEW] = fill(cb_func_menu_new, 0, 0, "menu_new");
keys[GEANY_KEYS_MENU_OPEN] = fill(cb_func_menu_open, 0, 0, "menu_open");
keys[GEANY_KEYS_MENU_SAVE] = fill(cb_func_menu_save, 0, 0, "menu_save");
keys[GEANY_KEYS_MENU_SAVEALL] = fill(cb_func_menu_saveall, GDK_S, GDK_SHIFT_MASK | GDK_CONTROL_MASK, "menu_saveall");
keys[GEANY_KEYS_MENU_CLOSEALL] = fill(cb_func_menu_closeall, GDK_d, GDK_MOD1_MASK, "menu_closeall");
keys[GEANY_KEYS_MENU_RELOADFILE] = fill(cb_func_menu_reloadfile, GDK_r, GDK_CONTROL_MASK, "menu_reloadfile");
keys[GEANY_KEYS_MENU_UNDO] = fill(cb_func_menu_undo, GDK_z, GDK_CONTROL_MASK, "menu_undo");
keys[GEANY_KEYS_MENU_REDO] = fill(cb_func_menu_redo, GDK_y, GDK_CONTROL_MASK, "menu_redo");
keys[GEANY_KEYS_MENU_FIND_NEXT] = fill(cb_func_menu_findnext, GDK_F3, 0, "menu_findnext");
keys[GEANY_KEYS_MENU_REPLACE] = fill(cb_func_menu_replace, 0, 0, "menu_replace");
keys[GEANY_KEYS_MENU_PREFERENCES] = fill(cb_func_menu_preferences, GDK_p, GDK_CONTROL_MASK, "menu_preferences");
keys[GEANY_KEYS_MENU_OPENCOLORCHOOSER] = fill(cb_func_menu_opencolorchooser, 0, 0, "menu_opencolorchooser");
keys[GEANY_KEYS_MENU_FULLSCREEN] = fill(cb_func_menu_fullscreen, GDK_F11, 0, "menu_fullscreen");
keys[GEANY_KEYS_MENU_ZOOMIN] = fill(cb_func_menu_zoomin, GDK_plus, GDK_CONTROL_MASK, "menu_zoomin");
keys[GEANY_KEYS_MENU_ZOOMOUT] = fill(cb_func_menu_zoomout, GDK_minus, GDK_CONTROL_MASK, "menu_zoomout");
keys[GEANY_KEYS_MENU_FOLDALL] = fill(cb_func_menu_foldall, 0, 0, "menu_foldall");
keys[GEANY_KEYS_MENU_UNFOLDALL] = fill(cb_func_menu_unfoldall, 0, 0, "menu_unfoldall");
keys[GEANY_KEYS_BUILD_COMPILE] = fill(cb_func_build_compile, GDK_F8, 0, "build_compile");
keys[GEANY_KEYS_BUILD_LINK] = fill(cb_func_build_link, GDK_F9, 0, "build_link");
keys[GEANY_KEYS_BUILD_MAKE] = fill(cb_func_build_make, GDK_F9, GDK_SHIFT_MASK, "build_make");
keys[GEANY_KEYS_BUILD_MAKEOWNTARGET] = fill(cb_func_build_makeowntarget, GDK_F9, GDK_SHIFT_MASK | GDK_CONTROL_MASK, "build_makeowntarget");
keys[GEANY_KEYS_BUILD_RUN] = fill(cb_func_build_run, GDK_F5, 0, "build_run");
keys[GEANY_KEYS_BUILD_RUN2] = fill(cb_func_build_run2, 0, 0, "build_run2");
keys[GEANY_KEYS_BUILD_OPTIONS] = fill(cb_func_build_options, 0, 0, "build_options");
keys[GEANY_KEYS_RELOADTAGLIST] = fill(cb_func_reloadtaglist, GDK_r, GDK_SHIFT_MASK | GDK_CONTROL_MASK, "reloadtaglist");
keys[GEANY_KEYS_SWITCH_EDITOR] = fill(cb_func_switch_editor, GDK_F2, 0, "switch_editor");
keys[GEANY_KEYS_SWITCH_SCRIBBLE] = fill(cb_func_switch_scribble, GDK_F6, 0, "switch_scribble");
keys[GEANY_KEYS_SWITCH_VTE] = fill(cb_func_switch_vte, GDK_F4, 0, "switch_vte");
keys[GEANY_KEYS_SWITCH_TABLEFT] = fill(cb_func_switch_tableft, 0, 0, "switch_tableft");
keys[GEANY_KEYS_SWITCH_TABRIGHT] = fill(cb_func_switch_tabright, 0, 0, "switch_tabright");
keys[GEANY_KEYS_EDIT_DUPLICATELINE] = fill(cb_func_edit_duplicateline, GDK_g, GDK_CONTROL_MASK, "edit_duplicateline");
keys[GEANY_KEYS_EDIT_COMMENTLINE] = fill(cb_func_edit_commentline, GDK_d, GDK_CONTROL_MASK, "edit_commentline");
keys[GEANY_KEYS_EDIT_AUTOCOMPLETE] = fill(cb_func_edit_autocomplete, GDK_space, GDK_CONTROL_MASK, "edit_autocomplete");
keys[GEANY_KEYS_EDIT_CALLTIP] = fill(cb_func_edit_calltip, GDK_space, GDK_MOD1_MASK, "edit_calltip");
keys[GEANY_KEYS_EDIT_MACROLIST] = fill(cb_func_edit_macrolist, GDK_Return, GDK_CONTROL_MASK, "edit_macrolist");
keys[GEANY_KEYS_EDIT_SUPPRESSCOMPLETION] = fill(cb_func_edit_suppresscompletion, GDK_space, GDK_SHIFT_MASK, "edit_suppresscompletion");
// now load user defined keys
if (g_key_file_load_from_file(config, configfile, G_KEY_FILE_KEEP_COMMENTS, NULL))
{
for (i = 0; i < GEANY_MAX_KEYS; i++)
{
val = g_key_file_get_string(config, "Bindings", keys[i]->name, NULL);
if (val != NULL)
{
gtk_accelerator_parse(val, &key, &mods);
keys[i]->key = key;
keys[i]->mods = mods;
}
g_free(val);
}
}
// apply the settings
if (keys[GEANY_KEYS_MENU_SAVEALL]->key != 0)
gtk_widget_add_accelerator(lookup_widget(app->window, "menu_save_all1"), "activate", accel_group,
keys[GEANY_KEYS_MENU_SAVEALL]->key, keys[GEANY_KEYS_MENU_SAVEALL]->mods, GTK_ACCEL_VISIBLE);
if (keys[GEANY_KEYS_MENU_CLOSEALL]->key != 0)
gtk_widget_add_accelerator(lookup_widget(app->window, "menu_close_all1"), "activate", accel_group,
keys[GEANY_KEYS_MENU_CLOSEALL]->key, keys[GEANY_KEYS_MENU_CLOSEALL]->mods, GTK_ACCEL_VISIBLE);
if (keys[GEANY_KEYS_MENU_RELOADFILE]->key != 0)
gtk_widget_add_accelerator(lookup_widget(app->window, "revert1"), "activate", accel_group,
keys[GEANY_KEYS_MENU_RELOADFILE]->key, keys[GEANY_KEYS_MENU_RELOADFILE]->mods, GTK_ACCEL_VISIBLE);
if (keys[GEANY_KEYS_MENU_PREFERENCES]->key != 0)
gtk_widget_add_accelerator(lookup_widget(app->window, "preferences1"), "activate", accel_group,
keys[GEANY_KEYS_MENU_PREFERENCES]->key, keys[GEANY_KEYS_MENU_PREFERENCES]->mods, GTK_ACCEL_VISIBLE);
if (keys[GEANY_KEYS_MENU_FIND_NEXT]->key != 0)
gtk_widget_add_accelerator(lookup_widget(app->window, "find_next1"), "activate", accel_group,
keys[GEANY_KEYS_MENU_FIND_NEXT]->key, keys[GEANY_KEYS_MENU_FIND_NEXT]->mods, GTK_ACCEL_VISIBLE);
if (keys[GEANY_KEYS_MENU_FULLSCREEN]->key != 0)
gtk_widget_add_accelerator(lookup_widget(app->window, "menu_fullscreen1"), "activate", accel_group,
keys[GEANY_KEYS_MENU_FULLSCREEN]->key, keys[GEANY_KEYS_MENU_FULLSCREEN]->mods, GTK_ACCEL_VISIBLE);
if (keys[GEANY_KEYS_MENU_OPENCOLORCHOOSER]->key != 0)
gtk_widget_add_accelerator(lookup_widget(app->window, "menu_choose_color1"), "activate", accel_group,
keys[GEANY_KEYS_MENU_OPENCOLORCHOOSER]->key, keys[GEANY_KEYS_MENU_OPENCOLORCHOOSER]->mods, GTK_ACCEL_VISIBLE);
if (keys[GEANY_KEYS_MENU_ZOOMIN]->key != 0)
gtk_widget_add_accelerator(lookup_widget(app->window, "menu_zoom_in1"), "activate", accel_group,
keys[GEANY_KEYS_MENU_ZOOMIN]->key, keys[GEANY_KEYS_MENU_ZOOMIN]->mods, GTK_ACCEL_VISIBLE);
if (keys[GEANY_KEYS_MENU_ZOOMOUT]->key != 0)
gtk_widget_add_accelerator(lookup_widget(app->window, "menu_zoom_out1"), "activate", accel_group,
keys[GEANY_KEYS_MENU_ZOOMOUT]->key, keys[GEANY_KEYS_MENU_ZOOMOUT]->mods, GTK_ACCEL_VISIBLE);
if (keys[GEANY_KEYS_MENU_FOLDALL]->key != 0)
gtk_widget_add_accelerator(lookup_widget(app->window, "menu_fold_all1"), "activate", accel_group,
keys[GEANY_KEYS_MENU_FOLDALL]->key, keys[GEANY_KEYS_MENU_FOLDALL]->mods, GTK_ACCEL_VISIBLE);
if (keys[GEANY_KEYS_MENU_UNFOLDALL]->key != 0)
gtk_widget_add_accelerator(lookup_widget(app->window, "menu_unfold_all1"), "activate", accel_group,
keys[GEANY_KEYS_MENU_UNFOLDALL]->key, keys[GEANY_KEYS_MENU_UNFOLDALL]->mods, GTK_ACCEL_VISIBLE);
// the build menu items are set if the build menus are created
gtk_window_add_accel_group(GTK_WINDOW(app->window), accel_group);
g_free(configfile);
g_key_file_free(config);
}
/* just write the content of the keys array to the config file */
void keybindings_write_to_file(void)
{
gchar *configfile = g_strconcat(app->configdir, G_DIR_SEPARATOR_S, "keybindings.conf", NULL);
gchar *val, *data;
guint i;
GKeyFile *config = g_key_file_new();
// add comment if the file is newly created
if (! g_key_file_load_from_file(config, configfile, G_KEY_FILE_KEEP_COMMENTS, NULL))
{
g_key_file_set_comment(config, NULL, NULL, "Keybindings for Geany\nThe format looks like \"<Control>a\" or \"<Shift><Alt>F1\".\nBut you can also change the keys in Geany's preferences dialog.", NULL);
}
for (i = 0; i < GEANY_MAX_KEYS; i++)
{
val = gtk_accelerator_name(keys[i]->key, keys[i]->mods);
g_key_file_set_string(config, "Bindings", keys[i]->name, val);
g_free(val);
}
// write the file
data = g_key_file_to_data(config, NULL, NULL);
utils_write_file(configfile, data);
g_free(data);
g_free(configfile);
g_key_file_free(config);
}
void keybindings_free(void)
{
guint i;
for (i = 0; i < GEANY_MAX_KEYS; i++)
{
g_free(keys[i]);
}
}
/* central keypress event handler, almost all keypress events go to this function */
gboolean keybindings_got_event(GtkWidget *widget, GdkEventKey *event, gpointer user_data)
{
guint i, k;
for (i = 0; i < GEANY_MAX_KEYS; i++)
{
// ugly hack to get around that CTRL+Shift+r results in 'R' not 'r'
k = keys[i]->key;
if (event->state & GDK_SHIFT_MASK)
{
// skip entries which don't include SHIFT
if (! (keys[i]->mods & GDK_SHIFT_MASK)) continue;
// raise the keyval
if (keys[i]->key >= GDK_a && keys[i]->key <= GDK_z) k = keys[i]->key - 32;
}
// ignore numlock key, not necessary but nice
if (event->state & GDK_MOD2_MASK) event->state -= GDK_MOD2_MASK;
if (event->keyval == k && event->state == keys[i]->mods)
{
// call the corresponding callback function for this shortcut
if (keys[i]->cb_func != NULL) keys[i]->cb_func();
return TRUE;
}
}
return FALSE;
}
/* simple convenience function to allocate and fill the struct */
static binding *fill(void (*func) (void), guint key, GdkModifierType mod, const gchar *name)
{
binding *result;
result = g_new0(binding, 1);
result->name = name;
result->key = key;
result->mods = mod;
result->cb_func = func;
return result;
}
/* these are the callback functions, each shortcut has its own function, this is only for clear code */
static void cb_func_menu_new(void)
{
document_new_file(NULL);
}
static void cb_func_menu_open(void)
{
dialogs_show_open_file();
}
static void cb_func_menu_save(void)
{
on_save1_activate(NULL, NULL);
}
static void cb_func_menu_saveall(void)
{
on_save_all1_activate(NULL, NULL);
}
static void cb_func_menu_closeall(void)
{
on_close_all1_activate(NULL, NULL);
}
static void cb_func_menu_reloadfile(void)
{
on_toolbutton23_clicked(NULL, NULL);
}
static void cb_func_menu_undo(void)
{
on_undo1_activate(NULL, NULL);
}
static void cb_func_menu_redo(void)
{
on_redo1_activate(NULL, NULL);
}
static void cb_func_menu_findnext(void)
{
on_find_next1_activate(NULL, NULL);
}
static void cb_func_menu_replace(void)
{
dialogs_show_replace();
}
static void cb_func_menu_preferences(void)
{
dialogs_show_prefs_dialog();
}
static void cb_func_menu_opencolorchooser(void)
{
dialogs_show_color();
}
static void cb_func_menu_fullscreen(void)
{
GtkCheckMenuItem *c = GTK_CHECK_MENU_ITEM(lookup_widget(app->window, "menu_fullscreen1"));
gtk_check_menu_item_set_active(c, ! gtk_check_menu_item_get_active(c));
}
static void cb_func_menu_zoomin(void)
{
on_zoom_in1_activate(NULL, NULL);
}
static void cb_func_menu_zoomout(void)
{
on_zoom_out1_activate(NULL, NULL);
}
static void cb_func_menu_foldall(void)
{
gint idx = document_get_cur_idx();
document_fold_all(idx);
}
static void cb_func_menu_unfoldall(void)
{
gint idx = document_get_cur_idx();
document_unfold_all(idx);
}
static void cb_func_build_compile(void)
{
gint idx = document_get_cur_idx();
if (doc_list[idx].file_type->menu_items->can_compile && doc_list[idx].file_name != NULL)
on_build_compile_activate(NULL, NULL);
}
static void cb_func_build_link(void)
{
gint idx = document_get_cur_idx();
if (doc_list[idx].file_type->menu_items->can_link && doc_list[idx].file_name != NULL)
on_build_build_activate(NULL, NULL);
}
static void cb_func_build_make(void)
{
gint idx = document_get_cur_idx();
if (doc_list[idx].file_name != NULL)
on_build_make_activate(NULL, GINT_TO_POINTER(0));
}
static void cb_func_build_makeowntarget(void)
{
gint idx = document_get_cur_idx();
if (doc_list[idx].file_name != NULL)
on_build_make_activate(NULL, GINT_TO_POINTER(1));
}
static void cb_func_build_run(void)
{
gint idx = document_get_cur_idx();
if (doc_list[idx].file_type->menu_items->can_exec && doc_list[idx].file_name != NULL)
on_build_execute_activate(NULL, GINT_TO_POINTER(0));
}
static void cb_func_build_run2(void)
{
gint idx = document_get_cur_idx();
if (doc_list[idx].file_type->menu_items->can_exec && doc_list[idx].file_name != NULL)
on_build_execute_activate(NULL, GINT_TO_POINTER(1));
}
static void cb_func_build_options(void)
{
gint idx = document_get_cur_idx();
if ((doc_list[idx].file_type->menu_items->can_compile ||
doc_list[idx].file_type->menu_items->can_link ||
doc_list[idx].file_type->menu_items->can_exec) &&
doc_list[idx].file_name != NULL)
on_build_arguments_activate(NULL, NULL);
}
static void cb_func_reloadtaglist(void)
{
gint idx = document_get_cur_idx();
document_update_tag_list(idx, TRUE);
}
static void cb_func_switch_editor(void)
{
gint idx = document_get_cur_idx();
gtk_widget_grab_focus(GTK_WIDGET(doc_list[idx].sci));
}
static void cb_func_switch_scribble(void)
{
gtk_notebook_set_current_page(GTK_NOTEBOOK(msgwindow.notebook), MSG_SCRATCH);
gtk_widget_grab_focus(lookup_widget(app->window, "textview_scribble"));
}
static void cb_func_switch_vte(void)
{
#ifdef HAVE_VTE
gtk_notebook_set_current_page(GTK_NOTEBOOK(msgwindow.notebook), MSG_VTE);
gtk_widget_grab_focus(vc->vte);
#endif
}
static void cb_func_switch_tableft(void)
{
utils_switch_document(LEFT);
}
static void cb_func_switch_tabright(void)
{
utils_switch_document(RIGHT);
}
static void cb_func_edit_duplicateline(void)
{
gint idx = document_get_cur_idx();
sci_line_duplicate(doc_list[idx].sci);
}
static void cb_func_edit_commentline(void)
{
gint idx = document_get_cur_idx();
sci_cb_do_comment(idx);
}
static void cb_func_edit_autocomplete(void)
{
gint idx = document_get_cur_idx();
sci_cb_start_auto_complete(doc_list[idx].sci, sci_get_current_position(doc_list[idx].sci));
}
static void cb_func_edit_calltip(void)
{
gint idx = document_get_cur_idx();
sci_cb_show_calltip(doc_list[idx].sci, -1);
}
static void cb_func_edit_macrolist(void)
{
gint idx = document_get_cur_idx();
sci_cb_show_macro_list(doc_list[idx].sci);
}
static void cb_func_edit_suppresscompletion(void)
{
gint idx = document_get_cur_idx();
sci_add_text(doc_list[idx].sci, " ");
}

95
src/keybindings.h Normal file
View File

@ -0,0 +1,95 @@
/*
* keybindings.h - this file is part of Geany, a fast and lightweight IDE
*
* Copyright 2006 Enrico Troeger <enrico.troeger@uvena.de>
*
* 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 2 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* $Id$
*/
#ifndef GEANY_KEYBINDINGS_H
#define GEANY_KEYBINDINGS_H 1
// holds all user-definable key bindings
typedef struct binding
{
guint key;
GdkModifierType mods;
const gchar *name;
// function pointer to a callback function, just to keep the code in keypress event
// callback function clear
void (*cb_func) (void);
} binding;
enum
{
GEANY_KEYS_MENU_NEW = 0,
GEANY_KEYS_MENU_OPEN,
GEANY_KEYS_MENU_SAVE,
GEANY_KEYS_MENU_SAVEALL,
GEANY_KEYS_MENU_CLOSEALL,
GEANY_KEYS_MENU_RELOADFILE,
GEANY_KEYS_MENU_UNDO,
GEANY_KEYS_MENU_REDO,
GEANY_KEYS_MENU_FIND_NEXT,
GEANY_KEYS_MENU_REPLACE,
GEANY_KEYS_MENU_PREFERENCES,
GEANY_KEYS_MENU_OPENCOLORCHOOSER,
GEANY_KEYS_MENU_FULLSCREEN,
GEANY_KEYS_MENU_ZOOMIN,
GEANY_KEYS_MENU_ZOOMOUT,
GEANY_KEYS_MENU_FOLDALL,
GEANY_KEYS_MENU_UNFOLDALL,
GEANY_KEYS_BUILD_COMPILE,
GEANY_KEYS_BUILD_LINK,
GEANY_KEYS_BUILD_MAKE,
GEANY_KEYS_BUILD_MAKEOWNTARGET,
GEANY_KEYS_BUILD_RUN,
GEANY_KEYS_BUILD_RUN2,
GEANY_KEYS_BUILD_OPTIONS,
GEANY_KEYS_RELOADTAGLIST,
GEANY_KEYS_SWITCH_EDITOR,
GEANY_KEYS_SWITCH_SCRIBBLE,
GEANY_KEYS_SWITCH_VTE,
GEANY_KEYS_SWITCH_TABLEFT,
GEANY_KEYS_SWITCH_TABRIGHT,
GEANY_KEYS_EDIT_DUPLICATELINE,
GEANY_KEYS_EDIT_COMMENTLINE,
GEANY_KEYS_EDIT_AUTOCOMPLETE,
GEANY_KEYS_EDIT_CALLTIP,
GEANY_KEYS_EDIT_MACROLIST,
GEANY_KEYS_EDIT_SUPPRESSCOMPLETION,
GEANY_MAX_KEYS
};
binding *keys[GEANY_MAX_KEYS];
void keybindings_init(void);
void keybindings_free(void);
/* just write the content of the keys array to the config file */
void keybindings_write_to_file(void);
/* central keypress event handler, almost all keypress events go to this function */
gboolean keybindings_got_event(GtkWidget *widget, GdkEventKey *event, gpointer user_data);
#endif

View File

@ -470,6 +470,7 @@ gint main(gint argc, gchar **argv)
gtk_widget_set_size_request(app->window, GEANY_WINDOW_MINIMAL_WIDTH, GEANY_WINDOW_MINIMAL_HEIGHT);
gtk_window_set_default_size(GTK_WINDOW(app->window), GEANY_WINDOW_DEFAULT_WIDTH, GEANY_WINDOW_DEFAULT_HEIGHT);
configuration_load();
keybindings_init();
templates_init();
encodings_init();
document_init_doclist();
@ -500,7 +501,7 @@ gint main(gint argc, gchar **argv)
dialogs_create_recent_menu();
utils_create_insert_menu_items();
msgwin_status_add(_("This is %s %s by Enrico Troeger."), PACKAGE, VERSION);
msgwin_status_add(_("This is Geany %s."), VERSION);
if (mkdir_result != 0)
msgwin_status_add(_("Configuration directory could not be created (%s)."), g_strerror(mkdir_result));

View File

@ -38,12 +38,26 @@
gint old_tab_width;
gint old_long_line_column;
gchar *old_long_line_color;
gchar *dialog_key_name;
static GtkListStore *store = NULL;
static GtkTreeView *tree = NULL;
GtkWidget *dialog_label;
static gboolean edited = FALSE;
static gboolean on_prefs_tree_view_button_press_event(
GtkWidget *widget, GdkEventButton *event, gpointer user_data);
static void on_cell_edited(GtkCellRendererText *cellrenderertext, gchar *path, gchar *new_text, gpointer user_data);
static gboolean on_keytype_dialog_response(GtkWidget *dialog, GdkEventKey *event, gpointer user_data);
static void on_dialog_response(GtkWidget *dialog, gint response, gpointer user_data);
void prefs_init_dialog(void)
{
GtkWidget *widget;
GdkColor *color;
GtkTreeIter iter;
guint i;
gchar *key_string;
// General settings
widget = lookup_widget(app->prefs_dialog, "spin_mru");
@ -134,21 +148,6 @@ void prefs_init_dialog(void)
g_free(color);
// Tools Settings
/* if (app->build_c_cmd)
gtk_entry_set_text(GTK_ENTRY(lookup_widget(app->prefs_dialog, "entry_com_c")), app->build_c_cmd);
if (app->build_cpp_cmd)
gtk_entry_set_text(GTK_ENTRY(lookup_widget(app->prefs_dialog, "entry_com_cpp")), app->build_cpp_cmd);
if (app->build_java_cmd)
gtk_entry_set_text(GTK_ENTRY(lookup_widget(app->prefs_dialog, "entry_com_java")), app->build_java_cmd);
if (app->build_javac_cmd)
gtk_entry_set_text(GTK_ENTRY(lookup_widget(app->prefs_dialog, "entry_com_javac")), app->build_javac_cmd);
if (app->build_fpc_cmd)
gtk_entry_set_text(GTK_ENTRY(lookup_widget(app->prefs_dialog, "entry_com_pascal")), app->build_fpc_cmd);
*/
if (app->build_make_cmd)
gtk_entry_set_text(GTK_ENTRY(lookup_widget(app->prefs_dialog, "entry_com_make")), app->build_make_cmd);
@ -176,6 +175,43 @@ void prefs_init_dialog(void)
gtk_entry_set_text(GTK_ENTRY(widget), app->pref_template_version);
// Keybindings
if (store == NULL)
{
GtkCellRenderer *renderer;
GtkTreeViewColumn *column;
tree = GTK_TREE_VIEW(lookup_widget(app->prefs_dialog, "treeview7"));
//g_object_set(tree, "vertical-separator", 6, NULL);
store = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_STRING);
gtk_tree_view_set_model(GTK_TREE_VIEW(tree), GTK_TREE_MODEL(store));
renderer = gtk_cell_renderer_text_new();
column = gtk_tree_view_column_new_with_attributes(_("Action"), renderer, "text", 0, NULL);
gtk_tree_view_append_column(GTK_TREE_VIEW(tree), column);
renderer = gtk_cell_renderer_text_new();
g_object_set(renderer, "editable", TRUE, NULL);
column = gtk_tree_view_column_new_with_attributes(_("Shortcut"), renderer, "text", 1, NULL);
gtk_tree_view_append_column(GTK_TREE_VIEW(tree), column);
g_signal_connect(G_OBJECT(renderer), "edited", G_CALLBACK(on_cell_edited), NULL);
g_signal_connect(G_OBJECT(tree), "button-press-event",
G_CALLBACK(on_prefs_tree_view_button_press_event), NULL);
g_signal_connect(G_OBJECT(lookup_widget(app->prefs_dialog, "button2")), "button-press-event",
G_CALLBACK(on_prefs_tree_view_button_press_event), NULL);
}
for (i = 0; i < GEANY_MAX_KEYS; i++)
{
key_string = gtk_accelerator_name(keys[i]->key, keys[i]->mods);
gtk_list_store_append(store, &iter);
gtk_list_store_set(store, &iter, 0, keys[i]->name, 1, key_string, -1);
g_free(key_string);
}
#ifdef HAVE_VTE
// VTE settings
if (app->have_vte)
@ -293,26 +329,6 @@ void on_prefs_button_clicked(GtkDialog *dialog, gint response, gpointer user_dat
// Tools Settings
/* widget = lookup_widget(app->prefs_dialog, "entry_com_c");
g_free(app->build_c_cmd);
app->build_c_cmd = g_strdup(gtk_entry_get_text(GTK_ENTRY(widget)));
widget = lookup_widget(app->prefs_dialog, "entry_com_cpp");
g_free(app->build_cpp_cmd);
app->build_cpp_cmd = g_strdup(gtk_entry_get_text(GTK_ENTRY(widget)));
widget = lookup_widget(app->prefs_dialog, "entry_com_java");
g_free(app->build_java_cmd);
app->build_java_cmd = g_strdup(gtk_entry_get_text(GTK_ENTRY(widget)));
widget = lookup_widget(app->prefs_dialog, "entry_com_javac");
g_free(app->build_javac_cmd);
app->build_javac_cmd = g_strdup(gtk_entry_get_text(GTK_ENTRY(widget)));
widget = lookup_widget(app->prefs_dialog, "entry_com_pascal");
g_free(app->build_fpc_cmd);
app->build_fpc_cmd = g_strdup(gtk_entry_get_text(GTK_ENTRY(widget)));
*/
widget = lookup_widget(app->prefs_dialog, "entry_com_make");
g_free(app->build_make_cmd);
app->build_make_cmd = g_strdup(gtk_entry_get_text(GTK_ENTRY(widget)));
@ -347,6 +363,9 @@ void on_prefs_button_clicked(GtkDialog *dialog, gint response, gpointer user_dat
app->pref_template_version = g_strdup(gtk_entry_get_text(GTK_ENTRY(widget)));
// Keybindings
if (edited) keybindings_write_to_file();
#ifdef HAVE_VTE
// VTE settings
if (app->have_vte)
@ -430,6 +449,7 @@ void on_prefs_button_clicked(GtkDialog *dialog, gint response, gpointer user_dat
// store all settings
configuration_save();
}
gtk_list_store_clear(store);
gtk_widget_hide(GTK_WIDGET(dialog));
}
@ -508,3 +528,119 @@ void on_prefs_font_choosed(GtkFontButton *widget, gpointer user_data)
}
}
static gboolean on_prefs_tree_view_button_press_event(
GtkWidget *widget, GdkEventButton *event, gpointer user_data)
{
GtkTreeIter iter;
GtkTreeModel *model;
GtkTreeSelection *selection;
gchar *name;
// discard click events in the tree unless it is a double click
if (widget == (GtkWidget*)tree && event->type != GDK_2BUTTON_PRESS) return FALSE;
selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree));
if (gtk_tree_selection_get_selected(selection, &model, &iter))
{
gtk_tree_model_get(model, &iter, 0, &name, -1);
if (name != NULL)
{
GtkWidget *dialog;
GtkWidget *label;
gchar *str;
dialog = gtk_dialog_new_with_buttons(_("Grab key"), GTK_WINDOW(app->prefs_dialog),
GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_NO_SEPARATOR,
GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL);
str = g_strdup_printf(_("Type the combination of the keys you want to use for \"%s\""), name);
label = gtk_label_new(str);
gtk_misc_set_padding(GTK_MISC(label), 5, 10);
gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), label);
dialog_label = gtk_label_new("");
gtk_misc_set_padding(GTK_MISC(dialog_label), 5, 10);
gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), dialog_label);
g_signal_connect(G_OBJECT(dialog), "key-press-event", G_CALLBACK(on_keytype_dialog_response), NULL);
g_signal_connect(G_OBJECT(dialog), "response", G_CALLBACK(on_dialog_response), NULL);
g_signal_connect(G_OBJECT(dialog), "close", G_CALLBACK(gtk_widget_destroy), NULL);
// copy name to global variable to hold it, will be freed in on_dialog_response()
dialog_key_name = g_strdup(name);
gtk_widget_show_all(dialog);
g_free(str);
g_free(name);
}
}
return TRUE;
}
static void on_cell_edited(GtkCellRendererText *cellrenderertext, gchar *path, gchar *new_text, gpointer user_data)
{
if (path != NULL && new_text != NULL)
{
guint idx;
gchar *test;
GtkTreeIter iter;
// get the index of the shortcut
idx = strtol(path, &test, 10);
if (test == path) return;
gtk_accelerator_parse(new_text, &(keys[idx]->key), &(keys[idx]->mods));
gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(store), &iter, path);
gtk_list_store_set(store, &iter, 1, new_text, -1);
edited = TRUE;
}
}
static gboolean on_keytype_dialog_response(GtkWidget *dialog, GdkEventKey *event, gpointer user_data)
{
gchar *str;
// ignore numlock key, not necessary but nice
if (event->state & GDK_MOD2_MASK) event->state -= GDK_MOD2_MASK;
str = gtk_accelerator_name(event->keyval, event->state);
gtk_label_set_text(GTK_LABEL(dialog_label), str);
g_free(str);
return TRUE;
}
static void on_dialog_response(GtkWidget *dialog, gint response, gpointer user_data)
{
if (response == GTK_RESPONSE_ACCEPT)
{
GtkTreeIter iter;
guint idx;
gchar path[3];
for (idx = 0; idx < GEANY_MAX_KEYS; idx++)
{
if (utils_strcmp(dialog_key_name, keys[idx]->name)) break;
}
gtk_accelerator_parse(gtk_label_get_text(GTK_LABEL(dialog_label)), &(keys[idx]->key), &(keys[idx]->mods));
// generate the path, it is exactly the index
g_snprintf(path, 3, "%d", idx);
gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(store), &iter, path);
gtk_list_store_set(store, &iter, 1, gtk_label_get_text(GTK_LABEL(dialog_label)), -1);
g_free(dialog_key_name);
edited = TRUE;
}
gtk_widget_destroy(dialog);
}