Encoding menu in the Document menu
parent
f6387fc5c3
commit
e004005558
2
moo.mprj
2
moo.mprj
|
@ -55,7 +55,7 @@
|
|||
<args>--app-name foobar</args>
|
||||
<exe>medit/medit</exe>
|
||||
<vars>
|
||||
<var name="LANGUAGE">ru</var>
|
||||
<var name="LANGUAGEE">ru</var>
|
||||
<var name="MOO_DEBUG">misc,input</var>
|
||||
</vars>
|
||||
</run>
|
||||
|
|
|
@ -85,7 +85,7 @@ void _moo_edit_set_filename (MooEdit *edit,
|
|||
const char *encoding);
|
||||
void _moo_edit_set_encoding (MooEdit *edit,
|
||||
const char *encoding);
|
||||
char *_moo_edit_get_default_encoding (void);
|
||||
const char *_moo_edit_get_default_encoding (void);
|
||||
|
||||
void _moo_edit_stop_file_watch (MooEdit *edit);
|
||||
|
||||
|
|
|
@ -102,7 +102,8 @@ enum {
|
|||
PROP_0,
|
||||
PROP_EDITOR,
|
||||
PROP_ENABLE_BOOKMARKS,
|
||||
PROP_HAS_COMMENTS
|
||||
PROP_HAS_COMMENTS,
|
||||
PROP_ENCODING
|
||||
};
|
||||
|
||||
/* MOO_TYPE_EDIT */
|
||||
|
@ -160,6 +161,14 @@ moo_edit_class_init (MooEditClass *klass)
|
|||
FALSE,
|
||||
G_PARAM_READABLE));
|
||||
|
||||
g_object_class_install_property (gobject_class,
|
||||
PROP_ENCODING,
|
||||
g_param_spec_string ("encoding",
|
||||
"encoding",
|
||||
"encoding",
|
||||
NULL,
|
||||
G_PARAM_READWRITE));
|
||||
|
||||
signals[CONFIG_NOTIFY] =
|
||||
g_signal_new ("config-notify",
|
||||
G_OBJECT_CLASS_TYPE (klass),
|
||||
|
@ -540,6 +549,10 @@ moo_edit_set_property (GObject *object,
|
|||
moo_edit_set_enable_bookmarks (edit, g_value_get_boolean (value));
|
||||
break;
|
||||
|
||||
case PROP_ENCODING:
|
||||
_moo_edit_set_encoding (edit, g_value_get_string (value));
|
||||
break;
|
||||
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
|
@ -569,6 +582,10 @@ moo_edit_get_property (GObject *object,
|
|||
g_value_set_boolean (value, _moo_edit_has_comments (edit, NULL, NULL));
|
||||
break;
|
||||
|
||||
case PROP_ENCODING:
|
||||
g_value_set_string (value, edit->priv->encoding);
|
||||
break;
|
||||
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
|
@ -674,8 +691,14 @@ _moo_edit_set_encoding (MooEdit *edit,
|
|||
{
|
||||
g_return_if_fail (MOO_IS_EDIT (edit));
|
||||
g_return_if_fail (encoding != NULL);
|
||||
g_free (edit->priv->encoding);
|
||||
edit->priv->encoding = g_strdup (encoding);
|
||||
|
||||
if (!_moo_str_equal (encoding, edit->priv->encoding))
|
||||
{
|
||||
char *tmp = edit->priv->encoding;
|
||||
edit->priv->encoding = g_strdup (encoding);
|
||||
g_free (tmp);
|
||||
g_object_notify (G_OBJECT (edit), "encoding");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -1192,10 +1192,10 @@ add_untitled (MooEdit *edit)
|
|||
}
|
||||
|
||||
|
||||
char *
|
||||
const char *
|
||||
_moo_edit_get_default_encoding (void)
|
||||
{
|
||||
return g_strdup (moo_prefs_get_string (moo_edit_setting (MOO_EDIT_PREFS_ENCODING_SAVE)));
|
||||
return moo_prefs_get_string (moo_edit_setting (MOO_EDIT_PREFS_ENCODING_SAVE));
|
||||
}
|
||||
|
||||
|
||||
|
@ -1204,12 +1204,11 @@ _moo_edit_set_filename (MooEdit *edit,
|
|||
const char *file,
|
||||
const char *encoding)
|
||||
{
|
||||
char *tmp1, *tmp3, *tmp4, *tmp5;
|
||||
char *tmp1, *tmp3, *tmp4;
|
||||
|
||||
tmp1 = edit->priv->filename;
|
||||
tmp3 = edit->priv->display_filename;
|
||||
tmp4 = edit->priv->display_basename;
|
||||
tmp5 = edit->priv->encoding;
|
||||
|
||||
if (!UNTITLED_NO)
|
||||
UNTITLED_NO = g_hash_table_new (g_direct_hash, g_direct_equal);
|
||||
|
@ -1243,9 +1242,9 @@ _moo_edit_set_filename (MooEdit *edit,
|
|||
}
|
||||
|
||||
if (!encoding)
|
||||
edit->priv->encoding = _moo_edit_get_default_encoding ();
|
||||
_moo_edit_set_encoding (edit, _moo_edit_get_default_encoding ());
|
||||
else
|
||||
edit->priv->encoding = g_strdup (encoding);
|
||||
_moo_edit_set_encoding (edit, encoding);
|
||||
|
||||
g_signal_emit_by_name (edit, "filename-changed", edit->priv->filename, NULL);
|
||||
moo_edit_status_changed (edit);
|
||||
|
@ -1253,7 +1252,6 @@ _moo_edit_set_filename (MooEdit *edit,
|
|||
g_free (tmp1);
|
||||
g_free (tmp3);
|
||||
g_free (tmp4);
|
||||
g_free (tmp5);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -49,7 +49,6 @@
|
|||
#define ENABLE_BOOKMARKS
|
||||
|
||||
#define ACTIVE_DOC moo_edit_window_get_active_doc
|
||||
#define ACTIVE_PAGE(window) (moo_notebook_get_current_page (window->priv->notebook))
|
||||
|
||||
#define LANG_ACTION_ID "LanguageMenu"
|
||||
#define STOP_ACTION_ID "StopJob"
|
||||
|
@ -153,6 +152,9 @@ static void edit_changed (MooEditWindow *window,
|
|||
static void edit_filename_changed (MooEditWindow *window,
|
||||
const char *filename,
|
||||
MooEdit *doc);
|
||||
static void edit_encoding_changed (MooEditWindow *window,
|
||||
GParamSpec *pspec,
|
||||
MooEdit *doc);
|
||||
static void edit_lang_changed (MooEditWindow *window,
|
||||
guint var_id,
|
||||
GParamSpec *pspec,
|
||||
|
@ -226,6 +228,7 @@ static void action_new_doc (MooEditWindow *window);
|
|||
static void action_open (MooEditWindow *window);
|
||||
static void action_reload (MooEditWindow *window);
|
||||
static GtkAction *create_reopen_with_encoding_action (MooEditWindow *window);
|
||||
static GtkAction *create_doc_encoding_action (MooEditWindow *window);
|
||||
static void action_save (MooEditWindow *window);
|
||||
static void action_save_as (MooEditWindow *window);
|
||||
static void action_close_tab (MooEditWindow *window);
|
||||
|
@ -411,6 +414,10 @@ moo_edit_window_class_init (MooEditWindowClass *klass)
|
|||
(MooWindowActionFunc) create_reopen_with_encoding_action,
|
||||
NULL, NULL);
|
||||
|
||||
moo_window_class_new_action_custom (window_class, "EncodingMenu", NULL,
|
||||
(MooWindowActionFunc) create_doc_encoding_action,
|
||||
NULL, NULL);
|
||||
|
||||
moo_window_class_new_action (window_class, "Save", NULL,
|
||||
"display-name", GTK_STOCK_SAVE,
|
||||
"label", GTK_STOCK_SAVE,
|
||||
|
@ -617,12 +624,6 @@ moo_edit_window_class_init (MooEditWindowClass *klass)
|
|||
"condition::sensitive", "has-open-document",
|
||||
NULL);
|
||||
|
||||
moo_window_class_new_action (window_class, "DocumentSubmenu", NULL,
|
||||
"label", _("_Document"),
|
||||
"no-accel", TRUE,
|
||||
"condition::sensitive", "has-open-document",
|
||||
NULL);
|
||||
|
||||
moo_window_class_new_action (window_class, "WrapText", NULL,
|
||||
"action-type::", MOO_TYPE_TOGGLE_ACTION,
|
||||
"display-name", _("Toggle Text Wrapping"),
|
||||
|
@ -973,7 +974,7 @@ static void moo_edit_window_get_property(GObject *object,
|
|||
break;
|
||||
|
||||
case PROP_ACTIVE_DOC:
|
||||
g_value_set_object (value, moo_edit_window_get_active_doc (window));
|
||||
g_value_set_object (value, ACTIVE_DOC (window));
|
||||
break;
|
||||
|
||||
case PROP_CAN_RELOAD:
|
||||
|
@ -1318,20 +1319,20 @@ action_open (MooEditWindow *window)
|
|||
static void
|
||||
action_reload (MooEditWindow *window)
|
||||
{
|
||||
MooEdit *edit = moo_edit_window_get_active_doc (window);
|
||||
MooEdit *edit = ACTIVE_DOC (window);
|
||||
g_return_if_fail (edit != NULL);
|
||||
_moo_editor_reload (window->priv->editor, edit, NULL, NULL);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
encoding_item_activated (const char *encoding,
|
||||
gpointer data)
|
||||
reopen_encoding_item_activated (const char *encoding,
|
||||
gpointer data)
|
||||
{
|
||||
MooEditWindow *window = data;
|
||||
MooEdit *doc;
|
||||
|
||||
doc = moo_edit_window_get_active_doc (window);
|
||||
doc = ACTIVE_DOC (window);
|
||||
g_return_if_fail (doc != NULL);
|
||||
|
||||
_moo_editor_reload (window->priv->editor, doc, encoding, NULL);
|
||||
|
@ -1344,7 +1345,7 @@ create_reopen_with_encoding_action (MooEditWindow *window)
|
|||
|
||||
action = _moo_encodings_menu_action_new ("ReopenWithEncoding",
|
||||
_("Reopen Using Encoding"),
|
||||
encoding_item_activated,
|
||||
reopen_encoding_item_activated,
|
||||
window);
|
||||
moo_bind_bool_property (action, "sensitive",
|
||||
window, "can-reload", FALSE);
|
||||
|
@ -1353,10 +1354,60 @@ create_reopen_with_encoding_action (MooEditWindow *window)
|
|||
}
|
||||
|
||||
|
||||
static void
|
||||
update_doc_encoding_item (MooEditWindow *window)
|
||||
{
|
||||
MooEdit *doc;
|
||||
GtkAction *action;
|
||||
const char *enc;
|
||||
|
||||
if (!(doc = ACTIVE_DOC (window)))
|
||||
return;
|
||||
|
||||
action = moo_window_get_action (MOO_WINDOW (window), "EncodingMenu");
|
||||
g_return_if_fail (action != NULL);
|
||||
|
||||
enc = moo_edit_get_encoding (doc);
|
||||
|
||||
if (!enc)
|
||||
enc = _moo_edit_get_default_encoding ();
|
||||
|
||||
_moo_encodings_menu_action_set_current (action, enc);
|
||||
}
|
||||
|
||||
static void
|
||||
doc_encoding_item_activated (const char *encoding,
|
||||
gpointer data)
|
||||
{
|
||||
MooEditWindow *window = data;
|
||||
MooEdit *doc;
|
||||
|
||||
doc = ACTIVE_DOC (window);
|
||||
g_return_if_fail (doc != NULL);
|
||||
|
||||
_moo_edit_set_encoding (doc, encoding);
|
||||
}
|
||||
|
||||
static GtkAction *
|
||||
create_doc_encoding_action (MooEditWindow *window)
|
||||
{
|
||||
GtkAction *action;
|
||||
|
||||
action = _moo_encodings_menu_action_new ("EncodingMenu",
|
||||
_("_Encoding"),
|
||||
doc_encoding_item_activated,
|
||||
window);
|
||||
moo_bind_bool_property (action, "sensitive",
|
||||
window, "has-open-document", FALSE);
|
||||
|
||||
return action;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
action_save (MooEditWindow *window)
|
||||
{
|
||||
MooEdit *edit = moo_edit_window_get_active_doc (window);
|
||||
MooEdit *edit = ACTIVE_DOC (window);
|
||||
g_return_if_fail (edit != NULL);
|
||||
_moo_editor_save (window->priv->editor, edit, NULL);
|
||||
}
|
||||
|
@ -1365,7 +1416,7 @@ action_save (MooEditWindow *window)
|
|||
static void
|
||||
action_save_as (MooEditWindow *window)
|
||||
{
|
||||
MooEdit *edit = moo_edit_window_get_active_doc (window);
|
||||
MooEdit *edit = ACTIVE_DOC (window);
|
||||
g_return_if_fail (edit != NULL);
|
||||
_moo_editor_save_as (window->priv->editor, edit, NULL, NULL, NULL);
|
||||
}
|
||||
|
@ -1374,7 +1425,7 @@ action_save_as (MooEditWindow *window)
|
|||
static void
|
||||
action_close_tab (MooEditWindow *window)
|
||||
{
|
||||
MooEdit *edit = moo_edit_window_get_active_doc (window);
|
||||
MooEdit *edit = ACTIVE_DOC (window);
|
||||
g_return_if_fail (edit != NULL);
|
||||
moo_editor_close_doc (window->priv->editor, edit, TRUE);
|
||||
}
|
||||
|
@ -1401,7 +1452,7 @@ switch_to_tab (MooEditWindow *window,
|
|||
|
||||
moo_notebook_set_current_page (window->priv->notebook, n);
|
||||
|
||||
if ((doc = moo_edit_window_get_active_doc (window)))
|
||||
if ((doc = ACTIVE_DOC (window)))
|
||||
gtk_widget_grab_focus (GTK_WIDGET (doc));
|
||||
}
|
||||
|
||||
|
@ -1447,7 +1498,7 @@ moo_edit_window_find_now (MooEditWindow *window,
|
|||
{
|
||||
MooEdit *doc;
|
||||
|
||||
doc = moo_edit_window_get_active_doc (window);
|
||||
doc = ACTIVE_DOC (window);
|
||||
g_return_if_fail (doc != NULL);
|
||||
|
||||
g_signal_emit_by_name (doc, "find-word-at-cursor", forward);
|
||||
|
@ -1478,7 +1529,7 @@ action_abort_jobs (MooEditWindow *window)
|
|||
static void
|
||||
action_toggle_bookmark (MooEditWindow *window)
|
||||
{
|
||||
MooEdit *doc = moo_edit_window_get_active_doc (window);
|
||||
MooEdit *doc = ACTIVE_DOC (window);
|
||||
g_return_if_fail (doc != NULL);
|
||||
moo_edit_toggle_bookmark (doc, moo_text_view_get_cursor_line (MOO_TEXT_VIEW (doc)));
|
||||
}
|
||||
|
@ -1489,7 +1540,7 @@ action_next_bookmark (MooEditWindow *window)
|
|||
{
|
||||
int cursor;
|
||||
GSList *bookmarks;
|
||||
MooEdit *doc = moo_edit_window_get_active_doc (window);
|
||||
MooEdit *doc = ACTIVE_DOC (window);
|
||||
|
||||
g_return_if_fail (doc != NULL);
|
||||
|
||||
|
@ -1509,7 +1560,7 @@ action_prev_bookmark (MooEditWindow *window)
|
|||
{
|
||||
int cursor;
|
||||
GSList *bookmarks = NULL;
|
||||
MooEdit *doc = moo_edit_window_get_active_doc (window);
|
||||
MooEdit *doc = ACTIVE_DOC (window);
|
||||
|
||||
g_return_if_fail (doc != NULL);
|
||||
|
||||
|
@ -1539,7 +1590,7 @@ goto_bookmark_activated (GtkAction *action,
|
|||
window = _moo_action_get_window (action);
|
||||
g_return_if_fail (window != NULL);
|
||||
|
||||
doc = moo_edit_window_get_active_doc (window);
|
||||
doc = ACTIVE_DOC (window);
|
||||
g_return_if_fail (doc != NULL);
|
||||
|
||||
if ((bk = moo_edit_get_bookmark (doc, n)))
|
||||
|
@ -1633,7 +1684,7 @@ populate_bookmarks (MooEditWindow *window,
|
|||
GtkWidget *item;
|
||||
const GSList *bookmarks;
|
||||
|
||||
doc = moo_edit_window_get_active_doc (window);
|
||||
doc = ACTIVE_DOC (window);
|
||||
g_return_if_fail (doc != NULL);
|
||||
|
||||
bookmarks = moo_edit_list_bookmarks (doc);
|
||||
|
@ -1761,7 +1812,7 @@ create_bookmarks_menu_action (MooWindow *window,
|
|||
static void
|
||||
action_next_ph (MooEditWindow *window)
|
||||
{
|
||||
MooEdit *doc = moo_edit_window_get_active_doc (window);
|
||||
MooEdit *doc = ACTIVE_DOC (window);
|
||||
g_return_if_fail (doc != NULL);
|
||||
moo_text_view_next_placeholder (MOO_TEXT_VIEW (doc));
|
||||
}
|
||||
|
@ -1770,7 +1821,7 @@ action_next_ph (MooEditWindow *window)
|
|||
static void
|
||||
action_prev_ph (MooEditWindow *window)
|
||||
{
|
||||
MooEdit *doc = moo_edit_window_get_active_doc (window);
|
||||
MooEdit *doc = ACTIVE_DOC (window);
|
||||
g_return_if_fail (doc != NULL);
|
||||
moo_text_view_prev_placeholder (MOO_TEXT_VIEW (doc));
|
||||
}
|
||||
|
@ -1788,7 +1839,7 @@ action_page_setup (MooEditWindow *window)
|
|||
static void
|
||||
action_print (MooEditWindow *window)
|
||||
{
|
||||
gpointer doc = moo_edit_window_get_active_doc (window);
|
||||
gpointer doc = ACTIVE_DOC (window);
|
||||
g_return_if_fail (doc != NULL);
|
||||
_moo_edit_print (doc, GTK_WIDGET (window));
|
||||
}
|
||||
|
@ -1797,7 +1848,7 @@ action_print (MooEditWindow *window)
|
|||
static void
|
||||
action_print_preview (MooEditWindow *window)
|
||||
{
|
||||
gpointer doc = moo_edit_window_get_active_doc (window);
|
||||
gpointer doc = ACTIVE_DOC (window);
|
||||
g_return_if_fail (doc != NULL);
|
||||
_moo_edit_print_preview (doc, GTK_WIDGET (window));
|
||||
}
|
||||
|
@ -1809,7 +1860,7 @@ action_print_pdf (MooEditWindow *window)
|
|||
char *start_name;
|
||||
const char *doc_name, *dot;
|
||||
const char *filename;
|
||||
gpointer doc = moo_edit_window_get_active_doc (window);
|
||||
gpointer doc = ACTIVE_DOC (window);
|
||||
|
||||
doc_name = doc ? moo_edit_get_display_basename (doc) : "output";
|
||||
dot = strrchr (doc_name, '.');
|
||||
|
@ -1825,7 +1876,7 @@ action_print_pdf (MooEditWindow *window)
|
|||
start_name = g_strdup_printf ("%s.pdf", doc_name);
|
||||
}
|
||||
|
||||
doc = moo_edit_window_get_active_doc (window);
|
||||
doc = ACTIVE_DOC (window);
|
||||
g_return_if_fail (doc != NULL);
|
||||
|
||||
filename = moo_file_dialogp (GTK_WIDGET (window),
|
||||
|
@ -1850,7 +1901,7 @@ wrap_text_toggled (MooEditWindow *window,
|
|||
MooEdit *doc;
|
||||
GtkWrapMode mode;
|
||||
|
||||
doc = moo_edit_window_get_active_doc (window);
|
||||
doc = ACTIVE_DOC (window);
|
||||
g_return_if_fail (doc != NULL);
|
||||
|
||||
g_object_get (doc, "wrap-mode", &mode, NULL);
|
||||
|
@ -1881,7 +1932,7 @@ line_numbers_toggled (MooEditWindow *window,
|
|||
MooEdit *doc;
|
||||
gboolean show;
|
||||
|
||||
doc = moo_edit_window_get_active_doc (window);
|
||||
doc = ACTIVE_DOC (window);
|
||||
g_return_if_fail (doc != NULL);
|
||||
|
||||
g_object_get (doc, "show-line-numbers", &show, NULL);
|
||||
|
@ -1959,49 +2010,6 @@ notebook_switch_page (G_GNUC_UNUSED MooNotebook *notebook,
|
|||
}
|
||||
|
||||
|
||||
static void
|
||||
doc_encoding_menu_item_activated (const char *encoding,
|
||||
gpointer data)
|
||||
{
|
||||
_moo_edit_set_encoding (data, encoding);
|
||||
}
|
||||
|
||||
static GtkWidget *
|
||||
create_doc_encoding_menu_item (MooEdit *doc)
|
||||
{
|
||||
GtkWidget *item, *menu, *enc_item;
|
||||
const char *enc, *display_enc;
|
||||
char *freeme = NULL;
|
||||
|
||||
enc = moo_edit_get_encoding (doc);
|
||||
|
||||
if (!enc)
|
||||
{
|
||||
freeme = _moo_edit_get_default_encoding ();
|
||||
enc = freeme;
|
||||
}
|
||||
|
||||
display_enc = _moo_encoding_get_display_name (enc);
|
||||
|
||||
/* Translators: do not translate the part before | */
|
||||
item = gtk_menu_item_new_with_label (Q_("Item in the notebook popup menu|Encoding"));
|
||||
gtk_widget_show (item);
|
||||
menu = _moo_encodings_menu_new (doc_encoding_menu_item_activated, doc,
|
||||
enc, FALSE);
|
||||
gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), menu);
|
||||
|
||||
gtk_menu_shell_prepend (GTK_MENU_SHELL (menu),
|
||||
g_object_new (GTK_TYPE_SEPARATOR_MENU_ITEM,
|
||||
"visible", TRUE, NULL));
|
||||
|
||||
enc_item = gtk_radio_menu_item_new_with_label (NULL, display_enc);
|
||||
gtk_widget_show (enc_item);
|
||||
gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), enc_item);
|
||||
|
||||
g_free (freeme);
|
||||
return item;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
notebook_populate_popup (MooNotebook *notebook,
|
||||
GtkWidget *child,
|
||||
|
@ -2052,12 +2060,6 @@ notebook_populate_popup (MooNotebook *notebook,
|
|||
window);
|
||||
}
|
||||
|
||||
gtk_menu_shell_append (GTK_MENU_SHELL (menu),
|
||||
g_object_new (GTK_TYPE_SEPARATOR_MENU_ITEM,
|
||||
"visible", TRUE, NULL));
|
||||
item = create_doc_encoding_menu_item (edit);
|
||||
gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
@ -2166,12 +2168,21 @@ edit_changed (MooEditWindow *window,
|
|||
update_statusbar (window);
|
||||
update_lang_menu (window);
|
||||
update_doc_view_actions (window);
|
||||
update_doc_encoding_item (window);
|
||||
}
|
||||
|
||||
if (doc)
|
||||
update_tab_label (window, doc);
|
||||
}
|
||||
|
||||
static void
|
||||
edit_encoding_changed (MooEditWindow *window,
|
||||
G_GNUC_UNUSED GParamSpec *pspec,
|
||||
MooEdit *doc)
|
||||
{
|
||||
if (doc == ACTIVE_DOC (window))
|
||||
update_doc_encoding_item (window);
|
||||
}
|
||||
|
||||
static void
|
||||
edit_overwrite_changed (MooEditWindow *window,
|
||||
|
@ -2226,7 +2237,7 @@ update_doc_view_actions (MooEditWindow *window)
|
|||
{
|
||||
MooEdit *doc;
|
||||
|
||||
doc = moo_edit_window_get_active_doc (window);
|
||||
doc = ACTIVE_DOC (window);
|
||||
|
||||
if (!doc)
|
||||
return;
|
||||
|
@ -2397,10 +2408,14 @@ _moo_edit_window_insert_doc (MooEditWindow *window,
|
|||
gtk_container_add (GTK_CONTAINER (scrolledwindow), GTK_WIDGET (edit));
|
||||
gtk_widget_show_all (scrolledwindow);
|
||||
|
||||
if (position < 0)
|
||||
position = moo_notebook_get_current_page (window->priv->notebook) + 1;
|
||||
moo_notebook_insert_page (window->priv->notebook, scrolledwindow, label, position);
|
||||
|
||||
g_signal_connect_swapped (edit, "doc_status_changed",
|
||||
G_CALLBACK (edit_changed), window);
|
||||
g_signal_connect_swapped (edit, "notify::encoding",
|
||||
G_CALLBACK (edit_encoding_changed), window);
|
||||
g_signal_connect_swapped (edit, "notify::overwrite",
|
||||
G_CALLBACK (edit_overwrite_changed), window);
|
||||
g_signal_connect_swapped (edit, "notify::wrap-mode",
|
||||
|
@ -3247,21 +3262,22 @@ set_statusbar_numbers (MooEditWindow *window,
|
|||
int column,
|
||||
int chars)
|
||||
{
|
||||
char line_buf[10] = {0};
|
||||
char column_buf[10] = {0};
|
||||
char chars_buf[10] = {0};
|
||||
char *text, *text2;
|
||||
|
||||
if (line > 0 && column > 0)
|
||||
/* Label in the statusbar - line and column numbers */
|
||||
text = g_strdup_printf (_("Line: %d Col: %d"), line, column);
|
||||
else
|
||||
/* Disabled label in the statusbar when no document is open */
|
||||
text = g_strdup (_("Line: Col: "));
|
||||
{
|
||||
g_snprintf (line_buf, sizeof line_buf, "%d", line);
|
||||
g_snprintf (column_buf, sizeof column_buf, "%d", column);
|
||||
}
|
||||
|
||||
if (chars >= 0)
|
||||
/* Label in the statusbar - number of characters in the document */
|
||||
text2 = g_strdup_printf (_("Chars: %d"), chars);
|
||||
else
|
||||
/* Disabled label in the statusbar when no document is open */
|
||||
text2 = g_strdup (_("Chars: "));
|
||||
g_snprintf (chars_buf, sizeof chars_buf, "%d", chars);
|
||||
|
||||
text = g_strdup_printf (_("Line: %s Col: %s"), line_buf, column_buf);
|
||||
text2 = g_strdup_printf (_("Chars: %s"), chars_buf);
|
||||
|
||||
gtk_label_set_text (window->priv->cursor_label, text);
|
||||
gtk_label_set_text (window->priv->chars_label, text2);
|
||||
|
@ -4156,7 +4172,7 @@ moo_edit_window_update_doc_list (MooEditWindow *window)
|
|||
window, NULL);
|
||||
|
||||
if (!window->priv->history_blocked &&
|
||||
(doc = moo_edit_window_get_active_doc (window)))
|
||||
(doc = ACTIVE_DOC (window)))
|
||||
{
|
||||
GList *link = g_list_find (window->priv->history, doc);
|
||||
|
||||
|
|
|
@ -74,7 +74,6 @@ static void enc_mgr_load (EncodingsManager *enc_mgr);
|
|||
static void enc_mgr_add_used (EncodingsManager *enc_mgr,
|
||||
Encoding *enc);
|
||||
static void sync_recent_menu (MenuData *menu,
|
||||
const char *exclude,
|
||||
gboolean need_separator);
|
||||
|
||||
|
||||
|
@ -512,7 +511,7 @@ update_menu_idle (EncodingsManager *mgr)
|
|||
for (l = mgr->menus; l != NULL; l = l->next)
|
||||
{
|
||||
MenuData *menu = l->data;
|
||||
sync_recent_menu (menu, NULL, FALSE);
|
||||
sync_recent_menu (menu, FALSE);
|
||||
}
|
||||
|
||||
enc_mgr_save (mgr);
|
||||
|
@ -989,14 +988,14 @@ create_menu_item (Encoding *enc,
|
|||
}
|
||||
|
||||
static void
|
||||
sync_recent_menu (MenuData *menu,
|
||||
const char *exclude,
|
||||
gboolean need_separator)
|
||||
sync_recent_menu (MenuData *menu,
|
||||
gboolean first_time)
|
||||
{
|
||||
EncodingsManager *mgr = get_enc_mgr ();
|
||||
GList *children, *l;
|
||||
GSList *recent_items;
|
||||
gboolean have_separator = FALSE;
|
||||
int pos = first_time ? 0 : 2;
|
||||
|
||||
children = gtk_container_get_children (GTK_CONTAINER (menu->menu));
|
||||
for (l = children; l != NULL; l = l->next)
|
||||
|
@ -1009,31 +1008,54 @@ sync_recent_menu (MenuData *menu,
|
|||
while (recent_items)
|
||||
{
|
||||
Encoding *enc = recent_items->data;
|
||||
GtkWidget *item;
|
||||
|
||||
if (!exclude || strcmp (enc->name, exclude) != 0)
|
||||
if (first_time && !have_separator)
|
||||
{
|
||||
GtkWidget *item;
|
||||
|
||||
if (need_separator && !have_separator)
|
||||
{
|
||||
item = gtk_separator_menu_item_new ();
|
||||
gtk_menu_shell_prepend (GTK_MENU_SHELL (menu->menu), item);
|
||||
have_separator = TRUE;
|
||||
}
|
||||
|
||||
item = create_menu_item (enc, menu, TRUE);
|
||||
gtk_menu_shell_prepend (GTK_MENU_SHELL (menu->menu), item);
|
||||
item = gtk_separator_menu_item_new ();
|
||||
gtk_menu_shell_insert (GTK_MENU_SHELL (menu->menu), item, pos);
|
||||
have_separator = TRUE;
|
||||
}
|
||||
|
||||
item = create_menu_item (enc, menu, TRUE);
|
||||
gtk_menu_shell_insert (GTK_MENU_SHELL (menu->menu), item, pos);
|
||||
|
||||
recent_items = g_slist_delete_link (recent_items, recent_items);
|
||||
}
|
||||
}
|
||||
|
||||
GtkWidget *
|
||||
static void
|
||||
exclude_item (MenuData *menu_data,
|
||||
Encoding *exclude_enc)
|
||||
{
|
||||
GList *children, *l;
|
||||
|
||||
children = gtk_container_get_children (GTK_CONTAINER (menu_data->menu));
|
||||
|
||||
for (l = children; l != NULL; l = l->next)
|
||||
{
|
||||
GtkWidget *item = l->data;
|
||||
|
||||
if (g_object_get_data (G_OBJECT (item), "moo-recent-encoding"))
|
||||
{
|
||||
gboolean visible = TRUE;
|
||||
|
||||
if (exclude_enc)
|
||||
{
|
||||
Encoding *enc = g_object_get_data (G_OBJECT (item), "moo-encoding");
|
||||
visible = exclude_enc != enc;
|
||||
}
|
||||
|
||||
g_object_set (item, "visible", visible, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
g_list_free (children);
|
||||
}
|
||||
|
||||
static MenuData *
|
||||
_moo_encodings_menu_new (MooEncodingsMenuFunc func,
|
||||
gpointer data,
|
||||
const char *exclude,
|
||||
gboolean sync)
|
||||
gpointer data)
|
||||
{
|
||||
MenuData *menu_data = NULL;
|
||||
GtkWidget *widget;
|
||||
|
@ -1051,16 +1073,8 @@ _moo_encodings_menu_new (MooEncodingsMenuFunc func,
|
|||
widget = gtk_menu_new ();
|
||||
menu_data->menu = widget;
|
||||
|
||||
if (sync)
|
||||
{
|
||||
mgr->menus = g_slist_prepend (mgr->menus, menu_data);
|
||||
g_signal_connect (widget, "destroy", G_CALLBACK (menu_destroyed), menu_data);
|
||||
}
|
||||
else
|
||||
{
|
||||
g_object_set_data_full (G_OBJECT (widget), "moo-menu-data", menu_data,
|
||||
(GDestroyNotify) menu_data_free);
|
||||
}
|
||||
mgr->menus = g_slist_prepend (mgr->menus, menu_data);
|
||||
g_signal_connect (widget, "destroy", G_CALLBACK (menu_destroyed), menu_data);
|
||||
|
||||
for (cgr = 0; cgr < mgr->n_groups; ++cgr)
|
||||
{
|
||||
|
@ -1081,16 +1095,21 @@ _moo_encodings_menu_new (MooEncodingsMenuFunc func,
|
|||
}
|
||||
}
|
||||
|
||||
sync_recent_menu (menu_data, exclude, TRUE);
|
||||
sync_recent_menu (menu_data, TRUE);
|
||||
|
||||
gtk_widget_show_all (widget);
|
||||
return widget;
|
||||
return menu_data;
|
||||
}
|
||||
|
||||
typedef struct {
|
||||
MooAction base;
|
||||
MooEncodingsMenuFunc func;
|
||||
gpointer func_data;
|
||||
Encoding *cur_enc;
|
||||
GtkWidget *cur_item;
|
||||
GtkWidget *cur_separator;
|
||||
MenuData *menu_data;
|
||||
guint update_idle;
|
||||
} MooEncodingsMenuAction;
|
||||
typedef MooActionClass MooEncodingsMenuActionClass;
|
||||
MOO_DEFINE_TYPE_STATIC (MooEncodingsMenuAction, moo_encodings_menu_action, MOO_TYPE_ACTION)
|
||||
|
@ -1106,6 +1125,10 @@ moo_encodings_menu_action_init (MooEncodingsMenuAction *action)
|
|||
{
|
||||
action->func = NULL;
|
||||
action->func_data = NULL;
|
||||
action->cur_enc = NULL;
|
||||
action->cur_item = NULL;
|
||||
action->cur_separator = NULL;
|
||||
action->menu_data = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1113,7 +1136,9 @@ action_item_activated (const char *encoding,
|
|||
gpointer data)
|
||||
{
|
||||
MooEncodingsMenuAction *action = data;
|
||||
|
||||
g_return_if_fail (action->func != NULL);
|
||||
|
||||
action->func (encoding, action->func_data);
|
||||
}
|
||||
|
||||
|
@ -1121,11 +1146,23 @@ static GtkWidget *
|
|||
moo_encodings_menu_action_create_menu_item (GtkAction *gtkaction)
|
||||
{
|
||||
MooEncodingsMenuAction *action = MOO_ENCODINGS_MENU_ACTION (gtkaction);
|
||||
GtkWidget *menu_item, *menu;
|
||||
GtkWidget *menu_item;
|
||||
|
||||
menu_item = GTK_ACTION_CLASS (moo_encodings_menu_action_parent_class)->create_menu_item (gtkaction);
|
||||
menu = _moo_encodings_menu_new (action_item_activated, action, NULL, TRUE);
|
||||
gtk_menu_item_set_submenu (GTK_MENU_ITEM (menu_item), menu);
|
||||
action->menu_data = _moo_encodings_menu_new (action_item_activated, action);
|
||||
gtk_menu_item_set_submenu (GTK_MENU_ITEM (menu_item), action->menu_data->menu);
|
||||
|
||||
action->cur_separator = gtk_separator_menu_item_new ();
|
||||
gtk_menu_shell_prepend (GTK_MENU_SHELL (action->menu_data->menu), action->cur_separator);
|
||||
action->cur_item = gtk_radio_menu_item_new_with_label (NULL, "");
|
||||
gtk_menu_shell_prepend (GTK_MENU_SHELL (action->menu_data->menu), action->cur_item);
|
||||
|
||||
if (action->cur_enc)
|
||||
{
|
||||
Encoding *enc = action->cur_enc;
|
||||
action->cur_enc = NULL;
|
||||
_moo_encodings_menu_action_set_current (gtkaction, enc->name);
|
||||
}
|
||||
|
||||
return menu_item;
|
||||
}
|
||||
|
@ -1155,3 +1192,54 @@ _moo_encodings_menu_action_new (const char *id,
|
|||
|
||||
return GTK_ACTION (action);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
update_recent_list_visibility (MooEncodingsMenuAction *action)
|
||||
{
|
||||
action->update_idle = 0;
|
||||
|
||||
if (action->cur_enc)
|
||||
{
|
||||
GtkWidget *child;
|
||||
|
||||
gtk_widget_show (action->cur_item);
|
||||
gtk_widget_show (action->cur_separator);
|
||||
|
||||
child = GTK_BIN (action->cur_item)->child;
|
||||
gtk_label_set_text (GTK_LABEL (child), action->cur_enc->display_name);
|
||||
|
||||
exclude_item (action->menu_data, action->cur_enc);
|
||||
}
|
||||
else
|
||||
{
|
||||
gtk_widget_hide (action->cur_item);
|
||||
gtk_widget_hide (action->cur_separator);
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void
|
||||
_moo_encodings_menu_action_set_current (GtkAction *gtkaction,
|
||||
const char *enc_name)
|
||||
{
|
||||
MooEncodingsMenuAction *action;
|
||||
Encoding *enc;
|
||||
EncodingsManager *mgr;
|
||||
|
||||
g_return_if_fail (MOO_IS_ENCODINGS_MENU_ACTION (gtkaction));
|
||||
|
||||
action = MOO_ENCODINGS_MENU_ACTION (gtkaction);
|
||||
|
||||
mgr = get_enc_mgr ();
|
||||
enc = enc_name ? get_encoding (mgr, enc_name) : NULL;
|
||||
|
||||
if (enc != action->cur_enc)
|
||||
{
|
||||
action->cur_enc = enc;
|
||||
if (action->cur_item && !action->update_idle)
|
||||
action->update_idle = g_idle_add_full (G_PRIORITY_DEFAULT_IDLE + 1,
|
||||
(GSourceFunc) update_recent_list_visibility,
|
||||
action, NULL);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -48,10 +48,8 @@ GtkAction *_moo_encodings_menu_action_new (const char *id,
|
|||
const char *label,
|
||||
MooEncodingsMenuFunc func,
|
||||
gpointer data);
|
||||
GtkWidget *_moo_encodings_menu_new (MooEncodingsMenuFunc func,
|
||||
gpointer data,
|
||||
const char *exclude,
|
||||
gboolean sync);
|
||||
void _moo_encodings_menu_action_set_current (GtkAction *action,
|
||||
const char *enc);
|
||||
|
||||
const char *_moo_encoding_locale (void);
|
||||
gboolean _moo_encodings_equal (const char *enc1,
|
||||
|
|
Loading…
Reference in New Issue