diff --git a/moo.kdevelop b/moo.kdevelop index b7ee433e..88626da0 100644 --- a/moo.kdevelop +++ b/moo.kdevelop @@ -291,16 +291,16 @@ - + A new empty GAP source file - + A new empty C++ file. - + A new empty header file for C/C++. - + A new empty C file. diff --git a/moo/mooedit/glade/mooeditprefs.glade b/moo/mooedit/glade/mooeditprefs.glade index 123d6ae3..7f1ce51c 100644 --- a/moo/mooedit/glade/mooeditprefs.glade +++ b/moo/mooedit/glade/mooeditprefs.glade @@ -5,7 +5,7 @@ True - window1 + window1 GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False @@ -70,14 +70,14 @@ True True - Smart Home and End + Smart Home and End True GTK_RELIEF_NORMAL False False False True - + 0 @@ -87,17 +87,22 @@ - + True - True - Use spaces to indent - True - GTK_RELIEF_NORMAL - False - False - False - True - + Tab key: + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 0 @@ -107,81 +112,139 @@ - + True - False - 3 - + 0.5 + 0.5 + 1 + 1 + 0 + 0 + 6 + 0 - + True - Tab key inserts - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - tabswidth_spin - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - - + False + 0 - - - True - True - 1 - 0 - True - GTK_UPDATE_ALWAYS - False - False - 4 1 100 1 10 10 - - - - 0 - False - True - - + + + True + GTK_RELIEF_NORMAL + True + False + False + True + + - - - True - spaces - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 + + + True + Moves input focus + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + + + 0 + True + True + + + + + + True + GTK_RELIEF_NORMAL + True + False + False + True + tab_inserts_tab + + + + + + True + Indents text + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + + + 0 + True + True + + + + + + True + GTK_RELIEF_NORMAL + True + False + False + True + tab_inserts_tab + + + + + + True + Moves cursor to next placeholder + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + + + 0 + True + True + + - - 0 - False - False - @@ -198,7 +261,7 @@ True - Editing + Keyboard False False GTK_JUSTIFY_LEFT @@ -226,14 +289,14 @@ - + True 0 0.5 GTK_SHADOW_ETCHED_IN - + True 0.5 0.5 @@ -245,14 +308,267 @@ 3 - + True False 0 - + True + GTK_RELIEF_NORMAL + True + False + False + True + + + + + True + Enable auto indentation + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + + + 0 + False + False + + + + + + True + True + Use spaces to indent + True + GTK_RELIEF_NORMAL + False + False + False + True + + + + 0 + False + False + + + + + + True + 0.5 + 0.5 + 1 + 1 + 0 + 0 + 6 + 0 + + + + True + False + 3 + + + + + True + Indent width: + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + tabswidth_spin + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + True + True + 1 + 0 + True + GTK_UPDATE_ALWAYS + False + False + 4 1 100 1 10 10 + + + + 0 + False + True + + + + + + True + spaces + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + + 0 + True + True + + + + + + True + GTK_RELIEF_NORMAL + True + False + False + True + + + + + True + Backspace key indents + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + + + 0 + True + True + + + + + + + + + + True + Indentation + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + label_item + + + + + 0 + False + False + + + + + + True + 0 + 0.5 + GTK_SHADOW_ETCHED_IN + + + + True + 0.5 + 0.5 + 1 + 1 + 0 + 3 + 3 + 3 + + + + True + False + 0 + + + + True + False False 0 @@ -260,14 +576,14 @@ True True - Auto save every + Auto save every True GTK_RELIEF_NORMAL False False False True - + 0 @@ -287,8 +603,8 @@ False False 1 1 100 1 10 10 - - + + 0 @@ -300,7 +616,7 @@ True - minutes + minutes False False GTK_JUSTIFY_LEFT @@ -314,7 +630,7 @@ -1 False 0 - + 0 @@ -331,17 +647,17 @@ - + True True - Make backups + Make backups True GTK_RELIEF_NORMAL True False False True - + 0 @@ -351,17 +667,17 @@ - + True True - Remove trailing spaces + Remove trailing spaces True GTK_RELIEF_NORMAL True False False True - + 0 @@ -375,9 +691,9 @@ - + True - Saving + Saving False False GTK_JUSTIFY_LEFT @@ -405,14 +721,14 @@ - + True 0 0.5 GTK_SHADOW_ETCHED_IN - + True 0.5 0.5 @@ -424,21 +740,21 @@ 3 - + True False 0 - + True False 0 - + True - Default language: + Default language: False False GTK_JUSTIFY_LEFT @@ -493,9 +809,9 @@ - + True - Misc + Misc False True GTK_JUSTIFY_LEFT @@ -529,9 +845,9 @@ - + True - General + General False False GTK_JUSTIFY_LEFT @@ -552,13 +868,13 @@ - + True False 0 - + 3 True 0 @@ -566,7 +882,7 @@ GTK_SHADOW_ETCHED_IN - + True 0.5 0.5 @@ -578,7 +894,7 @@ 3 - + True False 0 @@ -587,14 +903,14 @@ True True - Enable text wrapping + Enable text wrapping True GTK_RELIEF_NORMAL True False False True - + 0 @@ -607,15 +923,15 @@ True True - Do not split words + Do not split words True GTK_RELIEF_NORMAL True False False True - - + + 0 @@ -629,9 +945,9 @@ - + True - Text wrapping + Text wrapping False False GTK_JUSTIFY_LEFT @@ -688,14 +1004,14 @@ True True - Enable syntax highlighting + Enable syntax highlighting True GTK_RELIEF_NORMAL True False False True - + 0 @@ -708,14 +1024,14 @@ True True - Highlight matching brackets + Highlight matching brackets True GTK_RELIEF_NORMAL True False False True - + 0 @@ -728,14 +1044,14 @@ True True - Highlight mismatching brackets + Highlight mismatching brackets True GTK_RELIEF_NORMAL True False False True - + 0 @@ -748,14 +1064,14 @@ True True - Highlight current line + Highlight current line True GTK_RELIEF_NORMAL True False False True - + 0 @@ -771,7 +1087,7 @@ True - Highlighting + Highlighting False False GTK_JUSTIFY_LEFT @@ -828,14 +1144,14 @@ True True - Show line numbers + Show line numbers True GTK_RELIEF_NORMAL True False False True - + 0 @@ -848,14 +1164,14 @@ True True - Show tabs + Show tabs True GTK_RELIEF_NORMAL True False False True - + 0 @@ -868,14 +1184,14 @@ True True - Show trailing spaces + Show trailing spaces True GTK_RELIEF_NORMAL True False False True - + 0 @@ -891,7 +1207,7 @@ True - Misc + Misc False False GTK_JUSTIFY_LEFT @@ -927,7 +1243,7 @@ True - View + View False False GTK_JUSTIFY_LEFT @@ -957,14 +1273,14 @@ True True - Use default theme font + Use default theme font True GTK_RELIEF_NORMAL True False False True - + 0 @@ -985,7 +1301,7 @@ True - Font: + Font: False False GTK_JUSTIFY_LEFT @@ -999,14 +1315,14 @@ -1 False 0 - + 0 1 0 1 - fill + @@ -1020,8 +1336,8 @@ True True True - - + + 1 @@ -1035,7 +1351,7 @@ True - Color scheme: + Color scheme: False False GTK_JUSTIFY_LEFT @@ -1055,7 +1371,7 @@ 1 1 2 - fill + @@ -1075,7 +1391,7 @@ gvim 1 2 fill - fill + @@ -1095,7 +1411,7 @@ gvim True - Font and colors + Font and colors False False GTK_JUSTIFY_LEFT diff --git a/moo/mooedit/mooeditinput.c b/moo/mooedit/mooeditinput.c index 66bb7a5b..4a428843 100644 --- a/moo/mooedit/mooeditinput.c +++ b/moo/mooedit/mooeditinput.c @@ -929,8 +929,6 @@ static gboolean handle_backspace (MooTextView *view, GdkEventKey *event); static gboolean handle_enter (MooTextView *view, GdkEventKey *event); -static gboolean handle_shift_tab (MooTextView *view, - GdkEventKey *event); static gboolean handle_ctrl_up (MooTextView *view, GdkEventKey *event, gboolean up); @@ -988,7 +986,7 @@ _moo_text_view_key_press_event (GtkWidget *widget, /* TODO TODO stupid X and gtk !!! */ case GDK_ISO_Left_Tab: case GDK_KP_Tab: - handled = handle_shift_tab (view, event); + handled = handle_tab (view, event); break; } } @@ -1085,42 +1083,42 @@ set_invisible_cursor (GdkWindow *window) } -static void -move_focus (GtkWidget *widget, - GtkDirectionType direction) +static gboolean +tab_unindent (MooTextView *view) { - GtkWidget *toplevel = gtk_widget_get_toplevel (widget); - g_signal_emit_by_name (toplevel, "move-focus", direction); + GtkTextBuffer *buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view)); + GtkTextIter start, end; + int first_line, last_line; + + if (!view->priv->indenter) + return FALSE; + + gtk_text_buffer_get_selection_bounds (buffer, &start, &end); + + first_line = gtk_text_iter_get_line (&start); + last_line = gtk_text_iter_get_line (&end); + + if (gtk_text_iter_starts_line (&end) && first_line != last_line) + last_line -= 1; + + gtk_text_buffer_begin_user_action (buffer); + moo_indenter_shift_lines (view->priv->indenter, buffer, first_line, last_line, -1); + gtk_text_buffer_end_user_action (buffer); + + gtk_text_view_scroll_mark_onscreen (GTK_TEXT_VIEW (view), + gtk_text_buffer_get_insert (buffer)); + return TRUE; } + static gboolean -handle_tab (MooTextView *view, - GdkEventKey *event) +tab_indent (MooTextView *view) { GtkTextBuffer *buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view)); GtkTextIter insert, bound, start, end; gboolean starts_line, insert_last, has_selection; int first_line, last_line; - switch (view->priv->tab_key_action) - { - case MOO_TEXT_TAB_KEY_DO_NOTHING: - move_focus (GTK_WIDGET (view), - event->state & GDK_SHIFT_MASK ? - GTK_DIR_TAB_BACKWARD : GTK_DIR_TAB_FORWARD); - return TRUE; - - case MOO_TEXT_TAB_KEY_FIND_PLACEHOLDER: - if (event->state & GDK_SHIFT_MASK) - moo_text_view_prev_placeholder (view); - else - moo_text_view_next_placeholder (view); - return TRUE; - - case MOO_TEXT_TAB_KEY_INDENT: - break; - } - if (!view->priv->indenter) return FALSE; @@ -1174,32 +1172,41 @@ handle_tab (MooTextView *view, } -static gboolean -handle_shift_tab (MooTextView *view, - G_GNUC_UNUSED GdkEventKey *event) +static void +move_focus (GtkWidget *widget, + GtkDirectionType direction) { - GtkTextBuffer *buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view)); - GtkTextIter start, end; - int first_line, last_line; + GtkWidget *toplevel = gtk_widget_get_toplevel (widget); + g_signal_emit_by_name (toplevel, "move-focus", direction); +} - if (!view->priv->shift_tab_unindents || !view->priv->indenter) - return FALSE; +static gboolean +handle_tab (MooTextView *view, + GdkEventKey *event) +{ + switch (view->priv->tab_key_action) + { + case MOO_TEXT_TAB_KEY_DO_NOTHING: + move_focus (GTK_WIDGET (view), + event->state & GDK_SHIFT_MASK ? + GTK_DIR_TAB_BACKWARD : GTK_DIR_TAB_FORWARD); + return TRUE; - gtk_text_buffer_get_selection_bounds (buffer, &start, &end); + case MOO_TEXT_TAB_KEY_FIND_PLACEHOLDER: + if (event->state & GDK_SHIFT_MASK) + moo_text_view_prev_placeholder (view); + else + moo_text_view_next_placeholder (view); + return TRUE; - first_line = gtk_text_iter_get_line (&start); - last_line = gtk_text_iter_get_line (&end); + case MOO_TEXT_TAB_KEY_INDENT: + if (event->state & GDK_SHIFT_MASK) + return tab_unindent (view); + else + return tab_indent (view); + } - if (gtk_text_iter_starts_line (&end) && first_line != last_line) - last_line -= 1; - - gtk_text_buffer_begin_user_action (buffer); - moo_indenter_shift_lines (view->priv->indenter, buffer, first_line, last_line, -1); - gtk_text_buffer_end_user_action (buffer); - - gtk_text_view_scroll_mark_onscreen (GTK_TEXT_VIEW (view), - gtk_text_buffer_get_insert (buffer)); - return TRUE; + g_return_val_if_reached (FALSE); } @@ -1268,7 +1275,7 @@ handle_enter (MooTextView *view, GtkTextIter start, end; gboolean has_selection; - if (!view->priv->indenter) + if (!view->priv->indenter || !view->priv->enter_indents) return FALSE; buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view)); diff --git a/moo/mooedit/mooeditprefs.c b/moo/mooedit/mooeditprefs.c index 07f7833d..a6458c0c 100644 --- a/moo/mooedit/mooeditprefs.c +++ b/moo/mooedit/mooeditprefs.c @@ -62,6 +62,10 @@ _moo_edit_init_settings (void) NEW_KEY_BOOL (MOO_EDIT_PREFS_SPACES_NO_TABS, FALSE); NEW_KEY_INT (MOO_EDIT_PREFS_INDENT_WIDTH, 8); + NEW_KEY_ENUM (MOO_EDIT_PREFS_TAB_KEY_ACTION, + MOO_TYPE_TEXT_TAB_KEY_ACTION, MOO_TEXT_TAB_KEY_INDENT); + NEW_KEY_BOOL (MOO_EDIT_PREFS_AUTO_INDENT, TRUE); + NEW_KEY_BOOL (MOO_EDIT_PREFS_BACKSPACE_INDENTS, FALSE); NEW_KEY_BOOL (MOO_EDIT_PREFS_AUTO_SAVE, FALSE); NEW_KEY_INT (MOO_EDIT_PREFS_AUTO_SAVE_INTERVAL, 5); @@ -124,8 +128,18 @@ _moo_edit_apply_settings (MooEdit *edit) "draw-tabs", get_bool (MOO_EDIT_PREFS_SHOW_TABS), "draw-trailing-spaces", get_bool (MOO_EDIT_PREFS_SHOW_TRAILING_SPACES), "quick-search-flags", get_flags (MOO_EDIT_PREFS_QUICK_SEARCH_FLAGS), + "tab-key-action", get_enum (MOO_EDIT_PREFS_TAB_KEY_ACTION), + "auto-indent", get_bool (MOO_EDIT_PREFS_AUTO_INDENT), + "backspace-indents", get_bool (MOO_EDIT_PREFS_BACKSPACE_INDENTS), NULL); + moo_edit_config_set (edit->config, + "indent-use-tabs", MOO_EDIT_CONFIG_SOURCE_PREFS, + !get_bool (MOO_EDIT_PREFS_SPACES_NO_TABS), + "indent-width", MOO_EDIT_CONFIG_SOURCE_PREFS, + get_int (MOO_EDIT_PREFS_INDENT_WIDTH), + NULL); + if (get_bool (MOO_EDIT_PREFS_WRAP_ENABLE)) { if (get_bool (MOO_EDIT_PREFS_WRAP_WORDS)) diff --git a/moo/mooedit/mooeditprefs.h b/moo/mooedit/mooeditprefs.h index fb19113b..e5078d12 100644 --- a/moo/mooedit/mooeditprefs.h +++ b/moo/mooedit/mooeditprefs.h @@ -30,8 +30,11 @@ const char *moo_edit_setting (const char *setting_name); #define MOO_EDIT_PREFS_DEFAULT_LANG "default_lang" +#define MOO_EDIT_PREFS_TAB_KEY_ACTION "tab_key_action" #define MOO_EDIT_PREFS_SPACES_NO_TABS "spaces_instead_of_tabs" #define MOO_EDIT_PREFS_INDENT_WIDTH "indent_width" +#define MOO_EDIT_PREFS_AUTO_INDENT "auto_indent" +#define MOO_EDIT_PREFS_BACKSPACE_INDENTS "backspace_indents" #define MOO_EDIT_PREFS_AUTO_SAVE "auto_save" #define MOO_EDIT_PREFS_AUTO_SAVE_INTERVAL "auto_save_interval" diff --git a/moo/mooedit/mootextview-private.h b/moo/mooedit/mootextview-private.h index 7ddd8016..d96bd39c 100644 --- a/moo/mooedit/mootextview-private.h +++ b/moo/mooedit/mootextview-private.h @@ -125,9 +125,6 @@ struct _MooTextViewPrivate { /* Indentation /*/ MooIndenter *indenter; - gboolean tab_indents; - gboolean tab_inserts_indent_chars; - gboolean shift_tab_unindents; gboolean backspace_indents; gboolean enter_indents; MooTextTabKeyAction tab_key_action; diff --git a/moo/mooedit/mootextview.c b/moo/mooedit/mootextview.c index a772ed93..1b38412f 100644 --- a/moo/mooedit/mootextview.c +++ b/moo/mooedit/mootextview.c @@ -183,7 +183,11 @@ static guint signals[LAST_SIGNAL]; enum { PROP_0, PROP_BUFFER, + PROP_INDENTER, + PROP_AUTO_INDENT, + PROP_BACKSPACE_INDENTS, + PROP_HIGHLIGHT_CURRENT_LINE, PROP_HIGHLIGHT_MATCHING_BRACKETS, PROP_HIGHLIGHT_MISMATCHING_BRACKETS, @@ -450,6 +454,18 @@ static void moo_text_view_class_init (MooTextViewClass *klass) MOO_TEXT_TAB_KEY_INDENT, G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); + g_object_class_install_property (gobject_class, + PROP_AUTO_INDENT, + g_param_spec_boolean ("auto-indent", + "auto-indent", "auto-indent", + TRUE, G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); + + g_object_class_install_property (gobject_class, + PROP_BACKSPACE_INDENTS, + g_param_spec_boolean ("backspace-indents", + "backspace-indents", "backspace-indents", + FALSE, G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); + gtk_widget_class_install_style_property (widget_class, g_param_spec_int ("expander-size", "Expander Size", @@ -606,9 +622,8 @@ static void moo_text_view_init (MooTextView *view) view->priv->last_search_stamp = -1; view->priv->saved_cursor_visible = TRUE; - view->priv->tab_indents = TRUE; - view->priv->shift_tab_unindents = TRUE; - view->priv->backspace_indents = TRUE; + view->priv->tab_key_action = MOO_TEXT_TAB_KEY_INDENT; + view->priv->backspace_indents = FALSE; view->priv->enter_indents = TRUE; view->priv->ctrl_up_down_scrolls = TRUE; view->priv->ctrl_page_up_down_scrolls = TRUE; @@ -621,13 +636,6 @@ static void moo_text_view_init (MooTextView *view) view->priv->qs.flags = MOO_TEXT_SEARCH_CASELESS; -#if 0 - gtk_drag_dest_unset (GTK_WIDGET (view)); - gtk_drag_dest_set (GTK_WIDGET (view), 0, NULL, 0, GDK_ACTION_DEFAULT); - view->priv->targets = gtk_target_list_new (NULL, 0); - gtk_target_list_add_text_targets (view->priv->targets, DND_TARGET_TEXT); -#endif - name = g_strdup_printf ("moo-text-view-%p", view); gtk_widget_set_name (GTK_WIDGET (view), name); g_free (name); @@ -1051,6 +1059,16 @@ moo_text_view_set_property (GObject *object, moo_text_view_set_tab_key_action (view, g_value_get_enum (value)); break; + case PROP_AUTO_INDENT: + view->priv->enter_indents = g_value_get_boolean (value); + g_object_notify (object, "auto-indent"); + break; + + case PROP_BACKSPACE_INDENTS: + view->priv->backspace_indents = g_value_get_boolean (value); + g_object_notify (object, "backspace-indents"); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -1071,92 +1089,77 @@ moo_text_view_get_property (GObject *object, case PROP_BUFFER: g_value_set_object (value, get_buffer (view)); break; - case PROP_INDENTER: g_value_set_object (value, view->priv->indenter); break; - case PROP_HIGHLIGHT_CURRENT_LINE: g_value_set_boolean (value, view->priv->highlight_current_line); break; - case PROP_HIGHLIGHT_MATCHING_BRACKETS: g_object_get (get_buffer (view), "highlight-matching-brackets", &val, NULL); g_value_set_boolean (value, val); break; - case PROP_HIGHLIGHT_MISMATCHING_BRACKETS: g_object_get (get_buffer (view), "highlight-mismatching-brackets", &val, NULL); g_value_set_boolean (value, val); break; - case PROP_CURRENT_LINE_COLOR_GDK: g_value_set_boxed (value, &view->priv->current_line_color); break; - case PROP_DRAW_TABS: g_value_set_boolean (value, view->priv->draw_tabs != 0); break; case PROP_DRAW_TRAILING_SPACES: g_value_set_boolean (value, view->priv->draw_trailing_spaces != 0); break; - case PROP_HAS_TEXT: g_value_set_boolean (value, moo_text_view_has_text (view)); break; - case PROP_HAS_SELECTION: g_value_set_boolean (value, moo_text_view_has_selection (view)); break; - case PROP_CAN_UNDO: g_value_set_boolean (value, moo_text_view_can_undo (view)); break; - case PROP_CAN_REDO: g_value_set_boolean (value, moo_text_view_can_redo (view)); break; - case PROP_MANAGE_CLIPBOARD: g_value_set_boolean (value, view->priv->manage_clipboard != 0); break; - case PROP_SMART_HOME_END: g_value_set_boolean (value, view->priv->smart_home_end != 0); break; - case PROP_ENABLE_HIGHLIGHT: g_value_set_boolean (value, moo_text_buffer_get_highlight (get_moo_buffer (view))); break; - case PROP_SHOW_LINE_NUMBERS: g_value_set_boolean (value, view->priv->show_line_numbers); break; - case PROP_SHOW_SCROLLBAR_MARKS: g_value_set_boolean (value, view->priv->show_scrollbar_marks); break; - case PROP_SHOW_LINE_MARKS: g_value_set_boolean (value, view->priv->show_line_marks); break; - case PROP_ENABLE_FOLDING: g_value_set_boolean (value, view->priv->enable_folding); break; - case PROP_ENABLE_QUICK_SEARCH: g_value_set_boolean (value, view->priv->qs.enable); break; - case PROP_QUICK_SEARCH_FLAGS: g_value_set_flags (value, view->priv->qs.flags); break; - case PROP_TAB_KEY_ACTION: g_value_set_enum (value, view->priv->tab_key_action); break; - + case PROP_AUTO_INDENT: + g_value_set_boolean (value, view->priv->enter_indents != 0); + break; + case PROP_BACKSPACE_INDENTS: + g_value_set_boolean (value, view->priv->backspace_indents != 0); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; diff --git a/moo/mooutils/mooprefsdialogpage.c b/moo/mooutils/mooprefsdialogpage.c index 03b77932..a9d9afaf 100644 --- a/moo/mooutils/mooprefsdialogpage.c +++ b/moo/mooutils/mooprefsdialogpage.c @@ -17,6 +17,7 @@ #include "mooutils/moocompat.h" #include "mooutils/mooprefs.h" #include "mooutils/mooprefsdialogpage.h" +#include "mooutils/mooutils-gobject.h" #include @@ -318,8 +319,16 @@ connect_signals (MooGladeXML *xml, { if (!strcmp (signal, "moo-prefs-key")) return connect_prefs_key (xml, widget, handler, object, user_data); - else - return FALSE; + + if (!strcmp (signal, "moo-prefs-value")) + { + g_return_val_if_fail (GTK_IS_RADIO_BUTTON (widget), FALSE); + g_object_set_data_full (G_OBJECT (widget), "moo-prefs-value", + g_strdup (handler), g_free); + return TRUE; + } + + return FALSE; } @@ -447,6 +456,26 @@ setting_apply (GtkWidget *widget) } +static int +radio_button_get_value (GtkWidget *button, + GType type) +{ + const char *string; + GValue val; + + string = g_object_get_data (G_OBJECT (button), "moo-prefs-value"); + g_return_val_if_fail (string != NULL, -1); + + val.g_type = 0; + g_value_init (&val, type); + + if (moo_value_convert_from_string (string, &val)) + return g_value_get_enum (&val); + + g_return_val_if_reached (-1); +} + + static gboolean setting_get_value (GtkWidget *widget, GValue *value) @@ -496,6 +525,22 @@ setting_get_value (GtkWidget *widget, return TRUE; } } + else if (GTK_IS_RADIO_BUTTON (widget)) + { + if (g_type_is_a (G_VALUE_TYPE (value), G_TYPE_ENUM)) + { + if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))) + { + int val = radio_button_get_value (widget, G_VALUE_TYPE (value)); + g_value_set_enum (value, val); + return TRUE; + } + else + { + return FALSE; + } + } + } else if (GTK_IS_TOGGLE_BUTTON (widget)) { if (value->g_type == G_TYPE_BOOLEAN) @@ -562,6 +607,19 @@ static void setting_set_value (GtkWidget *widget, return; } } + else if (GTK_IS_RADIO_BUTTON (widget)) + { + if (g_type_is_a (G_VALUE_TYPE (value), G_TYPE_ENUM)) + { + int val = g_value_get_enum (value); + int val_here = radio_button_get_value (widget, G_VALUE_TYPE (value)); + + if (val == val_here) + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), TRUE); + + return; + } + } else if (GTK_IS_TOGGLE_BUTTON (widget)) { if (value->g_type == G_TYPE_BOOLEAN) diff --git a/moo/mooutils/mooprefsdialogpage.h b/moo/mooutils/mooprefsdialogpage.h index a957ff54..2366e153 100644 --- a/moo/mooutils/mooprefsdialogpage.h +++ b/moo/mooutils/mooprefsdialogpage.h @@ -68,16 +68,6 @@ void moo_prefs_dialog_page_bind_setting (MooPrefsDialogPage *page, const char *setting, GtkToggleButton *set_or_not); -void moo_prefs_dialog_page_bind_radio_setting - (MooPrefsDialogPage *page, - const char *setting, - GtkToggleButton **btns, - const char **cvals); -void moo_prefs_dialog_page_bind_radio (MooPrefsDialogPage *page, - const char *setting, - GtkToggleButton *btn, - const char *cval); - G_END_DECLS