summaryrefslogtreecommitdiff
path: root/gedit
diff options
context:
space:
mode:
Diffstat (limited to 'gedit')
-rwxr-xr-xgedit/Makefile.am254
-rwxr-xr-xgedit/bacon-message-connection.c396
-rwxr-xr-xgedit/bacon-message-connection.h43
-rwxr-xr-xgedit/dialogs/Makefile.am31
-rwxr-xr-xgedit/dialogs/gedit-close-confirmation-dialog.c790
-rwxr-xr-xgedit/dialogs/gedit-close-confirmation-dialog.h75
-rwxr-xr-xgedit/dialogs/gedit-encodings-dialog.c499
-rwxr-xr-xgedit/dialogs/gedit-encodings-dialog.h86
-rwxr-xr-xgedit/dialogs/gedit-encodings-dialog.ui256
-rwxr-xr-xgedit/dialogs/gedit-preferences-dialog.c1189
-rwxr-xr-xgedit/dialogs/gedit-preferences-dialog.h87
-rwxr-xr-xgedit/dialogs/gedit-preferences-dialog.ui1107
-rwxr-xr-xgedit/dialogs/gedit-search-dialog.c634
-rwxr-xr-xgedit/dialogs/gedit-search-dialog.h128
-rwxr-xr-xgedit/dialogs/gedit-search-dialog.ui255
-rwxr-xr-xgedit/gedit-app.c911
-rwxr-xr-xgedit/gedit-app.h142
-rwxr-xr-xgedit/gedit-close-button.c80
-rwxr-xr-xgedit/gedit-close-button.h56
-rwxr-xr-xgedit/gedit-commands-documents.c87
-rwxr-xr-xgedit/gedit-commands-edit.c174
-rwxr-xr-xgedit/gedit-commands-file-print.c91
-rwxr-xr-xgedit/gedit-commands-file.c1885
-rwxr-xr-xgedit/gedit-commands-help.c115
-rwxr-xr-xgedit/gedit-commands-search.c716
-rwxr-xr-xgedit/gedit-commands-view.c154
-rwxr-xr-xgedit/gedit-commands.h166
-rwxr-xr-xgedit/gedit-debug.c159
-rwxr-xr-xgedit/gedit-debug.h93
-rwxr-xr-xgedit/gedit-dirs.c320
-rwxr-xr-xgedit/gedit-dirs.h54
-rwxr-xr-xgedit/gedit-document-input-stream.c479
-rwxr-xr-xgedit/gedit-document-input-stream.h68
-rwxr-xr-xgedit/gedit-document-loader.c357
-rwxr-xr-xgedit/gedit-document-loader.h130
-rwxr-xr-xgedit/gedit-document-output-stream.c391
-rwxr-xr-xgedit/gedit-document-output-stream.h64
-rwxr-xr-xgedit/gedit-document-saver.c359
-rwxr-xr-xgedit/gedit-document-saver.h133
-rwxr-xr-xgedit/gedit-document.c2732
-rwxr-xr-xgedit/gedit-document.h338
-rwxr-xr-xgedit/gedit-documents-panel.c828
-rwxr-xr-xgedit/gedit-documents-panel.h85
-rwxr-xr-xgedit/gedit-encodings-combo-box.c468
-rwxr-xr-xgedit/gedit-encodings-combo-box.h78
-rwxr-xr-xgedit/gedit-encodings.c473
-rwxr-xr-xgedit/gedit-encodings.h62
-rwxr-xr-xgedit/gedit-enum-types.c.template39
-rwxr-xr-xgedit/gedit-enum-types.h.template27
-rwxr-xr-xgedit/gedit-file-chooser-dialog.c560
-rwxr-xr-xgedit/gedit-file-chooser-dialog.h89
-rwxr-xr-xgedit/gedit-gio-document-loader.c708
-rwxr-xr-xgedit/gedit-gio-document-loader.h79
-rwxr-xr-xgedit/gedit-gio-document-saver.c775
-rwxr-xr-xgedit/gedit-gio-document-saver.h76
-rwxr-xr-xgedit/gedit-help.c122
-rwxr-xr-xgedit/gedit-help.h44
-rwxr-xr-xgedit/gedit-history-entry.c632
-rwxr-xr-xgedit/gedit-history-entry.h96
-rwxr-xr-xgedit/gedit-io-error-message-area.c1288
-rwxr-xr-xgedit/gedit-io-error-message-area.h68
-rwxr-xr-xgedit/gedit-language-manager.c90
-rwxr-xr-xgedit/gedit-language-manager.h47
-rwxr-xr-xgedit/gedit-marshal.list13
-rwxr-xr-xgedit/gedit-message-area.c626
-rwxr-xr-xgedit/gedit-message-area.h129
-rwxr-xr-xgedit/gedit-message-bus.c1158
-rwxr-xr-xgedit/gedit-message-bus.h129
-rwxr-xr-xgedit/gedit-message-type.c526
-rwxr-xr-xgedit/gedit-message-type.h67
-rwxr-xr-xgedit/gedit-message.c593
-rwxr-xr-xgedit/gedit-message.h71
-rwxr-xr-xgedit/gedit-metadata-manager.c563
-rwxr-xr-xgedit/gedit-metadata-manager.h50
-rwxr-xr-xgedit/gedit-notebook.c1099
-rwxr-xr-xgedit/gedit-notebook.h143
-rwxr-xr-xgedit/gedit-object-module.c343
-rwxr-xr-xgedit/gedit-object-module.h94
-rwxr-xr-xgedit/gedit-panel.c950
-rwxr-xr-xgedit/gedit-panel.h130
-rwxr-xr-xgedit/gedit-plugin-info-priv.h68
-rwxr-xr-xgedit/gedit-plugin-info.c394
-rwxr-xr-xgedit/gedit-plugin-info.h63
-rwxr-xr-xgedit/gedit-plugin-loader.c131
-rwxr-xr-xgedit/gedit-plugin-loader.h106
-rwxr-xr-xgedit/gedit-plugin-manager.c889
-rwxr-xr-xgedit/gedit-plugin-manager.h83
-rwxr-xr-xgedit/gedit-plugin.c334
-rwxr-xr-xgedit/gedit-plugin.h240
-rwxr-xr-xgedit/gedit-plugins-engine.c861
-rwxr-xr-xgedit/gedit-plugins-engine.h107
-rwxr-xr-xgedit/gedit-prefs-manager-app.c1620
-rwxr-xr-xgedit/gedit-prefs-manager-app.h84
-rwxr-xr-xgedit/gedit-prefs-manager-private.h45
-rwxr-xr-xgedit/gedit-prefs-manager.c1241
-rwxr-xr-xgedit/gedit-prefs-manager.h423
-rwxr-xr-xgedit/gedit-print-job.c865
-rwxr-xr-xgedit/gedit-print-job.h133
-rwxr-xr-xgedit/gedit-print-preferences.ui497
-rwxr-xr-xgedit/gedit-print-preview.c1327
-rwxr-xr-xgedit/gedit-print-preview.h71
-rwxr-xr-xgedit/gedit-progress-message-area.c261
-rwxr-xr-xgedit/gedit-progress-message-area.h112
-rwxr-xr-xgedit/gedit-session.c601
-rwxr-xr-xgedit/gedit-session.h47
-rwxr-xr-xgedit/gedit-smart-charset-converter.c422
-rwxr-xr-xgedit/gedit-smart-charset-converter.h66
-rwxr-xr-xgedit/gedit-spinner.c989
-rwxr-xr-xgedit/gedit-spinner.h95
-rwxr-xr-xgedit/gedit-status-combo-box.c418
-rwxr-xr-xgedit/gedit-status-combo-box.h82
-rwxr-xr-xgedit/gedit-statusbar.c448
-rwxr-xr-xgedit/gedit-statusbar.h99
-rwxr-xr-xgedit/gedit-style-scheme-manager.c364
-rwxr-xr-xgedit/gedit-style-scheme-manager.h56
-rwxr-xr-xgedit/gedit-tab-label.c371
-rwxr-xr-xgedit/gedit-tab-label.h66
-rwxr-xr-xgedit/gedit-tab.c2832
-rwxr-xr-xgedit/gedit-tab.h165
-rwxr-xr-xgedit/gedit-ui.h188
-rwxr-xr-xgedit/gedit-ui.xml203
-rwxr-xr-xgedit/gedit-utils.c1546
-rwxr-xr-xgedit/gedit-utils.h162
-rwxr-xr-xgedit/gedit-view.c2181
-rwxr-xr-xgedit/gedit-view.h108
-rwxr-xr-xgedit/gedit-window-private.h124
-rwxr-xr-xgedit/gedit-window.c4798
-rwxr-xr-xgedit/gedit-window.h195
-rwxr-xr-xgedit/gedit.c766
-rwxr-xr-xgedit/gedit.rc1
-rwxr-xr-xgedit/gedittextregion.c647
-rwxr-xr-xgedit/gedittextregion.h88
-rwxr-xr-xgedit/osx/Makefile.am23
-rwxr-xr-xgedit/osx/gedit-osx-delegate.h16
-rwxr-xr-xgedit/osx/gedit-osx-delegate.m84
-rwxr-xr-xgedit/osx/gedit-osx.c94
-rwxr-xr-xgedit/osx/gedit-osx.h17
-rwxr-xr-xgedit/smclient/Makefile.am52
-rwxr-xr-xgedit/smclient/eggdesktopfile.c1510
-rwxr-xr-xgedit/smclient/eggdesktopfile.h160
-rwxr-xr-xgedit/smclient/eggsmclient-osx.c235
-rwxr-xr-xgedit/smclient/eggsmclient-private.h53
-rwxr-xr-xgedit/smclient/eggsmclient-win32.c353
-rwxr-xr-xgedit/smclient/eggsmclient-xsmp.c1370
-rwxr-xr-xgedit/smclient/eggsmclient.c589
-rwxr-xr-xgedit/smclient/eggsmclient.h117
146 files changed, 0 insertions, 62258 deletions
diff --git a/gedit/Makefile.am b/gedit/Makefile.am
deleted file mode 100755
index f08c6427..00000000
--- a/gedit/Makefile.am
+++ /dev/null
@@ -1,254 +0,0 @@
-## Process this file with automake to produce Makefile.in
-SUBDIRS = dialogs smclient
-
-if OS_OSX
-SUBDIRS += osx
-endif
-
-bin_PROGRAMS = gedit
-
-noinst_LTLIBRARIES = libgedit.la
-
-INCLUDES = \
- -I$(top_srcdir) \
- -I$(srcdir) \
- -I$(srcdir)/smclient \
- $(GEDIT_CFLAGS) \
- $(IGE_MAC_CFLAGS) \
- $(WARN_CFLAGS) \
- $(DISABLE_DEPRECATED_CFLAGS) \
- -DDATADIR=\""$(datadir)"\" \
- -DLIBDIR=\""$(libdir)"\"
-
-gedit_SOURCES = \
- gedit.c
-
-gedit_LDADD = libgedit.la $(GEDIT_LIBS) $(IGE_MAC_LIBS) $(EGG_SMCLIENT_LIBS)
-
-if PLATFORM_WIN32
-gedit_LDFLAGS = -Wl,--export-all-symbols -Wl,--out-implib,libgedit-$(GEDIT_API_VERSION).a
-if OS_WIN32
-gedit_LDFLAGS += -mwindows
-endif
-else
-gedit_LDFLAGS = -export-dynamic -no-undefined -export-symbols-regex "^[[^_]].*"
-endif
-
-libgedit_la_LDFLAGS = -export-dynamic -no-undefined -export-symbols-regex "^[[^_]].*"
-
-libgedit_la_LIBADD = \
- dialogs/libdialogs.la \
- smclient/libeggsmclient.la
-
-# GEDIT_LIBS must be the last to ensure correct order on some platforms
-libgedit_la_LIBADD += $(GEDIT_LIBS)
-
-if OS_OSX
-gedit_LDFLAGS += -framework Carbon
-
-libgedit_la_LIBADD += osx/libosx.la
-endif
-
-BUILT_SOURCES = \
- gedit-enum-types.c \
- gedit-enum-types.h \
- gedit-marshal.c \
- gedit-marshal.h
-
-if OS_WIN32
-gedit-res.o: gedit.rc
- $(WINDRES) -i gedit.rc --input-format=rc -o gedit-res.o -O coff
-
-gedit_LDADD += gedit-res.o
-endif
-
-NOINST_H_FILES = \
- gedit-close-button.h \
- gedit-dirs.h \
- gedit-document-input-stream.h \
- gedit-document-loader.h \
- gedit-document-output-stream.h \
- gedit-document-saver.h \
- gedit-documents-panel.h \
- gedit-gio-document-loader.h \
- gedit-gio-document-saver.h \
- gedit-history-entry.h \
- gedit-io-error-message-area.h \
- gedit-language-manager.h \
- gedit-object-module.h \
- gedit-plugin-info.h \
- gedit-plugin-info-priv.h \
- gedit-plugin-loader.h \
- gedit-plugin-manager.h \
- gedit-plugins-engine.h \
- gedit-prefs-manager-private.h \
- gedit-print-job.h \
- gedit-print-preview.h \
- gedit-session.h \
- gedit-smart-charset-converter.h \
- gedit-style-scheme-manager.h \
- gedit-tab-label.h \
- gedittextregion.h \
- gedit-ui.h \
- gedit-window-private.h
-
-INST_H_FILES = \
- gedit-app.h \
- gedit-commands.h \
- gedit-debug.h \
- gedit-document.h \
- gedit-encodings.h \
- gedit-encodings-combo-box.h \
- gedit-file-chooser-dialog.h \
- gedit-help.h \
- gedit-message-bus.h \
- gedit-message-type.h \
- gedit-message.h \
- gedit-notebook.h \
- gedit-panel.h \
- gedit-plugin.h \
- gedit-prefs-manager-app.h \
- gedit-prefs-manager.h \
- gedit-progress-message-area.h \
- gedit-statusbar.h \
- gedit-status-combo-box.h \
- gedit-tab.h \
- gedit-utils.h \
- gedit-view.h \
- gedit-window.h
-
-if !ENABLE_GVFS_METADATA
-INST_H_FILES += gedit-metadata-manager.h
-endif
-
-headerdir = $(prefix)/include/gedit-@GEDIT_API_VERSION@/gedit
-
-header_DATA = \
- $(INST_H_FILES)
-
-
-libgedit_la_SOURCES = \
- $(BUILT_SOURCES) \
- $(BACON_FILES) \
- $(POSIXIO_FILES) \
- gedit-app.c \
- gedit-close-button.c \
- gedit-commands-documents.c \
- gedit-commands-edit.c \
- gedit-commands-file.c \
- gedit-commands-file-print.c \
- gedit-commands-help.c \
- gedit-commands-search.c \
- gedit-commands-view.c \
- gedit-debug.c \
- gedit-dirs.c \
- gedit-document.c \
- gedit-document-input-stream.c \
- gedit-document-loader.c \
- gedit-document-output-stream.c \
- gedit-gio-document-loader.c \
- gedit-document-saver.c \
- gedit-gio-document-saver.c \
- gedit-documents-panel.c \
- gedit-encodings.c \
- gedit-encodings-combo-box.c \
- gedit-file-chooser-dialog.c \
- gedit-help.c \
- gedit-history-entry.c \
- gedit-io-error-message-area.c \
- gedit-language-manager.c \
- gedit-message-bus.c \
- gedit-message-type.c \
- gedit-message.c \
- gedit-object-module.c \
- gedit-notebook.c \
- gedit-panel.c \
- gedit-plugin-info.c \
- gedit-plugin.c \
- gedit-plugin-loader.c \
- gedit-plugin-manager.c \
- gedit-plugins-engine.c \
- gedit-prefs-manager-app.c \
- gedit-prefs-manager.c \
- gedit-prefs-manager-private.h \
- gedit-print-job.c \
- gedit-print-preview.c \
- gedit-progress-message-area.c \
- gedit-session.c \
- gedit-smart-charset-converter.c \
- gedit-statusbar.c \
- gedit-status-combo-box.c \
- gedit-style-scheme-manager.c \
- gedit-tab.c \
- gedit-tab-label.c \
- gedit-utils.c \
- gedit-view.c \
- gedit-window.c \
- gedittextregion.c \
- $(NOINST_H_FILES) \
- $(INST_H_FILES)
-
-if !ENABLE_GVFS_METADATA
-libgedit_la_SOURCES += gedit-metadata-manager.c
-endif
-
-gedit-enum-types.h: gedit-enum-types.h.template $(INST_H_FILES) $(GLIB_MKENUMS)
- $(AM_V_GEN) (cd $(srcdir) && $(GLIB_MKENUMS) --template gedit-enum-types.h.template $(INST_H_FILES)) > $@
-
-gedit-enum-types.c: gedit-enum-types.c.template $(INST_H_FILES) $(GLIB_MKENUMS)
- $(AM_V_GEN) (cd $(srcdir) && $(GLIB_MKENUMS) --template gedit-enum-types.c.template $(INST_H_FILES)) > $@
-
-gedit-marshal.h: gedit-marshal.list $(GLIB_GENMARSHAL)
- $(AM_V_GEN) $(GLIB_GENMARSHAL) $< --header --prefix=gedit_marshal > $@
-
-gedit-marshal.c: gedit-marshal.list $(GLIB_GENMARSHAL)
- $(AM_V_GEN) echo "#include \"gedit-marshal.h\"" > $@ && \
- $(GLIB_GENMARSHAL) $< --body --prefix=gedit_marshal >> $@
-
-uidir = $(datadir)/gedit-2/ui/
-ui_DATA = \
- gedit-ui.xml \
- gedit-print-preferences.ui
-
-EXTRA_DIST = \
- $(ui_DATA) \
- gedit-enum-types.h.template \
- gedit-enum-types.c.template \
- gedit-marshal.list \
- gedit.rc
-
-CLEANFILES = $(BUILT_SOURCES)
-
-dist-hook:
- cd $(distdir); rm -f $(BUILT_SOURCES)
-
-install-exec-hook:
-if PLATFORM_WIN32
- $(mkinstalldirs) "$(DESTDIR)$(libdir)"
- $(INSTALL_DATA) libgedit-$(GEDIT_API_VERSION).a "$(DESTDIR)$(libdir)"
-else
- rm -f $(DESTDIR)$(bindir)/mate-text-editor
- ln -s gedit $(DESTDIR)$(bindir)/mate-text-editor
-endif
-
-if !OS_WIN32
-BACON_DIR=$(srcdir)/../../libbacon/src/
-BACON_FILES=bacon-message-connection.h bacon-message-connection.c
-
-regenerate-built-sources:
- BACONFILES="$(BACON_FILES)" BACONDIR="$(BACON_DIR)" $(top_srcdir)/gedit/update-from-bacon.sh
-else
-BACON_DIR=
-endif
-
-if BUILD_MESSAGE_AREA
-libgedit_la_SOURCES += gedit-message-area.c
-INST_H_FILES += gedit-message-area.h
-endif
-
-if BUILD_SPINNER
-libgedit_la_SOURCES += gedit-spinner.c
-NOINST_H_FILES += gedit-spinner.h
-endif
-
--include $(top_srcdir)/git.mk
diff --git a/gedit/bacon-message-connection.c b/gedit/bacon-message-connection.c
deleted file mode 100755
index c8000de2..00000000
--- a/gedit/bacon-message-connection.c
+++ /dev/null
@@ -1,396 +0,0 @@
-/*
- * Copyright (C) 2003 Bastien Nocera <[email protected]>
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- */
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-#include <errno.h>
-
-#include "bacon-message-connection.h"
-
-#ifndef UNIX_PATH_MAX
-#define UNIX_PATH_MAX 108
-#endif
-
-struct BaconMessageConnection {
- /* A server accepts connections */
- gboolean is_server;
-
- /* The socket path itself */
- char *path;
-
- /* File descriptor of the socket */
- int fd;
- /* Channel to watch */
- GIOChannel *chan;
- /* Event id returned by g_io_add_watch() */
- int conn_id;
-
- /* Connections accepted by this connection */
- GSList *accepted_connections;
-
- /* callback */
- void (*func) (const char *message, gpointer user_data);
- gpointer data;
-};
-
-static gboolean
-test_is_socket (const char *path)
-{
- struct stat s;
-
- if (stat (path, &s) == -1)
- return FALSE;
-
- if (S_ISSOCK (s.st_mode))
- return TRUE;
-
- return FALSE;
-}
-
-static gboolean
-is_owned_by_user_and_socket (const char *path)
-{
- struct stat s;
-
- if (stat (path, &s) == -1)
- return FALSE;
-
- if (s.st_uid != geteuid ())
- return FALSE;
-
- if ((s.st_mode & S_IFSOCK) != S_IFSOCK)
- return FALSE;
-
- return TRUE;
-}
-
-static gboolean server_cb (GIOChannel *source,
- GIOCondition condition, gpointer data);
-
-static gboolean
-setup_connection (BaconMessageConnection *conn)
-{
- g_return_val_if_fail (conn->chan == NULL, FALSE);
-
- conn->chan = g_io_channel_unix_new (conn->fd);
- if (!conn->chan) {
- return FALSE;
- }
- g_io_channel_set_line_term (conn->chan, "\n", 1);
- conn->conn_id = g_io_add_watch (conn->chan, G_IO_IN, server_cb, conn);
-
- return TRUE;
-}
-
-static void
-accept_new_connection (BaconMessageConnection *server_conn)
-{
- BaconMessageConnection *conn;
- int alen;
-
- g_return_if_fail (server_conn->is_server);
-
- conn = g_new0 (BaconMessageConnection, 1);
- conn->is_server = FALSE;
- conn->func = server_conn->func;
- conn->data = server_conn->data;
-
- conn->fd = accept (server_conn->fd, NULL, (guint *)&alen);
-
- server_conn->accepted_connections =
- g_slist_prepend (server_conn->accepted_connections, conn);
-
- setup_connection (conn);
-}
-
-static gboolean
-server_cb (GIOChannel *source, GIOCondition condition, gpointer data)
-{
- BaconMessageConnection *conn = (BaconMessageConnection *)data;
- char *message, *subs, buf;
- int cd, rc, offset;
- gboolean finished;
-
- offset = 0;
- if (conn->is_server && conn->fd == g_io_channel_unix_get_fd (source)) {
- accept_new_connection (conn);
- return TRUE;
- }
- message = g_malloc (1);
- cd = conn->fd;
- rc = read (cd, &buf, 1);
- while (rc > 0 && buf != '\n')
- {
- message = g_realloc (message, rc + offset + 1);
- message[offset] = buf;
- offset = offset + rc;
- rc = read (cd, &buf, 1);
- }
- if (rc <= 0) {
- g_io_channel_shutdown (conn->chan, FALSE, NULL);
- g_io_channel_unref (conn->chan);
- conn->chan = NULL;
- close (conn->fd);
- conn->fd = -1;
- g_free (message);
- conn->conn_id = 0;
-
- return FALSE;
- }
- message[offset] = '\0';
-
- subs = message;
- finished = FALSE;
-
- while (finished == FALSE && *subs != '\0')
- {
- if (conn->func != NULL)
- (*conn->func) (subs, conn->data);
-
- subs += strlen (subs) + 1;
- if (subs - message >= offset)
- finished = TRUE;
- }
-
- g_free (message);
-
- return TRUE;
-}
-
-static char *
-find_file_with_pattern (const char *dir, const char *pattern)
-{
- GDir *filedir;
- char *found_filename;
- const char *filename;
- GPatternSpec *pat;
-
- filedir = g_dir_open (dir, 0, NULL);
- if (filedir == NULL)
- return NULL;
-
- pat = g_pattern_spec_new (pattern);
- if (pat == NULL)
- {
- g_dir_close (filedir);
- return NULL;
- }
-
- found_filename = NULL;
-
- while ((filename = g_dir_read_name (filedir)))
- {
- if (g_pattern_match_string (pat, filename))
- {
- char *tmp = g_build_filename (dir, filename, NULL);
- if (is_owned_by_user_and_socket (tmp))
- found_filename = g_strdup (filename);
- g_free (tmp);
- }
-
- if (found_filename != NULL)
- break;
- }
-
- g_pattern_spec_free (pat);
- g_dir_close (filedir);
-
- return found_filename;
-}
-
-static char *
-socket_filename (const char *prefix)
-{
- char *pattern, *newfile, *path, *filename;
- const char *tmpdir;
-
- pattern = g_strdup_printf ("%s.%s.*", prefix, g_get_user_name ());
- tmpdir = g_get_tmp_dir ();
- filename = find_file_with_pattern (tmpdir, pattern);
- if (filename == NULL)
- {
- newfile = g_strdup_printf ("%s.%s.%u", prefix,
- g_get_user_name (), g_random_int ());
- path = g_build_filename (tmpdir, newfile, NULL);
- g_free (newfile);
- } else {
- path = g_build_filename (tmpdir, filename, NULL);
- g_free (filename);
- }
-
- g_free (pattern);
- return path;
-}
-
-static gboolean
-try_server (BaconMessageConnection *conn)
-{
- struct sockaddr_un uaddr;
-
- uaddr.sun_family = AF_UNIX;
- strncpy (uaddr.sun_path, conn->path,
- MIN (strlen(conn->path)+1, UNIX_PATH_MAX));
- conn->fd = socket (PF_UNIX, SOCK_STREAM, 0);
- if (bind (conn->fd, (struct sockaddr *) &uaddr, sizeof (uaddr)) == -1)
- {
- conn->fd = -1;
- return FALSE;
- }
- listen (conn->fd, 5);
-
- if (!setup_connection (conn))
- return FALSE;
- return TRUE;
-}
-
-static gboolean
-try_client (BaconMessageConnection *conn)
-{
- struct sockaddr_un uaddr;
-
- uaddr.sun_family = AF_UNIX;
- strncpy (uaddr.sun_path, conn->path,
- MIN(strlen(conn->path)+1, UNIX_PATH_MAX));
- conn->fd = socket (PF_UNIX, SOCK_STREAM, 0);
- if (connect (conn->fd, (struct sockaddr *) &uaddr,
- sizeof (uaddr)) == -1)
- {
- conn->fd = -1;
- return FALSE;
- }
-
- return setup_connection (conn);
-}
-
-BaconMessageConnection *
-bacon_message_connection_new (const char *prefix)
-{
- BaconMessageConnection *conn;
-
- g_return_val_if_fail (prefix != NULL, NULL);
-
- conn = g_new0 (BaconMessageConnection, 1);
- conn->path = socket_filename (prefix);
-
- if (test_is_socket (conn->path) == FALSE)
- {
- if (!try_server (conn))
- {
- bacon_message_connection_free (conn);
- return NULL;
- }
-
- conn->is_server = TRUE;
- return conn;
- }
-
- if (try_client (conn) == FALSE)
- {
- unlink (conn->path);
- try_server (conn);
- if (conn->fd == -1)
- {
- bacon_message_connection_free (conn);
- return NULL;
- }
-
- conn->is_server = TRUE;
- return conn;
- }
-
- conn->is_server = FALSE;
- return conn;
-}
-
-void
-bacon_message_connection_free (BaconMessageConnection *conn)
-{
- GSList *child_conn;
-
- g_return_if_fail (conn != NULL);
- /* Only servers can accept other connections */
- g_return_if_fail (conn->is_server != FALSE ||
- conn->accepted_connections == NULL);
-
- child_conn = conn->accepted_connections;
- while (child_conn != NULL) {
- bacon_message_connection_free (child_conn->data);
- child_conn = g_slist_next (child_conn);
- }
- g_slist_free (conn->accepted_connections);
-
- if (conn->conn_id) {
- g_source_remove (conn->conn_id);
- conn->conn_id = 0;
- }
- if (conn->chan) {
- g_io_channel_shutdown (conn->chan, FALSE, NULL);
- g_io_channel_unref (conn->chan);
- }
-
- if (conn->is_server != FALSE) {
- unlink (conn->path);
- }
- if (conn->fd != -1) {
- close (conn->fd);
- }
-
- g_free (conn->path);
- g_free (conn);
-}
-
-void
-bacon_message_connection_set_callback (BaconMessageConnection *conn,
- BaconMessageReceivedFunc func,
- gpointer user_data)
-{
- g_return_if_fail (conn != NULL);
-
- conn->func = func;
- conn->data = user_data;
-}
-
-void
-bacon_message_connection_send (BaconMessageConnection *conn,
- const char *message)
-{
- g_return_if_fail (conn != NULL);
- g_return_if_fail (message != NULL);
-
- g_io_channel_write_chars (conn->chan, message, strlen (message),
- NULL, NULL);
- g_io_channel_write_chars (conn->chan, "\n", 1, NULL, NULL);
- g_io_channel_flush (conn->chan, NULL);
-}
-
-gboolean
-bacon_message_connection_get_is_server (BaconMessageConnection *conn)
-{
- g_return_val_if_fail (conn != NULL, FALSE);
-
- return conn->is_server;
-}
-
diff --git a/gedit/bacon-message-connection.h b/gedit/bacon-message-connection.h
deleted file mode 100755
index aac7a2d1..00000000
--- a/gedit/bacon-message-connection.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 2003 Bastien Nocera <[email protected]>
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- */
-
-#ifndef BACON_MESSAGE_CONNECTION_H
-#define BACON_MESSAGE_CONNECTION_H
-
-#include <glib.h>
-
-G_BEGIN_DECLS
-
-typedef void (*BaconMessageReceivedFunc) (const char *message,
- gpointer user_data);
-
-typedef struct BaconMessageConnection BaconMessageConnection;
-
-BaconMessageConnection *bacon_message_connection_new (const char *prefix);
-void bacon_message_connection_free (BaconMessageConnection *conn);
-void bacon_message_connection_set_callback (BaconMessageConnection *conn,
- BaconMessageReceivedFunc func,
- gpointer user_data);
-void bacon_message_connection_send (BaconMessageConnection *conn,
- const char *message);
-gboolean bacon_message_connection_get_is_server (BaconMessageConnection *conn);
-
-G_END_DECLS
-
-#endif /* BACON_MESSAGE_CONNECTION_H */
diff --git a/gedit/dialogs/Makefile.am b/gedit/dialogs/Makefile.am
deleted file mode 100755
index c0762571..00000000
--- a/gedit/dialogs/Makefile.am
+++ /dev/null
@@ -1,31 +0,0 @@
-uidir = $(datadir)/gedit-2/ui/
-
-INCLUDES = \
- -I$(top_srcdir) \
- -I$(top_builddir) \
- -I$(top_srcdir)/gedit \
- -I$(top_builddir)/gedit \
- $(GEDIT_CFLAGS) \
- $(WARN_CFLAGS) \
- $(DISABLE_DEPRECATED_CFLAGS)
-
-noinst_LTLIBRARIES = libdialogs.la
-
-libdialogs_la_SOURCES = \
- gedit-preferences-dialog.h \
- gedit-preferences-dialog.c \
- gedit-close-confirmation-dialog.c \
- gedit-close-confirmation-dialog.h \
- gedit-encodings-dialog.c \
- gedit-encodings-dialog.h \
- gedit-search-dialog.h \
- gedit-search-dialog.c
-
-ui_DATA = \
- gedit-encodings-dialog.ui \
- gedit-preferences-dialog.ui \
- gedit-search-dialog.ui
-
-EXTRA_DIST = $(ui_DATA)
-
--include $(top_srcdir)/git.mk
diff --git a/gedit/dialogs/gedit-close-confirmation-dialog.c b/gedit/dialogs/gedit-close-confirmation-dialog.c
deleted file mode 100755
index 36cbf117..00000000
--- a/gedit/dialogs/gedit-close-confirmation-dialog.c
+++ /dev/null
@@ -1,790 +0,0 @@
-/*
- * gedit-close-confirmation-dialog.c
- * This file is part of gedit
- *
- * Copyright (C) 2004-2005 MATE Foundation
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2004-2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <glib/gi18n.h>
-
-#include "gedit-close-confirmation-dialog.h"
-#include <gedit/gedit-app.h>
-#include <gedit/gedit-utils.h>
-#include <gedit/gedit-window.h>
-
-
-/* Properties */
-enum
-{
- PROP_0,
- PROP_UNSAVED_DOCUMENTS,
- PROP_LOGOUT_MODE
-};
-
-/* Mode */
-enum
-{
- SINGLE_DOC_MODE,
- MULTIPLE_DOCS_MODE
-};
-
-/* Columns */
-enum
-{
- SAVE_COLUMN,
- NAME_COLUMN,
- DOC_COLUMN, /* a handy pointer to the document */
- N_COLUMNS
-};
-
-struct _GeditCloseConfirmationDialogPrivate
-{
- gboolean logout_mode;
-
- GList *unsaved_documents;
-
- GList *selected_documents;
-
- GtkTreeModel *list_store;
-
- gboolean disable_save_to_disk;
-};
-
-#define GEDIT_CLOSE_CONFIRMATION_DIALOG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), \
- GEDIT_TYPE_CLOSE_CONFIRMATION_DIALOG, \
- GeditCloseConfirmationDialogPrivate))
-
-#define GET_MODE(priv) (((priv->unsaved_documents != NULL) && \
- (priv->unsaved_documents->next == NULL)) ? \
- SINGLE_DOC_MODE : MULTIPLE_DOCS_MODE)
-
-G_DEFINE_TYPE(GeditCloseConfirmationDialog, gedit_close_confirmation_dialog, GTK_TYPE_DIALOG)
-
-static void set_unsaved_document (GeditCloseConfirmationDialog *dlg,
- const GList *list);
-
-static GList *get_selected_docs (GtkTreeModel *store);
-
-/* Since we connect in the costructor we are sure this handler will be called
- * before the user ones
- */
-static void
-response_cb (GeditCloseConfirmationDialog *dlg,
- gint response_id,
- gpointer data)
-{
- GeditCloseConfirmationDialogPrivate *priv;
-
- g_return_if_fail (GEDIT_IS_CLOSE_CONFIRMATION_DIALOG (dlg));
-
- priv = dlg->priv;
-
- if (priv->selected_documents != NULL)
- g_list_free (priv->selected_documents);
-
- if (response_id == GTK_RESPONSE_YES)
- {
- if (GET_MODE (priv) == SINGLE_DOC_MODE)
- {
- priv->selected_documents =
- g_list_copy (priv->unsaved_documents);
- }
- else
- {
- g_return_if_fail (priv->list_store);
-
- priv->selected_documents =
- get_selected_docs (priv->list_store);
- }
- }
- else
- priv->selected_documents = NULL;
-}
-
-static void
-set_logout_mode (GeditCloseConfirmationDialog *dlg,
- gboolean logout_mode)
-{
- dlg->priv->logout_mode = logout_mode;
-
- if (logout_mode)
- {
- gtk_dialog_add_button (GTK_DIALOG (dlg),
- _("Log Out _without Saving"),
- GTK_RESPONSE_NO);
-
- gedit_dialog_add_button (GTK_DIALOG (dlg),
- _("_Cancel Logout"),
- GTK_STOCK_CANCEL,
- GTK_RESPONSE_CANCEL);
- }
- else
- {
- gtk_dialog_add_button (GTK_DIALOG (dlg),
- _("Close _without Saving"),
- GTK_RESPONSE_NO);
-
- gtk_dialog_add_button (GTK_DIALOG (dlg),
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL);
- }
-
- if (dlg->priv->disable_save_to_disk)
- {
- gtk_dialog_set_default_response (GTK_DIALOG (dlg),
- GTK_RESPONSE_NO);
- }
- else
- {
- const gchar *stock_id = GTK_STOCK_SAVE;
-
- if (GET_MODE (dlg->priv) == SINGLE_DOC_MODE)
- {
- GeditDocument *doc;
-
- doc = GEDIT_DOCUMENT (dlg->priv->unsaved_documents->data);
-
- if (gedit_document_get_readonly (doc) ||
- gedit_document_is_untitled (doc))
- stock_id = GTK_STOCK_SAVE_AS;
- }
-
- gtk_dialog_add_button (GTK_DIALOG (dlg),
- stock_id,
- GTK_RESPONSE_YES);
-
- gtk_dialog_set_default_response (GTK_DIALOG (dlg),
- GTK_RESPONSE_YES);
- }
-}
-
-static void
-gedit_close_confirmation_dialog_init (GeditCloseConfirmationDialog *dlg)
-{
- AtkObject *atk_obj;
-
- dlg->priv = GEDIT_CLOSE_CONFIRMATION_DIALOG_GET_PRIVATE (dlg);
-
- dlg->priv->disable_save_to_disk =
- gedit_app_get_lockdown (gedit_app_get_default ())
- & GEDIT_LOCKDOWN_SAVE_TO_DISK;
-
- gtk_container_set_border_width (GTK_CONTAINER (dlg), 5);
- gtk_box_set_spacing (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dlg))),
- 14);
- gtk_window_set_resizable (GTK_WINDOW (dlg), FALSE);
- gtk_dialog_set_has_separator (GTK_DIALOG (dlg), FALSE);
- gtk_window_set_skip_taskbar_hint (GTK_WINDOW (dlg), TRUE);
-
- gtk_window_set_title (GTK_WINDOW (dlg), "");
-
- gtk_window_set_modal (GTK_WINDOW (dlg), TRUE);
- gtk_window_set_destroy_with_parent (GTK_WINDOW (dlg), TRUE);
-
- atk_obj = gtk_widget_get_accessible (GTK_WIDGET (dlg));
- atk_object_set_role (atk_obj, ATK_ROLE_ALERT);
- atk_object_set_name (atk_obj, _("Question"));
-
- g_signal_connect (dlg,
- "response",
- G_CALLBACK (response_cb),
- NULL);
-}
-
-static void
-gedit_close_confirmation_dialog_finalize (GObject *object)
-{
- GeditCloseConfirmationDialogPrivate *priv;
-
- priv = GEDIT_CLOSE_CONFIRMATION_DIALOG (object)->priv;
-
- if (priv->unsaved_documents != NULL)
- g_list_free (priv->unsaved_documents);
-
- if (priv->selected_documents != NULL)
- g_list_free (priv->selected_documents);
-
- /* Call the parent's destructor */
- G_OBJECT_CLASS (gedit_close_confirmation_dialog_parent_class)->finalize (object);
-}
-
-static void
-gedit_close_confirmation_dialog_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- GeditCloseConfirmationDialog *dlg;
-
- dlg = GEDIT_CLOSE_CONFIRMATION_DIALOG (object);
-
- switch (prop_id)
- {
- case PROP_UNSAVED_DOCUMENTS:
- set_unsaved_document (dlg, g_value_get_pointer (value));
- break;
-
- case PROP_LOGOUT_MODE:
- set_logout_mode (dlg, g_value_get_boolean (value));
- break;
-
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gedit_close_confirmation_dialog_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- GeditCloseConfirmationDialogPrivate *priv;
-
- priv = GEDIT_CLOSE_CONFIRMATION_DIALOG (object)->priv;
-
- switch( prop_id )
- {
- case PROP_UNSAVED_DOCUMENTS:
- g_value_set_pointer (value, priv->unsaved_documents);
- break;
-
- case PROP_LOGOUT_MODE:
- g_value_set_boolean (value, priv->logout_mode);
- break;
-
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gedit_close_confirmation_dialog_class_init (GeditCloseConfirmationDialogClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-
- gobject_class->set_property = gedit_close_confirmation_dialog_set_property;
- gobject_class->get_property = gedit_close_confirmation_dialog_get_property;
- gobject_class->finalize = gedit_close_confirmation_dialog_finalize;
-
- g_type_class_add_private (klass, sizeof (GeditCloseConfirmationDialogPrivate));
-
- g_object_class_install_property (gobject_class,
- PROP_UNSAVED_DOCUMENTS,
- g_param_spec_pointer ("unsaved_documents",
- "Unsaved Documents",
- "List of Unsaved Documents",
- (G_PARAM_READWRITE |
- G_PARAM_CONSTRUCT_ONLY)));
-
- g_object_class_install_property (gobject_class,
- PROP_LOGOUT_MODE,
- g_param_spec_boolean ("logout_mode",
- "Logout Mode",
- "Whether the dialog is in logout mode",
- FALSE,
- (G_PARAM_READWRITE |
- G_PARAM_CONSTRUCT_ONLY)));
-}
-
-static GList *
-get_selected_docs (GtkTreeModel *store)
-{
- GList *list;
- gboolean valid;
- GtkTreeIter iter;
-
- list = NULL;
- valid = gtk_tree_model_get_iter_first (store, &iter);
-
- while (valid)
- {
- gboolean to_save;
- GeditDocument *doc;
-
- gtk_tree_model_get (store, &iter,
- SAVE_COLUMN, &to_save,
- DOC_COLUMN, &doc,
- -1);
- if (to_save)
- list = g_list_prepend (list, doc);
-
- valid = gtk_tree_model_iter_next (store, &iter);
- }
-
- list = g_list_reverse (list);
-
- return list;
-}
-
-GList *
-gedit_close_confirmation_dialog_get_selected_documents (GeditCloseConfirmationDialog *dlg)
-{
- g_return_val_if_fail (GEDIT_IS_CLOSE_CONFIRMATION_DIALOG (dlg), NULL);
-
- return g_list_copy (dlg->priv->selected_documents);
-}
-
-GtkWidget *
-gedit_close_confirmation_dialog_new (GtkWindow *parent,
- GList *unsaved_documents,
- gboolean logout_mode)
-{
- GtkWidget *dlg;
- g_return_val_if_fail (unsaved_documents != NULL, NULL);
-
- dlg = GTK_WIDGET (g_object_new (GEDIT_TYPE_CLOSE_CONFIRMATION_DIALOG,
- "unsaved_documents", unsaved_documents,
- "logout_mode", logout_mode,
- NULL));
- g_return_val_if_fail (dlg != NULL, NULL);
-
- if (parent != NULL)
- {
- gtk_window_group_add_window (gedit_window_get_group (GEDIT_WINDOW (parent)),
- GTK_WINDOW (dlg));
-
- gtk_window_set_transient_for (GTK_WINDOW (dlg), parent);
- }
-
- return dlg;
-}
-
-GtkWidget *
-gedit_close_confirmation_dialog_new_single (GtkWindow *parent,
- GeditDocument *doc,
- gboolean logout_mode)
-{
- GtkWidget *dlg;
- GList *unsaved_documents;
- g_return_val_if_fail (doc != NULL, NULL);
-
- unsaved_documents = g_list_prepend (NULL, doc);
-
- dlg = gedit_close_confirmation_dialog_new (parent,
- unsaved_documents,
- logout_mode);
-
- g_list_free (unsaved_documents);
-
- return dlg;
-}
-
-static gchar *
-get_text_secondary_label (GeditDocument *doc)
-{
- glong seconds;
- gchar *secondary_msg;
-
- seconds = MAX (1, _gedit_document_get_seconds_since_last_save_or_load (doc));
-
- if (seconds < 55)
- {
- secondary_msg = g_strdup_printf (
- ngettext ("If you don't save, changes from the last %ld second "
- "will be permanently lost.",
- "If you don't save, changes from the last %ld seconds "
- "will be permanently lost.",
- seconds),
- seconds);
- }
- else if (seconds < 75) /* 55 <= seconds < 75 */
- {
- secondary_msg = g_strdup (_("If you don't save, changes from the last minute "
- "will be permanently lost."));
- }
- else if (seconds < 110) /* 75 <= seconds < 110 */
- {
- secondary_msg = g_strdup_printf (
- ngettext ("If you don't save, changes from the last minute and %ld "
- "second will be permanently lost.",
- "If you don't save, changes from the last minute and %ld "
- "seconds will be permanently lost.",
- seconds - 60 ),
- seconds - 60);
- }
- else if (seconds < 3600)
- {
- secondary_msg = g_strdup_printf (
- ngettext ("If you don't save, changes from the last %ld minute "
- "will be permanently lost.",
- "If you don't save, changes from the last %ld minutes "
- "will be permanently lost.",
- seconds / 60),
- seconds / 60);
- }
- else if (seconds < 7200)
- {
- gint minutes;
- seconds -= 3600;
-
- minutes = seconds / 60;
- if (minutes < 5)
- {
- secondary_msg = g_strdup (_("If you don't save, changes from the last hour "
- "will be permanently lost."));
- }
- else
- {
- secondary_msg = g_strdup_printf (
- ngettext ("If you don't save, changes from the last hour and %d "
- "minute will be permanently lost.",
- "If you don't save, changes from the last hour and %d "
- "minutes will be permanently lost.",
- minutes),
- minutes);
- }
- }
- else
- {
- gint hours;
-
- hours = seconds / 3600;
-
- secondary_msg = g_strdup_printf (
- ngettext ("If you don't save, changes from the last %d hour "
- "will be permanently lost.",
- "If you don't save, changes from the last %d hours "
- "will be permanently lost.",
- hours),
- hours);
- }
-
- return secondary_msg;
-}
-
-static void
-build_single_doc_dialog (GeditCloseConfirmationDialog *dlg)
-{
- GtkWidget *hbox;
- GtkWidget *vbox;
- GtkWidget *primary_label;
- GtkWidget *secondary_label;
- GtkWidget *image;
- GeditDocument *doc;
- gchar *doc_name;
- gchar *str;
- gchar *markup_str;
-
- g_return_if_fail (dlg->priv->unsaved_documents->data != NULL);
- doc = GEDIT_DOCUMENT (dlg->priv->unsaved_documents->data);
-
- /* Image */
- image = gtk_image_new_from_stock (GTK_STOCK_DIALOG_WARNING,
- GTK_ICON_SIZE_DIALOG);
- gtk_misc_set_alignment (GTK_MISC (image), 0.5, 0.0);
-
- /* Primary label */
- primary_label = gtk_label_new (NULL);
- gtk_label_set_line_wrap (GTK_LABEL (primary_label), TRUE);
- gtk_label_set_use_markup (GTK_LABEL (primary_label), TRUE);
- gtk_misc_set_alignment (GTK_MISC (primary_label), 0.0, 0.5);
- gtk_label_set_selectable (GTK_LABEL (primary_label), TRUE);
-
- doc_name = gedit_document_get_short_name_for_display (doc);
-
- if (dlg->priv->disable_save_to_disk)
- {
- str = g_markup_printf_escaped (_("Changes to document \"%s\" will be permanently lost."),
- doc_name);
- }
- else
- {
- str = g_markup_printf_escaped (_("Save changes to document \"%s\" before closing?"),
- doc_name);
- }
-
- g_free (doc_name);
-
- markup_str = g_strconcat ("<span weight=\"bold\" size=\"larger\">", str, "</span>", NULL);
- g_free (str);
-
- gtk_label_set_markup (GTK_LABEL (primary_label), markup_str);
- g_free (markup_str);
-
- /* Secondary label */
- if (dlg->priv->disable_save_to_disk)
- str = g_strdup (_("Saving has been disabled by the system administrator."));
- else
- str = get_text_secondary_label (doc);
- secondary_label = gtk_label_new (str);
- g_free (str);
- gtk_label_set_line_wrap (GTK_LABEL (secondary_label), TRUE);
- gtk_misc_set_alignment (GTK_MISC (secondary_label), 0.0, 0.5);
- gtk_label_set_selectable (GTK_LABEL (secondary_label), TRUE);
-
- hbox = gtk_hbox_new (FALSE, 12);
- gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
-
- gtk_box_pack_start (GTK_BOX (hbox), image, FALSE, FALSE, 0);
-
- vbox = gtk_vbox_new (FALSE, 12);
-
- gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0);
-
- gtk_box_pack_start (GTK_BOX (vbox), primary_label, FALSE, FALSE, 0);
-
- gtk_box_pack_start (GTK_BOX (vbox), secondary_label, FALSE, FALSE, 0);
-
- gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dlg))),
- hbox,
- FALSE,
- FALSE,
- 0);
-
- gtk_widget_show_all (hbox);
-}
-
-static void
-populate_model (GtkTreeModel *store, GList *docs)
-{
- GtkTreeIter iter;
-
- while (docs != NULL)
- {
- GeditDocument *doc;
- gchar *name;
-
- doc = GEDIT_DOCUMENT (docs->data);
-
- name = gedit_document_get_short_name_for_display (doc);
-
- gtk_list_store_append (GTK_LIST_STORE (store), &iter);
- gtk_list_store_set (GTK_LIST_STORE (store), &iter,
- SAVE_COLUMN, TRUE,
- NAME_COLUMN, name,
- DOC_COLUMN, doc,
- -1);
-
- g_free (name);
-
- docs = g_list_next (docs);
- }
-}
-
-static void
-save_toggled (GtkCellRendererToggle *renderer, gchar *path_str, GtkTreeModel *store)
-{
- GtkTreePath *path = gtk_tree_path_new_from_string (path_str);
- GtkTreeIter iter;
- gboolean active;
-
- gtk_tree_model_get_iter (store, &iter, path);
- gtk_tree_model_get (store, &iter, SAVE_COLUMN, &active, -1);
-
- active ^= 1;
-
- gtk_list_store_set (GTK_LIST_STORE (store), &iter,
- SAVE_COLUMN, active, -1);
-
- gtk_tree_path_free (path);
-}
-
-static GtkWidget *
-create_treeview (GeditCloseConfirmationDialogPrivate *priv)
-{
- GtkListStore *store;
- GtkWidget *treeview;
- GtkCellRenderer *renderer;
- GtkTreeViewColumn *column;
-
- treeview = gtk_tree_view_new ();
- gtk_widget_set_size_request (treeview, 260, 120);
- gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (treeview), FALSE);
- gtk_tree_view_set_enable_search (GTK_TREE_VIEW (treeview), FALSE);
-
- /* Create and populate the model */
- store = gtk_list_store_new (N_COLUMNS, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_POINTER);
- populate_model (GTK_TREE_MODEL (store), priv->unsaved_documents);
-
- /* Set model to the treeview */
- gtk_tree_view_set_model (GTK_TREE_VIEW (treeview), GTK_TREE_MODEL (store));
- g_object_unref (store);
-
- priv->list_store = GTK_TREE_MODEL (store);
-
- /* Add columns */
- if (!priv->disable_save_to_disk)
- {
- renderer = gtk_cell_renderer_toggle_new ();
- g_signal_connect (renderer, "toggled",
- G_CALLBACK (save_toggled), store);
-
- column = gtk_tree_view_column_new_with_attributes ("Save?",
- renderer,
- "active",
- SAVE_COLUMN,
- NULL);
- gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
- }
-
- renderer = gtk_cell_renderer_text_new ();
- column = gtk_tree_view_column_new_with_attributes ("Name",
- renderer,
- "text",
- NAME_COLUMN,
- NULL);
- gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
-
- return treeview;
-}
-
-static void
-build_multiple_docs_dialog (GeditCloseConfirmationDialog *dlg)
-{
- GeditCloseConfirmationDialogPrivate *priv;
- GtkWidget *hbox;
- GtkWidget *image;
- GtkWidget *vbox;
- GtkWidget *primary_label;
- GtkWidget *vbox2;
- GtkWidget *select_label;
- GtkWidget *scrolledwindow;
- GtkWidget *treeview;
- GtkWidget *secondary_label;
- gchar *str;
- gchar *markup_str;
-
- priv = dlg->priv;
-
- hbox = gtk_hbox_new (FALSE, 12);
- gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
- gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dlg))),
- hbox, TRUE, TRUE, 0);
-
- /* Image */
- image = gtk_image_new_from_stock (GTK_STOCK_DIALOG_WARNING,
- GTK_ICON_SIZE_DIALOG);
- gtk_misc_set_alignment (GTK_MISC (image), 0.5, 0.0);
- gtk_box_pack_start (GTK_BOX (hbox), image, FALSE, FALSE, 0);
-
- vbox = gtk_vbox_new (FALSE, 12);
- gtk_box_pack_start (GTK_BOX (hbox), vbox, TRUE, TRUE, 0);
-
- /* Primary label */
- primary_label = gtk_label_new (NULL);
- gtk_label_set_line_wrap (GTK_LABEL (primary_label), TRUE);
- gtk_label_set_use_markup (GTK_LABEL (primary_label), TRUE);
- gtk_misc_set_alignment (GTK_MISC (primary_label), 0.0, 0.5);
- gtk_label_set_selectable (GTK_LABEL (primary_label), TRUE);
-
- if (priv->disable_save_to_disk)
- str = g_strdup_printf (
- ngettext ("Changes to %d document will be permanently lost.",
- "Changes to %d documents will be permanently lost.",
- g_list_length (priv->unsaved_documents)),
- g_list_length (priv->unsaved_documents));
- else
- str = g_strdup_printf (
- ngettext ("There is %d document with unsaved changes. "
- "Save changes before closing?",
- "There are %d documents with unsaved changes. "
- "Save changes before closing?",
- g_list_length (priv->unsaved_documents)),
- g_list_length (priv->unsaved_documents));
-
- markup_str = g_strconcat ("<span weight=\"bold\" size=\"larger\">", str, "</span>", NULL);
- g_free (str);
-
- gtk_label_set_markup (GTK_LABEL (primary_label), markup_str);
- g_free (markup_str);
- gtk_box_pack_start (GTK_BOX (vbox), primary_label, FALSE, FALSE, 0);
-
- vbox2 = gtk_vbox_new (FALSE, 8);
- gtk_box_pack_start (GTK_BOX (vbox), vbox2, FALSE, FALSE, 0);
-
- if (priv->disable_save_to_disk)
- select_label = gtk_label_new_with_mnemonic (_("Docum_ents with unsaved changes:"));
- else
- select_label = gtk_label_new_with_mnemonic (_("S_elect the documents you want to save:"));
-
- gtk_box_pack_start (GTK_BOX (vbox2), select_label, FALSE, FALSE, 0);
- gtk_label_set_line_wrap (GTK_LABEL (select_label), TRUE);
- gtk_misc_set_alignment (GTK_MISC (select_label), 0.0, 0.5);
-
- scrolledwindow = gtk_scrolled_window_new (NULL, NULL);
- gtk_box_pack_start (GTK_BOX (vbox2), scrolledwindow, TRUE, TRUE, 0);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow),
- GTK_POLICY_AUTOMATIC,
- GTK_POLICY_AUTOMATIC);
- gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow),
- GTK_SHADOW_IN);
-
- treeview = create_treeview (priv);
- gtk_container_add (GTK_CONTAINER (scrolledwindow), treeview);
-
- /* Secondary label */
- if (priv->disable_save_to_disk)
- secondary_label = gtk_label_new (_("Saving has been disabled by the system administrator."));
- else
- secondary_label = gtk_label_new (_("If you don't save, "
- "all your changes will be permanently lost."));
-
- gtk_box_pack_start (GTK_BOX (vbox2), secondary_label, FALSE, FALSE, 0);
- gtk_label_set_line_wrap (GTK_LABEL (secondary_label), TRUE);
- gtk_misc_set_alignment (GTK_MISC (secondary_label), 0, 0.5);
- gtk_label_set_selectable (GTK_LABEL (secondary_label), TRUE);
-
- gtk_label_set_mnemonic_widget (GTK_LABEL (select_label), treeview);
-
- gtk_widget_show_all (hbox);
-}
-
-static void
-set_unsaved_document (GeditCloseConfirmationDialog *dlg,
- const GList *list)
-{
- GeditCloseConfirmationDialogPrivate *priv;
-
- g_return_if_fail (list != NULL);
-
- priv = dlg->priv;
- g_return_if_fail (priv->unsaved_documents == NULL);
-
- priv->unsaved_documents = g_list_copy ((GList *)list);
-
- if (GET_MODE (priv) == SINGLE_DOC_MODE)
- {
- build_single_doc_dialog (dlg);
- }
- else
- {
- build_multiple_docs_dialog (dlg);
- }
-}
-
-const GList *
-gedit_close_confirmation_dialog_get_unsaved_documents (GeditCloseConfirmationDialog *dlg)
-{
- g_return_val_if_fail (GEDIT_IS_CLOSE_CONFIRMATION_DIALOG (dlg), NULL);
-
- return dlg->priv->unsaved_documents;
-}
diff --git a/gedit/dialogs/gedit-close-confirmation-dialog.h b/gedit/dialogs/gedit-close-confirmation-dialog.h
deleted file mode 100755
index 887fc1b4..00000000
--- a/gedit/dialogs/gedit-close-confirmation-dialog.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * gedit-close-confirmation-dialog.h
- * This file is part of gedit
- *
- * Copyright (C) 2004-2005 MATE Foundation
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2004-2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- */
-
-#ifndef __GEDIT_CLOSE_CONFIRMATION_DIALOG_H__
-#define __GEDIT_CLOSE_CONFIRMATION_DIALOG_H__
-
-#include <glib.h>
-#include <gtk/gtk.h>
-
-#include <gedit/gedit-document.h>
-
-#define GEDIT_TYPE_CLOSE_CONFIRMATION_DIALOG (gedit_close_confirmation_dialog_get_type ())
-#define GEDIT_CLOSE_CONFIRMATION_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEDIT_TYPE_CLOSE_CONFIRMATION_DIALOG, GeditCloseConfirmationDialog))
-#define GEDIT_CLOSE_CONFIRMATION_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEDIT_TYPE_CLOSE_CONFIRMATION_DIALOG, GeditCloseConfirmationDialogClass))
-#define GEDIT_IS_CLOSE_CONFIRMATION_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEDIT_TYPE_CLOSE_CONFIRMATION_DIALOG))
-#define GEDIT_IS_CLOSE_CONFIRMATION_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEDIT_TYPE_CLOSE_CONFIRMATION_DIALOG))
-#define GEDIT_CLOSE_CONFIRMATION_DIALOG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj),GEDIT_TYPE_CLOSE_CONFIRMATION_DIALOG, GeditCloseConfirmationDialogClass))
-
-typedef struct _GeditCloseConfirmationDialog GeditCloseConfirmationDialog;
-typedef struct _GeditCloseConfirmationDialogClass GeditCloseConfirmationDialogClass;
-typedef struct _GeditCloseConfirmationDialogPrivate GeditCloseConfirmationDialogPrivate;
-
-struct _GeditCloseConfirmationDialog
-{
- GtkDialog parent;
-
- /*< private > */
- GeditCloseConfirmationDialogPrivate *priv;
-};
-
-struct _GeditCloseConfirmationDialogClass
-{
- GtkDialogClass parent_class;
-};
-
-GType gedit_close_confirmation_dialog_get_type (void) G_GNUC_CONST;
-
-GtkWidget *gedit_close_confirmation_dialog_new (GtkWindow *parent,
- GList *unsaved_documents,
- gboolean logout_mode);
-GtkWidget *gedit_close_confirmation_dialog_new_single (GtkWindow *parent,
- GeditDocument *doc,
- gboolean logout_mode);
-
-const GList *gedit_close_confirmation_dialog_get_unsaved_documents (GeditCloseConfirmationDialog *dlg);
-
-GList *gedit_close_confirmation_dialog_get_selected_documents (GeditCloseConfirmationDialog *dlg);
-
-#endif /* __GEDIT_CLOSE_CONFIRMATION_DIALOG_H__ */
-
diff --git a/gedit/dialogs/gedit-encodings-dialog.c b/gedit/dialogs/gedit-encodings-dialog.c
deleted file mode 100755
index b4800805..00000000
--- a/gedit/dialogs/gedit-encodings-dialog.c
+++ /dev/null
@@ -1,499 +0,0 @@
-/*
- * gedit-encodings-dialog.c
- * This file is part of gedit
- *
- * Copyright (C) 2002-2005 Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2002-2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <string.h>
-
-#include <glib.h>
-#include <glib/gi18n.h>
-#include <gtk/gtk.h>
-
-#include "gedit-encodings-dialog.h"
-#include "gedit-encodings.h"
-#include "gedit-prefs-manager.h"
-#include "gedit-utils.h"
-#include "gedit-debug.h"
-#include "gedit-help.h"
-#include "gedit-dirs.h"
-
-#define GEDIT_ENCODINGS_DIALOG_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), \
- GEDIT_TYPE_ENCODINGS_DIALOG, \
- GeditEncodingsDialogPrivate))
-
-struct _GeditEncodingsDialogPrivate
-{
- GtkListStore *available_liststore;
- GtkListStore *displayed_liststore;
- GtkWidget *available_treeview;
- GtkWidget *displayed_treeview;
- GtkWidget *add_button;
- GtkWidget *remove_button;
-
- GSList *show_in_menu_list;
-};
-
-G_DEFINE_TYPE(GeditEncodingsDialog, gedit_encodings_dialog, GTK_TYPE_DIALOG)
-
-static void
-gedit_encodings_dialog_finalize (GObject *object)
-{
- GeditEncodingsDialogPrivate *priv = GEDIT_ENCODINGS_DIALOG (object)->priv;
-
- g_slist_free (priv->show_in_menu_list);
-
- G_OBJECT_CLASS (gedit_encodings_dialog_parent_class)->finalize (object);
-}
-
-static void
-gedit_encodings_dialog_class_init (GeditEncodingsDialogClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->finalize = gedit_encodings_dialog_finalize;
-
- g_type_class_add_private (object_class, sizeof (GeditEncodingsDialogPrivate));
-}
-
-enum {
- COLUMN_NAME,
- COLUMN_CHARSET,
- N_COLUMNS
-};
-
-static void
-count_selected_items_func (GtkTreeModel *model,
- GtkTreePath *path,
- GtkTreeIter *iter,
- gpointer data)
-{
- int *count = data;
-
- *count += 1;
-}
-
-static void
-available_selection_changed_callback (GtkTreeSelection *selection,
- GeditEncodingsDialog *dialogs)
-{
- int count;
-
- count = 0;
- gtk_tree_selection_selected_foreach (selection,
- count_selected_items_func,
- &count);
-
- gtk_widget_set_sensitive (dialogs->priv->add_button, count > 0);
-}
-
-static void
-displayed_selection_changed_callback (GtkTreeSelection *selection,
- GeditEncodingsDialog *dialogs)
-{
- int count;
-
- count = 0;
- gtk_tree_selection_selected_foreach (selection,
- count_selected_items_func,
- &count);
-
- gtk_widget_set_sensitive (dialogs->priv->remove_button, count > 0);
-}
-
-static void
-get_selected_encodings_func (GtkTreeModel *model,
- GtkTreePath *path,
- GtkTreeIter *iter,
- gpointer data)
-{
- GSList **list = data;
- gchar *charset;
- const GeditEncoding *enc;
-
- charset = NULL;
- gtk_tree_model_get (model, iter, COLUMN_CHARSET, &charset, -1);
-
- enc = gedit_encoding_get_from_charset (charset);
- g_free (charset);
-
- *list = g_slist_prepend (*list, (gpointer)enc);
-}
-
-static void
-update_shown_in_menu_tree_model (GtkListStore *store,
- GSList *list)
-{
- GtkTreeIter iter;
-
- gtk_list_store_clear (store);
-
- while (list != NULL)
- {
- const GeditEncoding *enc;
-
- enc = (const GeditEncoding*) list->data;
-
- gtk_list_store_append (store, &iter);
- gtk_list_store_set (store, &iter,
- COLUMN_CHARSET,
- gedit_encoding_get_charset (enc),
- COLUMN_NAME,
- gedit_encoding_get_name (enc), -1);
-
- list = g_slist_next (list);
- }
-}
-
-static void
-add_button_clicked_callback (GtkWidget *button,
- GeditEncodingsDialog *dialog)
-{
- GtkTreeSelection *selection;
- GSList *encodings;
- GSList *tmp;
-
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (dialog->priv->available_treeview));
-
- encodings = NULL;
- gtk_tree_selection_selected_foreach (selection,
- get_selected_encodings_func,
- &encodings);
-
- tmp = encodings;
- while (tmp != NULL)
- {
- if (g_slist_find (dialog->priv->show_in_menu_list, tmp->data) == NULL)
- dialog->priv->show_in_menu_list = g_slist_prepend (dialog->priv->show_in_menu_list,
- tmp->data);
-
- tmp = g_slist_next (tmp);
- }
-
- g_slist_free (encodings);
-
- update_shown_in_menu_tree_model (GTK_LIST_STORE (dialog->priv->displayed_liststore),
- dialog->priv->show_in_menu_list);
-}
-
-static void
-remove_button_clicked_callback (GtkWidget *button,
- GeditEncodingsDialog *dialog)
-{
- GtkTreeSelection *selection;
- GSList *encodings;
- GSList *tmp;
-
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (dialog->priv->displayed_treeview));
-
- encodings = NULL;
- gtk_tree_selection_selected_foreach (selection,
- get_selected_encodings_func,
- &encodings);
-
- tmp = encodings;
- while (tmp != NULL)
- {
- dialog->priv->show_in_menu_list = g_slist_remove (dialog->priv->show_in_menu_list,
- tmp->data);
-
- tmp = g_slist_next (tmp);
- }
-
- g_slist_free (encodings);
-
- update_shown_in_menu_tree_model (GTK_LIST_STORE (dialog->priv->displayed_liststore),
- dialog->priv->show_in_menu_list);
-}
-
-static void
-init_shown_in_menu_tree_model (GeditEncodingsDialog *dialog)
-{
- GtkTreeIter iter;
- GSList *list, *tmp;
-
- /* add data to the list store */
- list = gedit_prefs_manager_get_shown_in_menu_encodings ();
-
- tmp = list;
-
- while (tmp != NULL)
- {
- const GeditEncoding *enc;
-
- enc = (const GeditEncoding *) tmp->data;
-
- dialog->priv->show_in_menu_list = g_slist_prepend (dialog->priv->show_in_menu_list,
- tmp->data);
-
- gtk_list_store_append (dialog->priv->displayed_liststore,
- &iter);
- gtk_list_store_set (dialog->priv->displayed_liststore,
- &iter,
- COLUMN_CHARSET,
- gedit_encoding_get_charset (enc),
- COLUMN_NAME,
- gedit_encoding_get_name (enc), -1);
-
- tmp = g_slist_next (tmp);
- }
-
- g_slist_free (list);
-}
-
-static void
-response_handler (GtkDialog *dialog,
- gint response_id,
- GeditEncodingsDialog *dlg)
-{
- if (response_id == GTK_RESPONSE_HELP)
- {
- gedit_help_display (GTK_WINDOW (dialog), "gedit", NULL);
- g_signal_stop_emission_by_name (dialog, "response");
- return;
- }
-
- if (response_id == GTK_RESPONSE_OK)
- {
- g_return_if_fail (gedit_prefs_manager_shown_in_menu_encodings_can_set ());
- gedit_prefs_manager_set_shown_in_menu_encodings (dlg->priv->show_in_menu_list);
- }
-}
-
-static void
-gedit_encodings_dialog_init (GeditEncodingsDialog *dlg)
-{
- GtkWidget *content;
- GtkCellRenderer *cell_renderer;
- GtkTreeModel *sort_model;
- GtkTreeViewColumn *column;
- GtkTreeIter parent_iter;
- GtkTreeSelection *selection;
- const GeditEncoding *enc;
- GtkWidget *error_widget;
- int i;
- gboolean ret;
- gchar *file;
- gchar *root_objects[] = {
- "encodings-dialog-contents",
- NULL
- };
-
- dlg->priv = GEDIT_ENCODINGS_DIALOG_GET_PRIVATE (dlg);
-
- gtk_dialog_add_buttons (GTK_DIALOG (dlg),
- GTK_STOCK_CANCEL,
- GTK_RESPONSE_CANCEL,
- GTK_STOCK_OK,
- GTK_RESPONSE_OK,
- GTK_STOCK_HELP,
- GTK_RESPONSE_HELP,
- NULL);
-
- gtk_window_set_title (GTK_WINDOW (dlg), _("Character Encodings"));
- gtk_window_set_default_size (GTK_WINDOW (dlg), 650, 400);
- gtk_dialog_set_has_separator (GTK_DIALOG (dlg), FALSE);
-
- /* HIG defaults */
- gtk_container_set_border_width (GTK_CONTAINER (dlg), 5);
- gtk_box_set_spacing (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dlg))),
- 2); /* 2 * 5 + 2 = 12 */
- gtk_container_set_border_width (GTK_CONTAINER (gtk_dialog_get_action_area (GTK_DIALOG (dlg))),
- 5);
- gtk_box_set_spacing (GTK_BOX (gtk_dialog_get_action_area (GTK_DIALOG (dlg))), 6);
-
- gtk_dialog_set_default_response (GTK_DIALOG (dlg),
- GTK_RESPONSE_OK);
-
- g_signal_connect (dlg,
- "response",
- G_CALLBACK (response_handler),
- dlg);
-
- file = gedit_dirs_get_ui_file ("gedit-encodings-dialog.ui");
- ret = gedit_utils_get_ui_objects (file,
- root_objects,
- &error_widget,
- "encodings-dialog-contents", &content,
- "add-button", &dlg->priv->add_button,
- "remove-button", &dlg->priv->remove_button,
- "available-treeview", &dlg->priv->available_treeview,
- "displayed-treeview", &dlg->priv->displayed_treeview,
- NULL);
- g_free (file);
-
- if (!ret)
- {
- gtk_widget_show (error_widget);
-
- gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dlg))),
- error_widget,
- TRUE, TRUE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (error_widget), 5);
-
- return;
- }
-
- gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dlg))),
- content, TRUE, TRUE, 0);
- g_object_unref (content);
- gtk_container_set_border_width (GTK_CONTAINER (content), 5);
-
- g_signal_connect (dlg->priv->add_button,
- "clicked",
- G_CALLBACK (add_button_clicked_callback),
- dlg);
- g_signal_connect (dlg->priv->remove_button,
- "clicked",
- G_CALLBACK (remove_button_clicked_callback),
- dlg);
-
- /* Tree view of available encodings */
- dlg->priv->available_liststore = gtk_list_store_new (N_COLUMNS,
- G_TYPE_STRING,
- G_TYPE_STRING);
-
- cell_renderer = gtk_cell_renderer_text_new ();
- column = gtk_tree_view_column_new_with_attributes (_("_Description"),
- cell_renderer,
- "text", COLUMN_NAME,
- NULL);
- gtk_tree_view_append_column (GTK_TREE_VIEW (dlg->priv->available_treeview),
- column);
- gtk_tree_view_column_set_sort_column_id (column, COLUMN_NAME);
-
- cell_renderer = gtk_cell_renderer_text_new ();
- column = gtk_tree_view_column_new_with_attributes (_("_Encoding"),
- cell_renderer,
- "text",
- COLUMN_CHARSET,
- NULL);
- gtk_tree_view_append_column (GTK_TREE_VIEW (dlg->priv->available_treeview),
- column);
- gtk_tree_view_column_set_sort_column_id (column, COLUMN_CHARSET);
-
- /* Add the data */
- i = 0;
- while ((enc = gedit_encoding_get_from_index (i)) != NULL)
- {
- gtk_list_store_append (dlg->priv->available_liststore,
- &parent_iter);
- gtk_list_store_set (dlg->priv->available_liststore,
- &parent_iter,
- COLUMN_CHARSET,
- gedit_encoding_get_charset (enc),
- COLUMN_NAME,
- gedit_encoding_get_name (enc), -1);
-
- ++i;
- }
-
- /* Sort model */
- sort_model = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (dlg->priv->available_liststore));
- gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sort_model),
- COLUMN_NAME,
- GTK_SORT_ASCENDING);
-
- gtk_tree_view_set_model (GTK_TREE_VIEW (dlg->priv->available_treeview),
- sort_model);
- g_object_unref (G_OBJECT (dlg->priv->available_liststore));
- g_object_unref (G_OBJECT (sort_model));
-
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (dlg->priv->available_treeview));
- gtk_tree_selection_set_mode (GTK_TREE_SELECTION (selection),
- GTK_SELECTION_MULTIPLE);
-
- available_selection_changed_callback (selection, dlg);
- g_signal_connect (selection,
- "changed",
- G_CALLBACK (available_selection_changed_callback),
- dlg);
-
- /* Tree view of selected encodings */
- dlg->priv->displayed_liststore = gtk_list_store_new (N_COLUMNS,
- G_TYPE_STRING,
- G_TYPE_STRING);
-
- cell_renderer = gtk_cell_renderer_text_new ();
- column = gtk_tree_view_column_new_with_attributes (_("_Description"),
- cell_renderer,
- "text", COLUMN_NAME,
- NULL);
- gtk_tree_view_append_column (GTK_TREE_VIEW (dlg->priv->displayed_treeview),
- column);
- gtk_tree_view_column_set_sort_column_id (column, COLUMN_NAME);
-
- cell_renderer = gtk_cell_renderer_text_new ();
- column = gtk_tree_view_column_new_with_attributes (_("_Encoding"),
- cell_renderer,
- "text",
- COLUMN_CHARSET,
- NULL);
- gtk_tree_view_append_column (GTK_TREE_VIEW (dlg->priv->displayed_treeview),
- column);
- gtk_tree_view_column_set_sort_column_id (column, COLUMN_CHARSET);
-
- /* Add the data */
- init_shown_in_menu_tree_model (dlg);
-
- /* Sort model */
- sort_model = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (dlg->priv->displayed_liststore));
-
- gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE
- (sort_model), COLUMN_NAME,
- GTK_SORT_ASCENDING);
-
- gtk_tree_view_set_model (GTK_TREE_VIEW (dlg->priv->displayed_treeview),
- sort_model);
- g_object_unref (G_OBJECT (sort_model));
- g_object_unref (G_OBJECT (dlg->priv->displayed_liststore));
-
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (dlg->priv->displayed_treeview));
- gtk_tree_selection_set_mode (GTK_TREE_SELECTION (selection),
- GTK_SELECTION_MULTIPLE);
-
- displayed_selection_changed_callback (selection, dlg);
- g_signal_connect (selection,
- "changed",
- G_CALLBACK (displayed_selection_changed_callback),
- dlg);
-}
-
-GtkWidget *
-gedit_encodings_dialog_new (void)
-{
- GtkWidget *dlg;
-
- dlg = GTK_WIDGET (g_object_new (GEDIT_TYPE_ENCODINGS_DIALOG, NULL));
-
- return dlg;
-}
-
diff --git a/gedit/dialogs/gedit-encodings-dialog.h b/gedit/dialogs/gedit-encodings-dialog.h
deleted file mode 100755
index a09cbe5c..00000000
--- a/gedit/dialogs/gedit-encodings-dialog.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * gedit-encodings-dialog.h
- * This file is part of gedit
- *
- * Copyright (C) 2003-2005 Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2003-2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifndef __GEDIT_ENCODINGS_DIALOG_H__
-#define __GEDIT_ENCODINGS_DIALOG_H__
-
-#include <gtk/gtk.h>
-
-G_BEGIN_DECLS
-
-/*
- * Type checking and casting macros
- */
-#define GEDIT_TYPE_ENCODINGS_DIALOG (gedit_encodings_dialog_get_type())
-#define GEDIT_ENCODINGS_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GEDIT_TYPE_ENCODINGS_DIALOG, GeditEncodingsDialog))
-#define GEDIT_ENCODINGS_DIALOG_CONST(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GEDIT_TYPE_ENCODINGS_DIALOG, GeditEncodingsDialog const))
-#define GEDIT_ENCODINGS_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GEDIT_TYPE_ENCODINGS_DIALOG, GeditEncodingsDialogClass))
-#define GEDIT_IS_ENCODINGS_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GEDIT_TYPE_ENCODINGS_DIALOG))
-#define GEDIT_IS_ENCODINGS_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEDIT_TYPE_ENCODINGS_DIALOG))
-#define GEDIT_ENCODINGS_DIALOG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GEDIT_TYPE_ENCODINGS_DIALOG, GeditEncodingsDialogClass))
-
-
-/* Private structure type */
-typedef struct _GeditEncodingsDialogPrivate GeditEncodingsDialogPrivate;
-
-/*
- * Main object structure
- */
-typedef struct _GeditEncodingsDialog GeditEncodingsDialog;
-
-struct _GeditEncodingsDialog
-{
- GtkDialog dialog;
-
- /*< private > */
- GeditEncodingsDialogPrivate *priv;
-};
-
-/*
- * Class definition
- */
-typedef struct _GeditEncodingsDialogClass GeditEncodingsDialogClass;
-
-struct _GeditEncodingsDialogClass
-{
- GtkDialogClass parent_class;
-};
-
-/*
- * Public methods
- */
-GType gedit_encodings_dialog_get_type (void) G_GNUC_CONST;
-
-GtkWidget *gedit_encodings_dialog_new (void);
-
-G_END_DECLS
-
-#endif /* __GEDIT_ENCODINGS_DIALOG_H__ */
-
diff --git a/gedit/dialogs/gedit-encodings-dialog.ui b/gedit/dialogs/gedit-encodings-dialog.ui
deleted file mode 100755
index 0f37b432..00000000
--- a/gedit/dialogs/gedit-encodings-dialog.ui
+++ /dev/null
@@ -1,256 +0,0 @@
-<?xml version="1.0"?>
-<!--*- mode: xml -*-->
-<interface>
- <object class="GtkDialog" id="encodings-dialog">
- <property name="width_request">650</property>
- <property name="height_request">400</property>
- <property name="title" translatable="yes">Character encodings</property>
- <property name="type">GTK_WINDOW_TOPLEVEL</property>
- <property name="window_position">GTK_WIN_POS_NONE</property>
- <property name="modal">True</property>
- <property name="resizable">True</property>
- <property name="destroy_with_parent">True</property>
- <property name="has_separator">False</property>
- <child internal-child="vbox">
- <object class="GtkVBox" id="dialog-vbox3">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
- <child internal-child="action_area">
- <object class="GtkHButtonBox" id="dialog-action_area3">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
- <child>
- <object class="GtkButton" id="helpbutton1">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-help</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- </object>
- </child>
- <child>
- <object class="GtkButton" id="closebutton1">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-cancel</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- </object>
- </child>
- <child>
- <object class="GtkButton" id="button1">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-ok</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- </object>
- </child>
- </object>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
- <child>
- <object class="GtkHBox" id="encodings-dialog-contents">
- <property name="border_width">6</property>
- <property name="visible">True</property>
- <property name="homogeneous">True</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkVBox" id="vbox6">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkLabel" id="available-label">
- <property name="visible">True</property>
- <property name="label" translatable="yes">A_vailable encodings:</property>
- <property name="use_underline">True</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="mnemonic_widget">available-treeview</property>
- </object>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- <child>
- <object class="GtkScrolledWindow" id="scrolledwindow2">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
- <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
- <child>
- <object class="GtkTreeView" id="available-treeview">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="headers_visible">True</property>
- <property name="rules_hint">True</property>
- <property name="reorderable">False</property>
- <property name="enable_search">True</property>
- </object>
- </child>
- </object>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- <child>
- <object class="GtkHBox" id="hbox6">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
- <child>
- <object class="GtkButton" id="add-button">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-add</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- </object>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- <child>
- <placeholder/>
- </child>
- </object>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- <child>
- <object class="GtkVBox" id="vbox7">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkLabel" id="displayed-label">
- <property name="visible">True</property>
- <property name="label" translatable="yes">E_ncodings shown in menu:</property>
- <property name="use_underline">True</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="mnemonic_widget">displayed-treeview</property>
- </object>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- <child>
- <object class="GtkScrolledWindow" id="scrolledwindow3">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
- <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
- <child>
- <object class="GtkTreeView" id="displayed-treeview">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="headers_visible">True</property>
- <property name="rules_hint">True</property>
- <property name="reorderable">False</property>
- <property name="enable_search">True</property>
- </object>
- </child>
- </object>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- <child>
- <object class="GtkHBox" id="hbox8">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
- <child>
- <object class="GtkButton" id="remove-button">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-remove</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- </object>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- <child>
- <placeholder/>
- </child>
- </object>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </object>
- </child>
- <action-widgets>
- <action-widget response="-11">helpbutton1</action-widget>
- <action-widget response="-6">closebutton1</action-widget>
- <action-widget response="-5">button1</action-widget>
- </action-widgets>
- </object>
-</interface>
diff --git a/gedit/dialogs/gedit-preferences-dialog.c b/gedit/dialogs/gedit-preferences-dialog.c
deleted file mode 100755
index 52f180fa..00000000
--- a/gedit/dialogs/gedit-preferences-dialog.c
+++ /dev/null
@@ -1,1189 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * gedit-preferences-dialog.c
- * This file is part of gedit
- *
- * Copyright (C) 2001-2005 Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2001-2003. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdio.h>
-#include <string.h>
-
-#include <glib/gi18n.h>
-#include <mateconf/mateconf-client.h>
-
-#include <gedit/gedit-prefs-manager.h>
-
-#include "gedit-preferences-dialog.h"
-#include "gedit-utils.h"
-#include "gedit-debug.h"
-#include "gedit-document.h"
-#include "gedit-style-scheme-manager.h"
-#include "gedit-plugin-manager.h"
-#include "gedit-help.h"
-#include "gedit-dirs.h"
-
-/*
- * gedit-preferences dialog is a singleton since we don't
- * want two dialogs showing an inconsistent state of the
- * preferences.
- * When gedit_show_preferences_dialog is called and there
- * is already a prefs dialog dialog open, it is reparented
- * and shown.
- */
-
-static GtkWidget *preferences_dialog = NULL;
-
-
-enum
-{
- ID_COLUMN = 0,
- NAME_COLUMN,
- DESC_COLUMN,
- NUM_COLUMNS
-};
-
-
-#define GEDIT_PREFERENCES_DIALOG_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), \
- GEDIT_TYPE_PREFERENCES_DIALOG, \
- GeditPreferencesDialogPrivate))
-
-struct _GeditPreferencesDialogPrivate
-{
- GtkWidget *notebook;
-
- /* Font */
- GtkWidget *default_font_checkbutton;
- GtkWidget *font_button;
- GtkWidget *font_hbox;
-
- /* Style Scheme */
- GtkListStore *schemes_treeview_model;
- GtkWidget *schemes_treeview;
- GtkWidget *install_scheme_button;
- GtkWidget *uninstall_scheme_button;
-
- GtkWidget *install_scheme_file_schooser;
-
- /* Tabs */
- GtkWidget *tabs_width_spinbutton;
- GtkWidget *insert_spaces_checkbutton;
- GtkWidget *tabs_width_hbox;
-
- /* Auto indentation */
- GtkWidget *auto_indent_checkbutton;
-
- /* Text Wrapping */
- GtkWidget *wrap_text_checkbutton;
- GtkWidget *split_checkbutton;
-
- /* File Saving */
- GtkWidget *backup_copy_checkbutton;
- GtkWidget *auto_save_checkbutton;
- GtkWidget *auto_save_spinbutton;
- GtkWidget *autosave_hbox;
-
- /* Line numbers */
- GtkWidget *display_line_numbers_checkbutton;
-
- /* Highlight current line */
- GtkWidget *highlight_current_line_checkbutton;
-
- /* Highlight matching bracket */
- GtkWidget *bracket_matching_checkbutton;
-
- /* Right margin */
- GtkWidget *right_margin_checkbutton;
- GtkWidget *right_margin_position_spinbutton;
- GtkWidget *right_margin_position_hbox;
-
- /* Plugins manager */
- GtkWidget *plugin_manager_place_holder;
-
- /* Style Scheme editor dialog */
- GtkWidget *style_scheme_dialog;
-};
-
-
-G_DEFINE_TYPE(GeditPreferencesDialog, gedit_preferences_dialog, GTK_TYPE_DIALOG)
-
-
-static void
-gedit_preferences_dialog_class_init (GeditPreferencesDialogClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- g_type_class_add_private (object_class, sizeof (GeditPreferencesDialogPrivate));
-}
-
-static void
-dialog_response_handler (GtkDialog *dlg,
- gint res_id)
-{
- gedit_debug (DEBUG_PREFS);
-
- switch (res_id)
- {
- case GTK_RESPONSE_HELP:
- gedit_help_display (GTK_WINDOW (dlg),
- NULL,
- "gedit-prefs");
-
- g_signal_stop_emission_by_name (dlg, "response");
-
- break;
-
- default:
- gtk_widget_destroy (GTK_WIDGET(dlg));
- }
-}
-
-static void
-tabs_width_spinbutton_value_changed (GtkSpinButton *spin_button,
- GeditPreferencesDialog *dlg)
-{
- gedit_debug (DEBUG_PREFS);
-
- g_return_if_fail (spin_button == GTK_SPIN_BUTTON (dlg->priv->tabs_width_spinbutton));
-
- gedit_prefs_manager_set_tabs_size (gtk_spin_button_get_value_as_int (spin_button));
-}
-
-static void
-insert_spaces_checkbutton_toggled (GtkToggleButton *button,
- GeditPreferencesDialog *dlg)
-{
- gedit_debug (DEBUG_PREFS);
-
- g_return_if_fail (button == GTK_TOGGLE_BUTTON (dlg->priv->insert_spaces_checkbutton));
-
- gedit_prefs_manager_set_insert_spaces (gtk_toggle_button_get_active (button));
-}
-
-static void
-auto_indent_checkbutton_toggled (GtkToggleButton *button,
- GeditPreferencesDialog *dlg)
-{
- gedit_debug (DEBUG_PREFS);
-
- g_return_if_fail (button == GTK_TOGGLE_BUTTON (dlg->priv->auto_indent_checkbutton));
-
- gedit_prefs_manager_set_auto_indent (gtk_toggle_button_get_active (button));
-}
-
-static void
-auto_save_checkbutton_toggled (GtkToggleButton *button,
- GeditPreferencesDialog *dlg)
-{
- gedit_debug (DEBUG_PREFS);
-
- g_return_if_fail (button == GTK_TOGGLE_BUTTON (dlg->priv->auto_save_checkbutton));
-
- if (gtk_toggle_button_get_active (button))
- {
- gtk_widget_set_sensitive (dlg->priv->auto_save_spinbutton,
- gedit_prefs_manager_auto_save_interval_can_set());
-
- gedit_prefs_manager_set_auto_save (TRUE);
- }
- else
- {
- gtk_widget_set_sensitive (dlg->priv->auto_save_spinbutton, FALSE);
- gedit_prefs_manager_set_auto_save (FALSE);
- }
-}
-
-static void
-backup_copy_checkbutton_toggled (GtkToggleButton *button,
- GeditPreferencesDialog *dlg)
-{
- gedit_debug (DEBUG_PREFS);
-
- g_return_if_fail (button == GTK_TOGGLE_BUTTON (dlg->priv->backup_copy_checkbutton));
-
- gedit_prefs_manager_set_create_backup_copy (gtk_toggle_button_get_active (button));
-}
-
-static void
-auto_save_spinbutton_value_changed (GtkSpinButton *spin_button,
- GeditPreferencesDialog *dlg)
-{
- g_return_if_fail (spin_button == GTK_SPIN_BUTTON (dlg->priv->auto_save_spinbutton));
-
- gedit_prefs_manager_set_auto_save_interval (
- MAX (1, gtk_spin_button_get_value_as_int (spin_button)));
-}
-
-static void
-setup_editor_page (GeditPreferencesDialog *dlg)
-{
- gboolean auto_save;
- gint auto_save_interval;
-
- gedit_debug (DEBUG_PREFS);
-
- /* Set initial state */
- gtk_spin_button_set_value (GTK_SPIN_BUTTON (dlg->priv->tabs_width_spinbutton),
- (guint) gedit_prefs_manager_get_tabs_size ());
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dlg->priv->insert_spaces_checkbutton),
- gedit_prefs_manager_get_insert_spaces ());
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dlg->priv->auto_indent_checkbutton),
- gedit_prefs_manager_get_auto_indent ());
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dlg->priv->backup_copy_checkbutton),
- gedit_prefs_manager_get_create_backup_copy ());
-
- auto_save = gedit_prefs_manager_get_auto_save ();
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dlg->priv->auto_save_checkbutton),
- auto_save);
-
- auto_save_interval = gedit_prefs_manager_get_auto_save_interval ();
- if (auto_save_interval <= 0)
- auto_save_interval = GPM_DEFAULT_AUTO_SAVE_INTERVAL;
-
- gtk_spin_button_set_value (GTK_SPIN_BUTTON (dlg->priv->auto_save_spinbutton),
- auto_save_interval);
-
- /* Set widget sensitivity */
- gtk_widget_set_sensitive (dlg->priv->tabs_width_hbox,
- gedit_prefs_manager_tabs_size_can_set ());
- gtk_widget_set_sensitive (dlg->priv->insert_spaces_checkbutton,
- gedit_prefs_manager_insert_spaces_can_set ());
- gtk_widget_set_sensitive (dlg->priv->auto_indent_checkbutton,
- gedit_prefs_manager_auto_indent_can_set ());
- gtk_widget_set_sensitive (dlg->priv->backup_copy_checkbutton,
- gedit_prefs_manager_create_backup_copy_can_set ());
- gtk_widget_set_sensitive (dlg->priv->autosave_hbox,
- gedit_prefs_manager_auto_save_can_set ());
- gtk_widget_set_sensitive (dlg->priv->auto_save_spinbutton,
- auto_save &&
- gedit_prefs_manager_auto_save_interval_can_set ());
-
- /* Connect signal */
- g_signal_connect (dlg->priv->tabs_width_spinbutton,
- "value_changed",
- G_CALLBACK (tabs_width_spinbutton_value_changed),
- dlg);
- g_signal_connect (dlg->priv->insert_spaces_checkbutton,
- "toggled",
- G_CALLBACK (insert_spaces_checkbutton_toggled),
- dlg);
- g_signal_connect (dlg->priv->auto_indent_checkbutton,
- "toggled",
- G_CALLBACK (auto_indent_checkbutton_toggled),
- dlg);
- g_signal_connect (dlg->priv->auto_save_checkbutton,
- "toggled",
- G_CALLBACK (auto_save_checkbutton_toggled),
- dlg);
- g_signal_connect (dlg->priv->backup_copy_checkbutton,
- "toggled",
- G_CALLBACK (backup_copy_checkbutton_toggled),
- dlg);
- g_signal_connect (dlg->priv->auto_save_spinbutton,
- "value_changed",
- G_CALLBACK (auto_save_spinbutton_value_changed),
- dlg);
-}
-
-static void
-display_line_numbers_checkbutton_toggled (GtkToggleButton *button,
- GeditPreferencesDialog *dlg)
-{
- g_return_if_fail (button ==
- GTK_TOGGLE_BUTTON (dlg->priv->display_line_numbers_checkbutton));
-
- gedit_prefs_manager_set_display_line_numbers (gtk_toggle_button_get_active (button));
-}
-
-static void
-highlight_current_line_checkbutton_toggled (GtkToggleButton *button,
- GeditPreferencesDialog *dlg)
-{
- g_return_if_fail (button ==
- GTK_TOGGLE_BUTTON (dlg->priv->highlight_current_line_checkbutton));
-
- gedit_prefs_manager_set_highlight_current_line (gtk_toggle_button_get_active (button));
-}
-
-static void
-bracket_matching_checkbutton_toggled (GtkToggleButton *button,
- GeditPreferencesDialog *dlg)
-{
- g_return_if_fail (button ==
- GTK_TOGGLE_BUTTON (dlg->priv->bracket_matching_checkbutton));
-
- gedit_prefs_manager_set_bracket_matching (
- gtk_toggle_button_get_active (button));
-}
-
-static gboolean split_button_state = TRUE;
-
-static void
-wrap_mode_checkbutton_toggled (GtkToggleButton *button,
- GeditPreferencesDialog *dlg)
-{
- if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dlg->priv->wrap_text_checkbutton)))
- {
- gedit_prefs_manager_set_wrap_mode (GTK_WRAP_NONE);
-
- gtk_widget_set_sensitive (dlg->priv->split_checkbutton,
- FALSE);
- gtk_toggle_button_set_inconsistent (
- GTK_TOGGLE_BUTTON (dlg->priv->split_checkbutton), TRUE);
- }
- else
- {
- gtk_widget_set_sensitive (dlg->priv->split_checkbutton,
- TRUE);
-
- gtk_toggle_button_set_inconsistent (
- GTK_TOGGLE_BUTTON (dlg->priv->split_checkbutton), FALSE);
-
-
- if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dlg->priv->split_checkbutton)))
- {
- split_button_state = TRUE;
-
- gedit_prefs_manager_set_wrap_mode (GTK_WRAP_WORD);
- }
- else
- {
- split_button_state = FALSE;
-
- gedit_prefs_manager_set_wrap_mode (GTK_WRAP_CHAR);
- }
- }
-}
-
-static void
-right_margin_checkbutton_toggled (GtkToggleButton *button,
- GeditPreferencesDialog *dlg)
-{
- gboolean active;
-
- g_return_if_fail (button == GTK_TOGGLE_BUTTON (dlg->priv->right_margin_checkbutton));
-
- active = gtk_toggle_button_get_active (button);
-
- gedit_prefs_manager_set_display_right_margin (active);
-
- gtk_widget_set_sensitive (dlg->priv->right_margin_position_hbox,
- active &&
- gedit_prefs_manager_right_margin_position_can_set ());
-}
-
-static void
-right_margin_position_spinbutton_value_changed (GtkSpinButton *spin_button,
- GeditPreferencesDialog *dlg)
-{
- gint value;
-
- g_return_if_fail (spin_button == GTK_SPIN_BUTTON (dlg->priv->right_margin_position_spinbutton));
-
- value = CLAMP (gtk_spin_button_get_value_as_int (spin_button), 1, 160);
-
- gedit_prefs_manager_set_right_margin_position (value);
-}
-
-static void
-setup_view_page (GeditPreferencesDialog *dlg)
-{
- GtkWrapMode wrap_mode;
- gboolean display_right_margin;
- gboolean wrap_mode_can_set;
-
- gedit_debug (DEBUG_PREFS);
-
- /* Set initial state */
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dlg->priv->display_line_numbers_checkbutton),
- gedit_prefs_manager_get_display_line_numbers ());
-
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dlg->priv->highlight_current_line_checkbutton),
- gedit_prefs_manager_get_highlight_current_line ());
-
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dlg->priv->bracket_matching_checkbutton),
- gedit_prefs_manager_get_bracket_matching ());
-
- wrap_mode = gedit_prefs_manager_get_wrap_mode ();
- switch (wrap_mode )
- {
- case GTK_WRAP_WORD:
- gtk_toggle_button_set_active (
- GTK_TOGGLE_BUTTON (dlg->priv->wrap_text_checkbutton), TRUE);
- gtk_toggle_button_set_active (
- GTK_TOGGLE_BUTTON (dlg->priv->split_checkbutton), TRUE);
- break;
- case GTK_WRAP_CHAR:
- gtk_toggle_button_set_active (
- GTK_TOGGLE_BUTTON (dlg->priv->wrap_text_checkbutton), TRUE);
- gtk_toggle_button_set_active (
- GTK_TOGGLE_BUTTON (dlg->priv->split_checkbutton), FALSE);
- break;
- default:
- gtk_toggle_button_set_active (
- GTK_TOGGLE_BUTTON (dlg->priv->wrap_text_checkbutton), FALSE);
- gtk_toggle_button_set_active (
- GTK_TOGGLE_BUTTON (dlg->priv->split_checkbutton), split_button_state);
- gtk_toggle_button_set_inconsistent (
- GTK_TOGGLE_BUTTON (dlg->priv->split_checkbutton), TRUE);
-
- }
-
- display_right_margin = gedit_prefs_manager_get_display_right_margin ();
-
- gtk_toggle_button_set_active (
- GTK_TOGGLE_BUTTON (dlg->priv->right_margin_checkbutton),
- display_right_margin);
-
- gtk_spin_button_set_value (
- GTK_SPIN_BUTTON (dlg->priv->right_margin_position_spinbutton),
- (guint)CLAMP (gedit_prefs_manager_get_right_margin_position (), 1, 160));
-
- /* Set widgets sensitivity */
- gtk_widget_set_sensitive (dlg->priv->display_line_numbers_checkbutton,
- gedit_prefs_manager_display_line_numbers_can_set ());
- gtk_widget_set_sensitive (dlg->priv->highlight_current_line_checkbutton,
- gedit_prefs_manager_highlight_current_line_can_set ());
- gtk_widget_set_sensitive (dlg->priv->bracket_matching_checkbutton,
- gedit_prefs_manager_bracket_matching_can_set ());
- wrap_mode_can_set = gedit_prefs_manager_wrap_mode_can_set ();
- gtk_widget_set_sensitive (dlg->priv->wrap_text_checkbutton,
- wrap_mode_can_set);
- gtk_widget_set_sensitive (dlg->priv->split_checkbutton,
- wrap_mode_can_set &&
- (wrap_mode != GTK_WRAP_NONE));
- gtk_widget_set_sensitive (dlg->priv->right_margin_checkbutton,
- gedit_prefs_manager_display_right_margin_can_set ());
- gtk_widget_set_sensitive (dlg->priv->right_margin_position_hbox,
- display_right_margin &&
- gedit_prefs_manager_right_margin_position_can_set ());
-
- /* Connect signals */
- g_signal_connect (dlg->priv->display_line_numbers_checkbutton,
- "toggled",
- G_CALLBACK (display_line_numbers_checkbutton_toggled),
- dlg);
- g_signal_connect (dlg->priv->highlight_current_line_checkbutton,
- "toggled",
- G_CALLBACK (highlight_current_line_checkbutton_toggled),
- dlg);
- g_signal_connect (dlg->priv->bracket_matching_checkbutton,
- "toggled",
- G_CALLBACK (bracket_matching_checkbutton_toggled),
- dlg);
- g_signal_connect (dlg->priv->wrap_text_checkbutton,
- "toggled",
- G_CALLBACK (wrap_mode_checkbutton_toggled),
- dlg);
- g_signal_connect (dlg->priv->split_checkbutton,
- "toggled",
- G_CALLBACK (wrap_mode_checkbutton_toggled),
- dlg);
- g_signal_connect (dlg->priv->right_margin_checkbutton,
- "toggled",
- G_CALLBACK (right_margin_checkbutton_toggled),
- dlg);
- g_signal_connect (dlg->priv->right_margin_position_spinbutton,
- "value_changed",
- G_CALLBACK (right_margin_position_spinbutton_value_changed),
- dlg);
-}
-
-static void
-default_font_font_checkbutton_toggled (GtkToggleButton *button,
- GeditPreferencesDialog *dlg)
-{
- gedit_debug (DEBUG_PREFS);
-
- g_return_if_fail (button == GTK_TOGGLE_BUTTON (dlg->priv->default_font_checkbutton));
-
- if (gtk_toggle_button_get_active (button))
- {
- gtk_widget_set_sensitive (dlg->priv->font_hbox, FALSE);
- gedit_prefs_manager_set_use_default_font (TRUE);
- }
- else
- {
- gtk_widget_set_sensitive (dlg->priv->font_hbox,
- gedit_prefs_manager_editor_font_can_set ());
- gedit_prefs_manager_set_use_default_font (FALSE);
- }
-}
-
-static void
-editor_font_button_font_set (GtkFontButton *font_button,
- GeditPreferencesDialog *dlg)
-{
- const gchar *font_name;
-
- gedit_debug (DEBUG_PREFS);
-
- g_return_if_fail (font_button == GTK_FONT_BUTTON (dlg->priv->font_button));
-
- /* FIXME: Can this fail? Gtk docs are a bit terse... 21-02-2004 pbor */
- font_name = gtk_font_button_get_font_name (font_button);
- if (!font_name)
- {
- g_warning ("Could not get font name");
- return;
- }
-
- gedit_prefs_manager_set_editor_font (font_name);
-}
-
-static void
-setup_font_colors_page_font_section (GeditPreferencesDialog *dlg)
-{
- gboolean use_default_font;
- gchar *editor_font = NULL;
- gchar *label;
-
- gedit_debug (DEBUG_PREFS);
-
- gtk_widget_set_tooltip_text (dlg->priv->font_button,
- _("Click on this button to select the font to be used by the editor"));
-
- gedit_utils_set_atk_relation (dlg->priv->font_button,
- dlg->priv->default_font_checkbutton,
- ATK_RELATION_CONTROLLED_BY);
- gedit_utils_set_atk_relation (dlg->priv->default_font_checkbutton,
- dlg->priv->font_button,
- ATK_RELATION_CONTROLLER_FOR);
-
- editor_font = gedit_prefs_manager_get_system_font ();
- label = g_strdup_printf(_("_Use the system fixed width font (%s)"),
- editor_font);
- gtk_button_set_label (GTK_BUTTON (dlg->priv->default_font_checkbutton),
- label);
- g_free (editor_font);
- g_free (label);
-
- /* read current config and setup initial state */
- use_default_font = gedit_prefs_manager_get_use_default_font ();
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dlg->priv->default_font_checkbutton),
- use_default_font);
-
- editor_font = gedit_prefs_manager_get_editor_font ();
- if (editor_font != NULL)
- {
- gtk_font_button_set_font_name (GTK_FONT_BUTTON (dlg->priv->font_button),
- editor_font);
- g_free (editor_font);
- }
-
- /* Connect signals */
- g_signal_connect (dlg->priv->default_font_checkbutton,
- "toggled",
- G_CALLBACK (default_font_font_checkbutton_toggled),
- dlg);
- g_signal_connect (dlg->priv->font_button,
- "font_set",
- G_CALLBACK (editor_font_button_font_set),
- dlg);
-
- /* Set initial widget sensitivity */
- gtk_widget_set_sensitive (dlg->priv->default_font_checkbutton,
- gedit_prefs_manager_use_default_font_can_set ());
-
- if (use_default_font)
- gtk_widget_set_sensitive (dlg->priv->font_hbox, FALSE);
- else
- gtk_widget_set_sensitive (dlg->priv->font_hbox,
- gedit_prefs_manager_editor_font_can_set ());
-}
-
-static void
-set_buttons_sensisitivity_according_to_scheme (GeditPreferencesDialog *dlg,
- const gchar *scheme_id)
-{
- gboolean editable;
-
- editable = (scheme_id != NULL) &&
- _gedit_style_scheme_manager_scheme_is_gedit_user_scheme (
- gedit_get_style_scheme_manager (),
- scheme_id);
-
- gtk_widget_set_sensitive (dlg->priv->uninstall_scheme_button,
- editable);
-}
-
-static void
-style_scheme_changed (GtkWidget *treeview,
- GeditPreferencesDialog *dlg)
-{
- GtkTreePath *path;
- GtkTreeIter iter;
- gchar *id;
-
- gtk_tree_view_get_cursor (GTK_TREE_VIEW (dlg->priv->schemes_treeview), &path, NULL);
- gtk_tree_model_get_iter (GTK_TREE_MODEL (dlg->priv->schemes_treeview_model),
- &iter, path);
- gtk_tree_path_free (path);
- gtk_tree_model_get (GTK_TREE_MODEL (dlg->priv->schemes_treeview_model),
- &iter, ID_COLUMN, &id, -1);
-
- gedit_prefs_manager_set_source_style_scheme (id);
-
- set_buttons_sensisitivity_according_to_scheme (dlg, id);
-
- g_free (id);
-}
-
-static const gchar *
-ensure_color_scheme_id (const gchar *id)
-{
- GtkSourceStyleScheme *scheme = NULL;
- GtkSourceStyleSchemeManager *manager = gedit_get_style_scheme_manager ();
-
- if (id == NULL)
- {
- gchar *pref_id;
-
- pref_id = gedit_prefs_manager_get_source_style_scheme ();
- scheme = gtk_source_style_scheme_manager_get_scheme (manager,
- pref_id);
- g_free (pref_id);
- }
- else
- {
- scheme = gtk_source_style_scheme_manager_get_scheme (manager,
- id);
- }
-
- if (scheme == NULL)
- {
- /* Fall-back to classic style scheme */
- scheme = gtk_source_style_scheme_manager_get_scheme (manager,
- "classic");
- }
-
- if (scheme == NULL)
- {
- /* Cannot determine default style scheme -> broken GtkSourceView installation */
- return NULL;
- }
-
- return gtk_source_style_scheme_get_id (scheme);
-}
-
-/* If def_id is NULL, use the default scheme as returned by
- * gedit_style_scheme_manager_get_default_scheme. If this one returns NULL
- * use the first available scheme as default */
-static const gchar *
-populate_color_scheme_list (GeditPreferencesDialog *dlg, const gchar *def_id)
-{
- GSList *schemes;
- GSList *l;
-
- gtk_list_store_clear (dlg->priv->schemes_treeview_model);
-
- def_id = ensure_color_scheme_id (def_id);
- if (def_id == NULL)
- {
- g_warning ("Cannot build the list of available color schemes.\n"
- "Please check your GtkSourceView installation.");
- return NULL;
- }
-
- schemes = gedit_style_scheme_manager_list_schemes_sorted (gedit_get_style_scheme_manager ());
- l = schemes;
- while (l != NULL)
- {
- GtkSourceStyleScheme *scheme;
- const gchar *id;
- const gchar *name;
- const gchar *description;
- GtkTreeIter iter;
-
- scheme = GTK_SOURCE_STYLE_SCHEME (l->data);
-
- id = gtk_source_style_scheme_get_id (scheme);
- name = gtk_source_style_scheme_get_name (scheme);
- description = gtk_source_style_scheme_get_description (scheme);
-
- gtk_list_store_append (dlg->priv->schemes_treeview_model, &iter);
- gtk_list_store_set (dlg->priv->schemes_treeview_model,
- &iter,
- ID_COLUMN, id,
- NAME_COLUMN, name,
- DESC_COLUMN, description,
- -1);
-
- g_return_val_if_fail (def_id != NULL, NULL);
- if (strcmp (id, def_id) == 0)
- {
- GtkTreeSelection *selection;
-
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (dlg->priv->schemes_treeview));
- gtk_tree_selection_select_iter (selection, &iter);
- }
-
- l = g_slist_next (l);
- }
-
- g_slist_free (schemes);
-
- return def_id;
-}
-
-static void
-add_scheme_chooser_response_cb (GtkDialog *chooser,
- gint res_id,
- GeditPreferencesDialog *dlg)
-{
- gchar* filename;
- const gchar *scheme_id;
-
- if (res_id != GTK_RESPONSE_ACCEPT)
- {
- gtk_widget_hide (GTK_WIDGET (chooser));
- return;
- }
-
- filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (chooser));
- if (filename == NULL)
- return;
-
- gtk_widget_hide (GTK_WIDGET (chooser));
-
- scheme_id = _gedit_style_scheme_manager_install_scheme (
- gedit_get_style_scheme_manager (),
- filename);
- g_free (filename);
-
- if (scheme_id == NULL)
- {
- gedit_warning (GTK_WINDOW (dlg),
- _("The selected color scheme cannot be installed."));
-
- return;
- }
-
- gedit_prefs_manager_set_source_style_scheme (scheme_id);
-
- scheme_id = populate_color_scheme_list (dlg, scheme_id);
-
- set_buttons_sensisitivity_according_to_scheme (dlg, scheme_id);
-}
-
-static void
-install_scheme_clicked (GtkButton *button,
- GeditPreferencesDialog *dlg)
-{
- GtkWidget *chooser;
- GtkFileFilter *filter;
-
- if (dlg->priv->install_scheme_file_schooser != NULL) {
- gtk_window_present (GTK_WINDOW (dlg->priv->install_scheme_file_schooser));
- gtk_widget_grab_focus (dlg->priv->install_scheme_file_schooser);
- return;
- }
-
- chooser = gtk_file_chooser_dialog_new (_("Add Scheme"),
- GTK_WINDOW (dlg),
- GTK_FILE_CHOOSER_ACTION_OPEN,
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- NULL);
-
- gedit_dialog_add_button (GTK_DIALOG (chooser),
- _("A_dd Scheme"),
- GTK_STOCK_ADD,
- GTK_RESPONSE_ACCEPT);
-
- gtk_window_set_destroy_with_parent (GTK_WINDOW (chooser), TRUE);
-
- /* Filters */
- filter = gtk_file_filter_new ();
- gtk_file_filter_set_name (filter, _("Color Scheme Files"));
- gtk_file_filter_add_pattern (filter, "*.xml");
- gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (chooser), filter);
-
- gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (chooser), filter);
-
- filter = gtk_file_filter_new ();
- gtk_file_filter_set_name (filter, _("All Files"));
- gtk_file_filter_add_pattern (filter, "*");
- gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (chooser), filter);
-
- gtk_dialog_set_default_response (GTK_DIALOG (chooser), GTK_RESPONSE_ACCEPT);
-
- g_signal_connect (chooser,
- "response",
- G_CALLBACK (add_scheme_chooser_response_cb),
- dlg);
-
- dlg->priv->install_scheme_file_schooser = chooser;
-
- g_object_add_weak_pointer (G_OBJECT (chooser),
- (gpointer) &dlg->priv->install_scheme_file_schooser);
-
- gtk_widget_show (chooser);
-}
-
-static void
-uninstall_scheme_clicked (GtkButton *button,
- GeditPreferencesDialog *dlg)
-{
- GtkTreeSelection *selection;
- GtkTreeModel *model;
- GtkTreeIter iter;
-
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (dlg->priv->schemes_treeview));
- model = GTK_TREE_MODEL (dlg->priv->schemes_treeview_model);
-
- if (gtk_tree_selection_get_selected (selection,
- &model,
- &iter))
- {
- gchar *id;
- gchar *name;
-
- gtk_tree_model_get (model, &iter,
- ID_COLUMN, &id,
- NAME_COLUMN, &name,
- -1);
-
- if (!_gedit_style_scheme_manager_uninstall_scheme (gedit_get_style_scheme_manager (), id))
- {
- gedit_warning (GTK_WINDOW (dlg),
- _("Could not remove color scheme \"%s\"."),
- name);
- }
- else
- {
- const gchar *real_new_id;
- gchar *new_id = NULL;
- GtkTreePath *path;
- GtkTreeIter new_iter;
- gboolean new_iter_set = FALSE;
-
- /* If the removed style scheme is the last of the list,
- * set as new default style scheme the previous one,
- * otherwise set the next one.
- * To make this possible, we need to get the id of the
- * new default style scheme before re-populating the list.
- * Fall back to "classic" if it is not possible to get
- * the id
- */
- path = gtk_tree_model_get_path (model, &iter);
-
- /* Try to move to the next path */
- gtk_tree_path_next (path);
- if (!gtk_tree_model_get_iter (model, &new_iter, path))
- {
- /* It seems the removed style scheme was the
- * last of the list. Try to move to the
- * previous one */
- gtk_tree_path_free (path);
-
- path = gtk_tree_model_get_path (model, &iter);
-
- gtk_tree_path_prev (path);
- if (gtk_tree_model_get_iter (model, &new_iter, path))
- new_iter_set = TRUE;
- }
- else
- new_iter_set = TRUE;
-
- gtk_tree_path_free (path);
-
- if (new_iter_set)
- gtk_tree_model_get (model, &new_iter,
- ID_COLUMN, &new_id,
- -1);
-
- real_new_id = populate_color_scheme_list (dlg, new_id);
- g_free (new_id);
-
- set_buttons_sensisitivity_according_to_scheme (dlg, real_new_id);
-
- if (real_new_id != NULL)
- gedit_prefs_manager_set_source_style_scheme (real_new_id);
- }
-
- g_free (id);
- g_free (name);
- }
-}
-
-static void
-scheme_description_cell_data_func (GtkTreeViewColumn *column,
- GtkCellRenderer *renderer,
- GtkTreeModel *model,
- GtkTreeIter *iter,
- gpointer data)
-{
- gchar *name;
- gchar *desc;
- gchar *text;
-
- gtk_tree_model_get (model, iter,
- NAME_COLUMN, &name,
- DESC_COLUMN, &desc,
- -1);
-
- if (desc != NULL)
- {
- text = g_markup_printf_escaped ("<b>%s</b> - %s",
- name,
- desc);
- }
- else
- {
- text = g_markup_printf_escaped ("<b>%s</b>",
- name);
- }
-
- g_free (name);
- g_free (desc);
-
- g_object_set (G_OBJECT (renderer),
- "markup",
- text,
- NULL);
-
- g_free (text);
-}
-
-static void
-setup_font_colors_page_style_scheme_section (GeditPreferencesDialog *dlg)
-{
- GtkCellRenderer *renderer;
- GtkTreeViewColumn *column;
- GtkTreeSelection *selection;
- const gchar *def_id;
-
- gedit_debug (DEBUG_PREFS);
-
- /* Create GtkListStore for styles & setup treeview. */
- dlg->priv->schemes_treeview_model = gtk_list_store_new (NUM_COLUMNS,
- G_TYPE_STRING,
- G_TYPE_STRING,
- G_TYPE_STRING,
- G_TYPE_STRING);
-
- gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (dlg->priv->schemes_treeview_model),
- 0,
- GTK_SORT_ASCENDING);
- gtk_tree_view_set_model (GTK_TREE_VIEW (dlg->priv->schemes_treeview),
- GTK_TREE_MODEL (dlg->priv->schemes_treeview_model));
-
- column = gtk_tree_view_column_new ();
-
- renderer = gtk_cell_renderer_text_new ();
- g_object_set (renderer, "ellipsize", PANGO_ELLIPSIZE_END, NULL);
- gtk_tree_view_column_pack_start (column, renderer, TRUE);
- gtk_tree_view_column_set_cell_data_func (column,
- renderer,
- scheme_description_cell_data_func,
- dlg,
- NULL);
-
- gtk_tree_view_append_column (GTK_TREE_VIEW (dlg->priv->schemes_treeview),
- column);
-
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (dlg->priv->schemes_treeview));
- gtk_tree_selection_set_mode (selection, GTK_SELECTION_BROWSE);
-
- def_id = populate_color_scheme_list (dlg, NULL);
-
- /* Connect signals */
- g_signal_connect (dlg->priv->schemes_treeview,
- "cursor-changed",
- G_CALLBACK (style_scheme_changed),
- dlg);
- g_signal_connect (dlg->priv->install_scheme_button,
- "clicked",
- G_CALLBACK (install_scheme_clicked),
- dlg);
- g_signal_connect (dlg->priv->uninstall_scheme_button,
- "clicked",
- G_CALLBACK (uninstall_scheme_clicked),
- dlg);
-
- /* Set initial widget sensitivity */
- set_buttons_sensisitivity_according_to_scheme (dlg, def_id);
-}
-
-static void
-setup_font_colors_page (GeditPreferencesDialog *dlg)
-{
- setup_font_colors_page_font_section (dlg);
- setup_font_colors_page_style_scheme_section (dlg);
-}
-
-static void
-setup_plugins_page (GeditPreferencesDialog *dlg)
-{
- GtkWidget *page_content;
-
- gedit_debug (DEBUG_PREFS);
-
- page_content = gedit_plugin_manager_new ();
- g_return_if_fail (page_content != NULL);
-
- gtk_box_pack_start (GTK_BOX (dlg->priv->plugin_manager_place_holder),
- page_content,
- TRUE,
- TRUE,
- 0);
-
- gtk_widget_show_all (page_content);
-}
-
-static void
-gedit_preferences_dialog_init (GeditPreferencesDialog *dlg)
-{
- GtkWidget *error_widget;
- gboolean ret;
- gchar *file;
- gchar *root_objects[] = {
- "notebook",
- "adjustment1",
- "adjustment2",
- "adjustment3",
- "install_scheme_image",
- NULL
- };
-
- gedit_debug (DEBUG_PREFS);
-
- dlg->priv = GEDIT_PREFERENCES_DIALOG_GET_PRIVATE (dlg);
-
- gtk_dialog_add_buttons (GTK_DIALOG (dlg),
- GTK_STOCK_CLOSE,
- GTK_RESPONSE_CLOSE,
- GTK_STOCK_HELP,
- GTK_RESPONSE_HELP,
- NULL);
-
- gtk_window_set_title (GTK_WINDOW (dlg), _("gedit Preferences"));
- gtk_window_set_resizable (GTK_WINDOW (dlg), FALSE);
- gtk_dialog_set_has_separator (GTK_DIALOG (dlg), FALSE);
- gtk_window_set_destroy_with_parent (GTK_WINDOW (dlg), TRUE);
-
- /* HIG defaults */
- gtk_container_set_border_width (GTK_CONTAINER (dlg), 5);
- gtk_box_set_spacing (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dlg))), 2); /* 2 * 5 + 2 = 12 */
- gtk_container_set_border_width (GTK_CONTAINER (gtk_dialog_get_action_area (GTK_DIALOG (dlg))), 5);
- gtk_box_set_spacing (GTK_BOX (gtk_dialog_get_action_area (GTK_DIALOG (dlg))), 6);
-
- g_signal_connect (dlg,
- "response",
- G_CALLBACK (dialog_response_handler),
- NULL);
-
- file = gedit_dirs_get_ui_file ("gedit-preferences-dialog.ui");
- ret = gedit_utils_get_ui_objects (file,
- root_objects,
- &error_widget,
-
- "notebook", &dlg->priv->notebook,
-
- "display_line_numbers_checkbutton", &dlg->priv->display_line_numbers_checkbutton,
- "highlight_current_line_checkbutton", &dlg->priv->highlight_current_line_checkbutton,
- "bracket_matching_checkbutton", &dlg->priv->bracket_matching_checkbutton,
- "wrap_text_checkbutton", &dlg->priv->wrap_text_checkbutton,
- "split_checkbutton", &dlg->priv->split_checkbutton,
-
- "right_margin_checkbutton", &dlg->priv->right_margin_checkbutton,
- "right_margin_position_spinbutton", &dlg->priv->right_margin_position_spinbutton,
- "right_margin_position_hbox", &dlg->priv->right_margin_position_hbox,
-
- "tabs_width_spinbutton", &dlg->priv->tabs_width_spinbutton,
- "tabs_width_hbox", &dlg->priv->tabs_width_hbox,
- "insert_spaces_checkbutton", &dlg->priv->insert_spaces_checkbutton,
-
- "auto_indent_checkbutton", &dlg->priv->auto_indent_checkbutton,
-
- "autosave_hbox", &dlg->priv->autosave_hbox,
- "backup_copy_checkbutton", &dlg->priv->backup_copy_checkbutton,
- "auto_save_checkbutton", &dlg->priv->auto_save_checkbutton,
- "auto_save_spinbutton", &dlg->priv->auto_save_spinbutton,
-
- "default_font_checkbutton", &dlg->priv->default_font_checkbutton,
- "font_button", &dlg->priv->font_button,
- "font_hbox", &dlg->priv->font_hbox,
-
- "schemes_treeview", &dlg->priv->schemes_treeview,
- "install_scheme_button", &dlg->priv->install_scheme_button,
- "uninstall_scheme_button", &dlg->priv->uninstall_scheme_button,
-
- "plugin_manager_place_holder", &dlg->priv->plugin_manager_place_holder,
-
- NULL);
- g_free (file);
-
- if (!ret)
- {
- gtk_widget_show (error_widget);
-
- gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dlg))),
- error_widget,
- TRUE, TRUE, 0);
-
- return;
- }
-
- gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dlg))),
- dlg->priv->notebook, FALSE, FALSE, 0);
- g_object_unref (dlg->priv->notebook);
- gtk_container_set_border_width (GTK_CONTAINER (dlg->priv->notebook), 5);
-
- setup_editor_page (dlg);
- setup_view_page (dlg);
- setup_font_colors_page (dlg);
- setup_plugins_page (dlg);
-}
-
-void
-gedit_show_preferences_dialog (GeditWindow *parent)
-{
- gedit_debug (DEBUG_PREFS);
-
- g_return_if_fail (GEDIT_IS_WINDOW (parent));
-
- if (preferences_dialog == NULL)
- {
- preferences_dialog = GTK_WIDGET (g_object_new (GEDIT_TYPE_PREFERENCES_DIALOG, NULL));
- g_signal_connect (preferences_dialog,
- "destroy",
- G_CALLBACK (gtk_widget_destroyed),
- &preferences_dialog);
- }
-
- if (GTK_WINDOW (parent) != gtk_window_get_transient_for (GTK_WINDOW (preferences_dialog)))
- {
- gtk_window_set_transient_for (GTK_WINDOW (preferences_dialog),
- GTK_WINDOW (parent));
- }
-
- gtk_window_present (GTK_WINDOW (preferences_dialog));
-}
diff --git a/gedit/dialogs/gedit-preferences-dialog.h b/gedit/dialogs/gedit-preferences-dialog.h
deleted file mode 100755
index bafebb06..00000000
--- a/gedit/dialogs/gedit-preferences-dialog.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * gedit-preferences-dialog.c
- * This file is part of gedit
- *
- * Copyright (C) 2001-2005 Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2003. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifndef __GEDIT_PREFERENCES_DIALOG_H__
-#define __GEDIT_PREFERENCES_DIALOG_H__
-
-#include "gedit-window.h"
-
-G_BEGIN_DECLS
-
-/*
- * Type checking and casting macros
- */
-#define GEDIT_TYPE_PREFERENCES_DIALOG (gedit_preferences_dialog_get_type())
-#define GEDIT_PREFERENCES_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GEDIT_TYPE_PREFERENCES_DIALOG, GeditPreferencesDialog))
-#define GEDIT_PREFERENCES_DIALOG_CONST(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GEDIT_TYPE_PREFERENCES_DIALOG, GeditPreferencesDialog const))
-#define GEDIT_PREFERENCES_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GEDIT_TYPE_PREFERENCES_DIALOG, GeditPreferencesDialogClass))
-#define GEDIT_IS_PREFERENCES_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GEDIT_TYPE_PREFERENCES_DIALOG))
-#define GEDIT_IS_PREFERENCES_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEDIT_TYPE_PREFERENCES_DIALOG))
-#define GEDIT_PREFERENCES_DIALOG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GEDIT_TYPE_PREFERENCES_DIALOG, GeditPreferencesDialogClass))
-
-
-/* Private structure type */
-typedef struct _GeditPreferencesDialogPrivate GeditPreferencesDialogPrivate;
-
-/*
- * Main object structure
- */
-typedef struct _GeditPreferencesDialog GeditPreferencesDialog;
-
-struct _GeditPreferencesDialog
-{
- GtkDialog dialog;
-
- /*< private > */
- GeditPreferencesDialogPrivate *priv;
-};
-
-/*
- * Class definition
- */
-typedef struct _GeditPreferencesDialogClass GeditPreferencesDialogClass;
-
-struct _GeditPreferencesDialogClass
-{
- GtkDialogClass parent_class;
-};
-
-/*
- * Public methods
- */
-GType gedit_preferences_dialog_get_type (void) G_GNUC_CONST;
-
-void gedit_show_preferences_dialog (GeditWindow *parent);
-
-G_END_DECLS
-
-#endif /* __GEDIT_PREFERENCES_DIALOG_H__ */
-
diff --git a/gedit/dialogs/gedit-preferences-dialog.ui b/gedit/dialogs/gedit-preferences-dialog.ui
deleted file mode 100755
index 42d41e31..00000000
--- a/gedit/dialogs/gedit-preferences-dialog.ui
+++ /dev/null
@@ -1,1107 +0,0 @@
-<?xml version="1.0"?>
-<interface>
- <requires lib="gtk+" version="2.16"/>
- <!-- interface-naming-policy toplevel-contextual -->
- <object class="GtkAdjustment" id="adjustment1">
- <property name="value">80</property>
- <property name="lower">1</property>
- <property name="upper">160</property>
- <property name="step_increment">1</property>
- <property name="page_increment">10</property>
- </object>
- <object class="GtkAdjustment" id="adjustment2">
- <property name="value">8</property>
- <property name="lower">1</property>
- <property name="upper">24</property>
- <property name="step_increment">1</property>
- <property name="page_increment">4</property>
- </object>
- <object class="GtkAdjustment" id="adjustment3">
- <property name="value">8</property>
- <property name="lower">1</property>
- <property name="upper">100</property>
- <property name="step_increment">1</property>
- <property name="page_increment">10</property>
- </object>
- <object class="GtkImage" id="install_scheme_image">
- <property name="stock">gtk-add</property>
- </object>
- <object class="GtkDialog" id="preferences_dialog">
- <property name="title" translatable="yes">Preferences</property>
- <property name="resizable">False</property>
- <property name="destroy_with_parent">True</property>
- <property name="type_hint">dialog</property>
- <property name="has_separator">False</property>
- <child internal-child="vbox">
- <object class="GtkVBox" id="dialog-vbox">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <child>
- <object class="GtkNotebook" id="notebook">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="border_width">6</property>
- <child>
- <object class="GtkVBox" id="vbox228">
- <property name="visible">True</property>
- <property name="border_width">12</property>
- <property name="orientation">vertical</property>
- <property name="spacing">18</property>
- <child>
- <object class="GtkVBox" id="vbox226">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkLabel" id="label848">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">Text Wrapping</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkHBox" id="hbox142">
- <property name="visible">True</property>
- <child>
- <object class="GtkLabel" id="label849">
- <property name="visible">True</property>
- <property name="label" translatable="yes"> </property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkVBox" id="wrap_mode_frame">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkCheckButton" id="wrap_text_checkbutton">
- <property name="label" translatable="yes">Enable text _wrapping</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_underline">True</property>
- <property name="draw_indicator">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkCheckButton" id="split_checkbutton">
- <property name="label" translatable="yes">Do not _split words over two lines</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_underline">True</property>
- <property name="draw_indicator">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkVBox" id="vbox217">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkLabel" id="label854">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">Line Numbers</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkHBox" id="hbox137">
- <property name="visible">True</property>
- <child>
- <object class="GtkLabel" id="label843">
- <property name="visible">True</property>
- <property name="label" translatable="yes"> </property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkVBox" id="vbox222">
- <property name="visible">True</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkCheckButton" id="display_line_numbers_checkbutton">
- <property name="label" translatable="yes">_Display line numbers</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_underline">True</property>
- <property name="draw_indicator">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkVBox" id="vbox244">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkLabel" id="label876">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">Current Line</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkHBox" id="hbox161">
- <property name="visible">True</property>
- <child>
- <object class="GtkLabel" id="label877">
- <property name="visible">True</property>
- <property name="label" translatable="yes"> </property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkVBox" id="vbox245">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkCheckButton" id="highlight_current_line_checkbutton">
- <property name="label" translatable="yes">Highlight current _line</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_underline">True</property>
- <property name="draw_indicator">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="position">2</property>
- </packing>
- </child>
- <child>
- <object class="GtkVBox" id="vbox230">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkLabel" id="label855">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">Right Margin</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkHBox" id="hbox145">
- <property name="visible">True</property>
- <child>
- <object class="GtkLabel" id="label856">
- <property name="visible">True</property>
- <property name="label" translatable="yes"> </property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkVBox" id="vbox231">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkCheckButton" id="right_margin_checkbutton">
- <property name="label" translatable="yes">Display right _margin</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_underline">True</property>
- <property name="draw_indicator">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkHBox" id="right_margin_position_hbox">
- <property name="visible">True</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkLabel" id="label857">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">_Right margin at column:</property>
- <property name="use_underline">True</property>
- <property name="mnemonic_widget">right_margin_position_spinbutton</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkSpinButton" id="right_margin_position_spinbutton">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="adjustment">adjustment1</property>
- <property name="climb_rate">1</property>
- <property name="snap_to_ticks">True</property>
- <property name="numeric">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">3</property>
- </packing>
- </child>
- <child>
- <object class="GtkVBox" id="vbox249">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkLabel" id="label881">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">Bracket Matching</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkHBox" id="hbox163">
- <property name="visible">True</property>
- <child>
- <object class="GtkLabel" id="label882">
- <property name="visible">True</property>
- <property name="label" translatable="yes"> </property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkVBox" id="vbox250">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkCheckButton" id="bracket_matching_checkbutton">
- <property name="label" translatable="yes">Highlight matching _bracket</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_underline">True</property>
- <property name="draw_indicator">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="position">4</property>
- </packing>
- </child>
- </object>
- </child>
- <child type="tab">
- <object class="GtkLabel" id="label853">
- <property name="visible">True</property>
- <property name="label" translatable="yes">View</property>
- </object>
- <packing>
- <property name="tab_fill">False</property>
- </packing>
- </child>
- <child>
- <object class="GtkVBox" id="vbox224">
- <property name="visible">True</property>
- <property name="border_width">12</property>
- <property name="orientation">vertical</property>
- <property name="spacing">18</property>
- <child>
- <object class="GtkVBox" id="vbox225">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkLabel" id="label846">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">Tab Stops</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkHBox" id="hbox141">
- <property name="visible">True</property>
- <child>
- <object class="GtkLabel" id="label847">
- <property name="visible">True</property>
- <property name="label" translatable="yes"> </property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkVBox" id="vbox205">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkHBox" id="tabs_width_hbox">
- <property name="visible">True</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkLabel" id="label98">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_Tab width:</property>
- <property name="use_underline">True</property>
- <property name="justify">center</property>
- <property name="mnemonic_widget">tabs_width_spinbutton</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkSpinButton" id="tabs_width_spinbutton">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="adjustment">adjustment2</property>
- <property name="climb_rate">1</property>
- <property name="numeric">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkCheckButton" id="insert_spaces_checkbutton">
- <property name="label" translatable="yes">Insert _spaces instead of tabs</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_underline">True</property>
- <property name="draw_indicator">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkVBox" id="vbox227">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkLabel" id="label851">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">Automatic Indentation</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkHBox" id="hbox143">
- <property name="visible">True</property>
- <child>
- <object class="GtkLabel" id="label852">
- <property name="visible">True</property>
- <property name="label" translatable="yes"> </property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkCheckButton" id="auto_indent_checkbutton">
- <property name="label" translatable="yes">_Enable automatic indentation</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_underline">True</property>
- <property name="draw_indicator">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkVBox" id="vbox232">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkLabel" id="label859">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">File Saving</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkHBox" id="hbox147">
- <property name="visible">True</property>
- <child>
- <object class="GtkLabel" id="label860">
- <property name="visible">True</property>
- <property name="label" translatable="yes"> </property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkVBox" id="vbox187">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkCheckButton" id="backup_copy_checkbutton">
- <property name="label" translatable="yes">Create a _backup copy of files before saving</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_underline">True</property>
- <property name="draw_indicator">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkHBox" id="autosave_hbox">
- <property name="visible">True</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkCheckButton" id="auto_save_checkbutton">
- <property name="label" translatable="yes">_Autosave files every</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_underline">True</property>
- <property name="draw_indicator">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkSpinButton" id="auto_save_spinbutton">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="adjustment">adjustment3</property>
- <property name="climb_rate">1</property>
- <property name="numeric">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="label97">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_minutes</property>
- <property name="use_underline">True</property>
- <property name="justify">center</property>
- <property name="mnemonic_widget">auto_save_spinbutton</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">2</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">2</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- <child type="tab">
- <object class="GtkLabel" id="label829">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Editor</property>
- </object>
- <packing>
- <property name="position">1</property>
- <property name="tab_fill">False</property>
- </packing>
- </child>
- <child>
- <object class="GtkVBox" id="vbox202">
- <property name="visible">True</property>
- <property name="border_width">12</property>
- <property name="orientation">vertical</property>
- <property name="spacing">18</property>
- <child>
- <object class="GtkVBox" id="vbox185">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkLabel" id="label819">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">Font</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkHBox" id="hbox116">
- <property name="visible">True</property>
- <child>
- <object class="GtkLabel" id="label800">
- <property name="visible">True</property>
- <property name="label" translatable="yes"> </property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkVBox" id="vbox183">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkCheckButton" id="default_font_checkbutton">
- <property name="label">_Use the system fixed width font (%s)</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_underline">True</property>
- <property name="draw_indicator">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkHBox" id="font_hbox">
- <property name="visible">True</property>
- <property name="spacing">12</property>
- <child>
- <object class="GtkLabel" id="font_label">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">Editor _font: </property>
- <property name="use_underline">True</property>
- <property name="justify">center</property>
- <property name="mnemonic_widget">font_button</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkFontButton" id="font_button">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="title" translatable="yes">Pick the editor font</property>
- <property name="use_font">True</property>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkVBox" id="vbox14">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkLabel" id="label798">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">Color Scheme</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkHBox" id="hbox115">
- <property name="visible">True</property>
- <child>
- <object class="GtkLabel" id="label797">
- <property name="visible">True</property>
- <property name="label" translatable="yes"> </property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkVBox" id="vbox1">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkScrolledWindow" id="scrolledwindow2">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="hscrollbar_policy">automatic</property>
- <property name="vscrollbar_policy">automatic</property>
- <property name="shadow_type">etched-in</property>
- <child>
- <object class="GtkTreeView" id="schemes_treeview">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="headers_visible">False</property>
- <property name="rules_hint">True</property>
- </object>
- </child>
- </object>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkHButtonBox" id="hbuttonbox1">
- <property name="visible">True</property>
- <property name="spacing">6</property>
- <property name="layout_style">end</property>
- <child>
- <object class="GtkButton" id="install_scheme_button">
- <property name="label" translatable="yes">_Add...</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="image">install_scheme_image</property>
- <property name="use_underline">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkButton" id="uninstall_scheme_button">
- <property name="label">gtk-remove</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_stock">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="position">2</property>
- </packing>
- </child>
- <child type="tab">
- <object class="GtkLabel" id="label830">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Font &amp; Colors</property>
- </object>
- <packing>
- <property name="position">2</property>
- <property name="tab_fill">False</property>
- </packing>
- </child>
- <child>
- <object class="GtkVBox" id="plugin_manager_place_holder">
- <property name="visible">True</property>
- <property name="border_width">12</property>
- <property name="orientation">vertical</property>
- <child>
- <placeholder/>
- </child>
- </object>
- <packing>
- <property name="position">3</property>
- </packing>
- </child>
- <child type="tab">
- <object class="GtkLabel" id="label868">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Plugins</property>
- </object>
- <packing>
- <property name="position">3</property>
- <property name="tab_fill">False</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- <child internal-child="action_area">
- <object class="GtkHButtonBox" id="dialog-action_area">
- <property name="visible">True</property>
- <property name="layout_style">end</property>
- <child>
- <object class="GtkButton" id="helpbutton1">
- <property name="label">gtk-help</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="can_default">True</property>
- <property name="receives_default">False</property>
- <property name="use_stock">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkButton" id="closebutton1">
- <property name="label">gtk-close</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="can_default">True</property>
- <property name="receives_default">False</property>
- <property name="use_stock">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="pack_type">end</property>
- <property name="position">0</property>
- </packing>
- </child>
- </object>
- </child>
- <action-widgets>
- <action-widget response="-11">helpbutton1</action-widget>
- <action-widget response="-7">closebutton1</action-widget>
- </action-widgets>
- </object>
-</interface>
diff --git a/gedit/dialogs/gedit-search-dialog.c b/gedit/dialogs/gedit-search-dialog.c
deleted file mode 100755
index 5a059932..00000000
--- a/gedit/dialogs/gedit-search-dialog.c
+++ /dev/null
@@ -1,634 +0,0 @@
-/*
- * gedit-search-dialog.c
- * This file is part of gedit
- *
- * Copyright (C) 2005 Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <string.h>
-#include <glib/gi18n.h>
-#include <gdk/gdkkeysyms.h>
-
-#include "gedit-search-dialog.h"
-#include "gedit-history-entry.h"
-#include "gedit-utils.h"
-#include "gedit-marshal.h"
-#include "gedit-dirs.h"
-
-#define GEDIT_SEARCH_DIALOG_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), \
- GEDIT_TYPE_SEARCH_DIALOG, \
- GeditSearchDialogPrivate))
-
-/* Signals */
-enum
-{
- SHOW_REPLACE,
- LAST_SIGNAL
-};
-
-static guint dialog_signals [LAST_SIGNAL] = { 0 };
-
-struct _GeditSearchDialogPrivate
-{
- gboolean show_replace;
-
- GtkWidget *table;
- GtkWidget *search_label;
- GtkWidget *search_entry;
- GtkWidget *search_text_entry;
- GtkWidget *replace_label;
- GtkWidget *replace_entry;
- GtkWidget *replace_text_entry;
- GtkWidget *match_case_checkbutton;
- GtkWidget *entire_word_checkbutton;
- GtkWidget *backwards_checkbutton;
- GtkWidget *wrap_around_checkbutton;
- GtkWidget *find_button;
- GtkWidget *replace_button;
- GtkWidget *replace_all_button;
-
- gboolean ui_error;
-};
-
-G_DEFINE_TYPE(GeditSearchDialog, gedit_search_dialog, GTK_TYPE_DIALOG)
-
-enum
-{
- PROP_0,
- PROP_SHOW_REPLACE
-};
-
-static void
-gedit_search_dialog_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- GeditSearchDialog *dlg = GEDIT_SEARCH_DIALOG (object);
-
- switch (prop_id)
- {
- case PROP_SHOW_REPLACE:
- gedit_search_dialog_set_show_replace (dlg,
- g_value_get_boolean (value));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gedit_search_dialog_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- GeditSearchDialog *dlg = GEDIT_SEARCH_DIALOG (object);
-
- switch (prop_id)
- {
- case PROP_SHOW_REPLACE:
- g_value_set_boolean (value, dlg->priv->show_replace);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-void
-gedit_search_dialog_present_with_time (GeditSearchDialog *dialog,
- guint32 timestamp)
-{
- g_return_if_fail (GEDIT_SEARCH_DIALOG (dialog));
-
- gtk_window_present_with_time (GTK_WINDOW (dialog), timestamp);
-
- gtk_widget_grab_focus (dialog->priv->search_text_entry);
-}
-
-static gboolean
-show_replace (GeditSearchDialog *dlg)
-{
- gedit_search_dialog_set_show_replace (dlg, TRUE);
-
- return TRUE;
-}
-
-static void
-gedit_search_dialog_class_init (GeditSearchDialogClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- GtkBindingSet *binding_set;
-
- object_class->set_property = gedit_search_dialog_set_property;
- object_class->get_property = gedit_search_dialog_get_property;
-
- klass->show_replace = show_replace;
-
- dialog_signals[SHOW_REPLACE] =
- g_signal_new ("show_replace",
- G_TYPE_FROM_CLASS (object_class),
- G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
- G_STRUCT_OFFSET (GeditSearchDialogClass, show_replace),
- NULL, NULL,
- gedit_marshal_BOOLEAN__NONE,
- G_TYPE_BOOLEAN, 0);
-
- g_object_class_install_property (object_class, PROP_SHOW_REPLACE,
- g_param_spec_boolean ("show-replace",
- "Show Replace",
- "Whether the dialog is used for Search&Replace",
- FALSE,
- G_PARAM_READWRITE));
-
- g_type_class_add_private (object_class, sizeof (GeditSearchDialogPrivate));
-
- binding_set = gtk_binding_set_by_class (klass);
-
- /* Note: we cannot use the keyval/modifier associated with the
- * GTK_STOCK_FIND_AND_REPLACE stock item since MATE HIG suggests Ctrl+h
- * for Replace while gtk+ uses Ctrl+r */
- gtk_binding_entry_add_signal (binding_set, GDK_h, GDK_CONTROL_MASK, "show_replace", 0);
- gtk_binding_entry_add_signal (binding_set, GDK_H, GDK_CONTROL_MASK, "show_replace", 0);
-}
-
-static void
-insert_text_handler (GtkEditable *editable,
- const gchar *text,
- gint length,
- gint *position,
- gpointer data)
-{
- static gboolean insert_text = FALSE;
- gchar *escaped_text;
- gint new_len;
-
- /* To avoid recursive behavior */
- if (insert_text)
- return;
-
- escaped_text = gedit_utils_escape_search_text (text);
-
- new_len = strlen (escaped_text);
-
- if (new_len == length)
- {
- g_free (escaped_text);
- return;
- }
-
- insert_text = TRUE;
-
- g_signal_stop_emission_by_name (editable, "insert_text");
-
- gtk_editable_insert_text (editable, escaped_text, new_len, position);
-
- insert_text = FALSE;
-
- g_free (escaped_text);
-}
-
-static void
-search_text_entry_changed (GtkEditable *editable,
- GeditSearchDialog *dialog)
-{
- const gchar *search_string;
-
- search_string = gtk_entry_get_text (GTK_ENTRY (editable));
- g_return_if_fail (search_string != NULL);
-
- if (*search_string != '\0')
- {
- gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog),
- GEDIT_SEARCH_DIALOG_FIND_RESPONSE, TRUE);
- gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog),
- GEDIT_SEARCH_DIALOG_REPLACE_ALL_RESPONSE, TRUE);
- }
- else
- {
- gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog),
- GEDIT_SEARCH_DIALOG_FIND_RESPONSE, FALSE);
- gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog),
- GEDIT_SEARCH_DIALOG_REPLACE_RESPONSE, FALSE);
- gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog),
- GEDIT_SEARCH_DIALOG_REPLACE_ALL_RESPONSE, FALSE);
- }
-}
-
-static void
-response_handler (GeditSearchDialog *dialog,
- gint response_id,
- gpointer data)
-{
- const gchar *str;
-
- switch (response_id)
- {
- case GEDIT_SEARCH_DIALOG_REPLACE_RESPONSE:
- case GEDIT_SEARCH_DIALOG_REPLACE_ALL_RESPONSE:
- str = gtk_entry_get_text (GTK_ENTRY (dialog->priv->replace_text_entry));
- if (*str != '\0')
- {
- gchar *text;
-
- text = gedit_utils_unescape_search_text (str);
- gedit_history_entry_prepend_text
- (GEDIT_HISTORY_ENTRY (dialog->priv->replace_entry),
- text);
-
- g_free (text);
- }
- /* fall through, so that we also save the find entry */
- case GEDIT_SEARCH_DIALOG_FIND_RESPONSE:
- str = gtk_entry_get_text (GTK_ENTRY (dialog->priv->search_text_entry));
- if (*str != '\0')
- {
- gchar *text;
-
- text = gedit_utils_unescape_search_text (str);
- gedit_history_entry_prepend_text
- (GEDIT_HISTORY_ENTRY (dialog->priv->search_entry),
- text);
-
- g_free (text);
- }
- }
-}
-
-static void
-show_replace_widgets (GeditSearchDialog *dlg,
- gboolean show_replace)
-{
- if (show_replace)
- {
- gtk_widget_show (dlg->priv->replace_label);
- gtk_widget_show (dlg->priv->replace_entry);
- gtk_widget_show (dlg->priv->replace_all_button);
- gtk_widget_show (dlg->priv->replace_button);
-
- gtk_table_set_row_spacings (GTK_TABLE (dlg->priv->table), 12);
-
- gtk_window_set_title (GTK_WINDOW (dlg), _("Replace"));
- }
- else
- {
- gtk_widget_hide (dlg->priv->replace_label);
- gtk_widget_hide (dlg->priv->replace_entry);
- gtk_widget_hide (dlg->priv->replace_all_button);
- gtk_widget_hide (dlg->priv->replace_button);
-
- gtk_table_set_row_spacings (GTK_TABLE (dlg->priv->table), 0);
-
- gtk_window_set_title (GTK_WINDOW (dlg), _("Find"));
- }
-
- gtk_widget_show (dlg->priv->find_button);
-}
-
-static void
-gedit_search_dialog_init (GeditSearchDialog *dlg)
-{
- GtkWidget *content;
- GtkWidget *error_widget;
- gboolean ret;
- gchar *file;
- gchar *root_objects[] = {
- "search_dialog_content",
- NULL
- };
-
- dlg->priv = GEDIT_SEARCH_DIALOG_GET_PRIVATE (dlg);
-
- gtk_window_set_resizable (GTK_WINDOW (dlg), FALSE);
- gtk_dialog_set_has_separator (GTK_DIALOG (dlg), FALSE);
- gtk_window_set_destroy_with_parent (GTK_WINDOW (dlg), TRUE);
-
- gtk_dialog_add_buttons (GTK_DIALOG (dlg),
- GTK_STOCK_CLOSE, GTK_RESPONSE_CANCEL,
- NULL);
-
- /* HIG defaults */
- gtk_container_set_border_width (GTK_CONTAINER (dlg), 5);
- gtk_box_set_spacing (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dlg))),
- 2); /* 2 * 5 + 2 = 12 */
- gtk_container_set_border_width (GTK_CONTAINER (gtk_dialog_get_action_area (GTK_DIALOG (dlg))),
- 5);
- gtk_box_set_spacing (GTK_BOX (gtk_dialog_get_action_area (GTK_DIALOG (dlg))),
- 6);
-
- file = gedit_dirs_get_ui_file ("gedit-search-dialog.ui");
- ret = gedit_utils_get_ui_objects (file,
- root_objects,
- &error_widget,
- "search_dialog_content", &content,
- "table", &dlg->priv->table,
- "search_label", &dlg->priv->search_label,
- "replace_with_label", &dlg->priv->replace_label,
- "match_case_checkbutton", &dlg->priv->match_case_checkbutton,
- "entire_word_checkbutton", &dlg->priv->entire_word_checkbutton,
- "search_backwards_checkbutton", &dlg->priv->backwards_checkbutton,
- "wrap_around_checkbutton", &dlg->priv->wrap_around_checkbutton,
- NULL);
- g_free (file);
-
- if (!ret)
- {
- gtk_widget_show (error_widget);
-
- gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dlg))),
- error_widget,
- TRUE, TRUE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (error_widget),
- 5);
-
- dlg->priv->ui_error = TRUE;
-
- return;
- }
-
- dlg->priv->search_entry = gedit_history_entry_new ("gedit2_search_for_entry",
- TRUE);
- gtk_widget_set_size_request (dlg->priv->search_entry, 300, -1);
- gedit_history_entry_set_escape_func
- (GEDIT_HISTORY_ENTRY (dlg->priv->search_entry),
- (GeditHistoryEntryEscapeFunc) gedit_utils_escape_search_text);
-
- dlg->priv->search_text_entry = gedit_history_entry_get_entry
- (GEDIT_HISTORY_ENTRY (dlg->priv->search_entry));
- gtk_entry_set_activates_default (GTK_ENTRY (dlg->priv->search_text_entry),
- TRUE);
- gtk_widget_show (dlg->priv->search_entry);
- gtk_table_attach_defaults (GTK_TABLE (dlg->priv->table),
- dlg->priv->search_entry,
- 1, 2, 0, 1);
-
- dlg->priv->replace_entry = gedit_history_entry_new ("gedit2_replace_with_entry",
- TRUE);
- gedit_history_entry_set_escape_func
- (GEDIT_HISTORY_ENTRY (dlg->priv->replace_entry),
- (GeditHistoryEntryEscapeFunc) gedit_utils_escape_search_text);
-
- dlg->priv->replace_text_entry = gedit_history_entry_get_entry
- (GEDIT_HISTORY_ENTRY (dlg->priv->replace_entry));
- gtk_entry_set_activates_default (GTK_ENTRY (dlg->priv->replace_text_entry),
- TRUE);
- gtk_widget_show (dlg->priv->replace_entry);
- gtk_table_attach_defaults (GTK_TABLE (dlg->priv->table),
- dlg->priv->replace_entry,
- 1, 2, 1, 2);
-
- gtk_label_set_mnemonic_widget (GTK_LABEL (dlg->priv->search_label),
- dlg->priv->search_entry);
- gtk_label_set_mnemonic_widget (GTK_LABEL (dlg->priv->replace_label),
- dlg->priv->replace_entry);
-
- dlg->priv->find_button = gtk_button_new_from_stock (GTK_STOCK_FIND);
- dlg->priv->replace_all_button = gtk_button_new_with_mnemonic (_("Replace _All"));
- dlg->priv->replace_button = gedit_gtk_button_new_with_stock_icon (_("_Replace"),
- GTK_STOCK_FIND_AND_REPLACE);
-
- gtk_dialog_add_action_widget (GTK_DIALOG (dlg),
- dlg->priv->replace_all_button,
- GEDIT_SEARCH_DIALOG_REPLACE_ALL_RESPONSE);
- gtk_dialog_add_action_widget (GTK_DIALOG (dlg),
- dlg->priv->replace_button,
- GEDIT_SEARCH_DIALOG_REPLACE_RESPONSE);
- gtk_dialog_add_action_widget (GTK_DIALOG (dlg),
- dlg->priv->find_button,
- GEDIT_SEARCH_DIALOG_FIND_RESPONSE);
- g_object_set (G_OBJECT (dlg->priv->find_button),
- "can-default", TRUE,
- NULL);
-
- gtk_dialog_set_default_response (GTK_DIALOG (dlg),
- GEDIT_SEARCH_DIALOG_FIND_RESPONSE);
-
- /* insensitive by default */
- gtk_dialog_set_response_sensitive (GTK_DIALOG (dlg),
- GEDIT_SEARCH_DIALOG_FIND_RESPONSE,
- FALSE);
- gtk_dialog_set_response_sensitive (GTK_DIALOG (dlg),
- GEDIT_SEARCH_DIALOG_REPLACE_RESPONSE,
- FALSE);
- gtk_dialog_set_response_sensitive (GTK_DIALOG (dlg),
- GEDIT_SEARCH_DIALOG_REPLACE_ALL_RESPONSE,
- FALSE);
-
- gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dlg))),
- content, FALSE, FALSE, 0);
- g_object_unref (content);
- gtk_container_set_border_width (GTK_CONTAINER (content), 5);
-
- g_signal_connect (dlg->priv->search_text_entry,
- "insert_text",
- G_CALLBACK (insert_text_handler),
- NULL);
- g_signal_connect (dlg->priv->replace_text_entry,
- "insert_text",
- G_CALLBACK (insert_text_handler),
- NULL);
- g_signal_connect (dlg->priv->search_text_entry,
- "changed",
- G_CALLBACK (search_text_entry_changed),
- dlg);
-
- g_signal_connect (dlg,
- "response",
- G_CALLBACK (response_handler),
- NULL);
-}
-
-GtkWidget *
-gedit_search_dialog_new (GtkWindow *parent,
- gboolean show_replace)
-{
- GeditSearchDialog *dlg;
-
- dlg = g_object_new (GEDIT_TYPE_SEARCH_DIALOG,
- "show-replace", show_replace,
- NULL);
-
- if (parent != NULL)
- {
- gtk_window_set_transient_for (GTK_WINDOW (dlg),
- parent);
-
- gtk_window_set_destroy_with_parent (GTK_WINDOW (dlg),
- TRUE);
- }
-
- return GTK_WIDGET (dlg);
-}
-
-gboolean
-gedit_search_dialog_get_show_replace (GeditSearchDialog *dialog)
-{
- g_return_val_if_fail (GEDIT_IS_SEARCH_DIALOG (dialog), FALSE);
-
- return dialog->priv->show_replace;
-}
-
-void
-gedit_search_dialog_set_show_replace (GeditSearchDialog *dialog,
- gboolean show_replace)
-{
- g_return_if_fail (GEDIT_IS_SEARCH_DIALOG (dialog));
-
- if (dialog->priv->ui_error)
- return;
-
- dialog->priv->show_replace = show_replace != FALSE;
- show_replace_widgets (dialog, dialog->priv->show_replace);
-
- g_object_notify (G_OBJECT (dialog), "show-replace");
-}
-
-void
-gedit_search_dialog_set_search_text (GeditSearchDialog *dialog,
- const gchar *text)
-{
- g_return_if_fail (GEDIT_IS_SEARCH_DIALOG (dialog));
- g_return_if_fail (text != NULL);
-
- gtk_entry_set_text (GTK_ENTRY (dialog->priv->search_text_entry),
- text);
-
- gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog),
- GEDIT_SEARCH_DIALOG_FIND_RESPONSE,
- (text != '\0'));
-
- gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog),
- GEDIT_SEARCH_DIALOG_REPLACE_ALL_RESPONSE,
- (text != '\0'));
-}
-
-/*
- * The text must be unescaped before searching.
- */
-const gchar *
-gedit_search_dialog_get_search_text (GeditSearchDialog *dialog)
-{
- g_return_val_if_fail (GEDIT_IS_SEARCH_DIALOG (dialog), NULL);
-
- return gtk_entry_get_text (GTK_ENTRY (dialog->priv->search_text_entry));
-}
-
-void
-gedit_search_dialog_set_replace_text (GeditSearchDialog *dialog,
- const gchar *text)
-{
- g_return_if_fail (GEDIT_IS_SEARCH_DIALOG (dialog));
- g_return_if_fail (text != NULL);
-
- gtk_entry_set_text (GTK_ENTRY (dialog->priv->replace_text_entry),
- text);
-}
-
-const gchar *
-gedit_search_dialog_get_replace_text (GeditSearchDialog *dialog)
-{
- g_return_val_if_fail (GEDIT_IS_SEARCH_DIALOG (dialog), NULL);
-
- return gtk_entry_get_text (GTK_ENTRY (dialog->priv->replace_text_entry));
-}
-
-void
-gedit_search_dialog_set_match_case (GeditSearchDialog *dialog,
- gboolean match_case)
-{
- g_return_if_fail (GEDIT_IS_SEARCH_DIALOG (dialog));
-
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->priv->match_case_checkbutton),
- match_case);
-}
-
-gboolean
-gedit_search_dialog_get_match_case (GeditSearchDialog *dialog)
-{
- g_return_val_if_fail (GEDIT_IS_SEARCH_DIALOG (dialog), FALSE);
-
- return gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->priv->match_case_checkbutton));
-}
-
-void
-gedit_search_dialog_set_entire_word (GeditSearchDialog *dialog,
- gboolean entire_word)
-{
- g_return_if_fail (GEDIT_IS_SEARCH_DIALOG (dialog));
-
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->priv->entire_word_checkbutton),
- entire_word);
-}
-
-gboolean
-gedit_search_dialog_get_entire_word (GeditSearchDialog *dialog)
-{
- g_return_val_if_fail (GEDIT_IS_SEARCH_DIALOG (dialog), FALSE);
-
- return gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->priv->entire_word_checkbutton));
-}
-
-void
-gedit_search_dialog_set_backwards (GeditSearchDialog *dialog,
- gboolean backwards)
-{
- g_return_if_fail (GEDIT_IS_SEARCH_DIALOG (dialog));
-
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->priv->backwards_checkbutton),
- backwards);
-}
-
-gboolean
-gedit_search_dialog_get_backwards (GeditSearchDialog *dialog)
-{
- g_return_val_if_fail (GEDIT_IS_SEARCH_DIALOG (dialog), FALSE);
-
- return gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->priv->backwards_checkbutton));
-}
-
-void
-gedit_search_dialog_set_wrap_around (GeditSearchDialog *dialog,
- gboolean wrap_around)
-{
- g_return_if_fail (GEDIT_IS_SEARCH_DIALOG (dialog));
-
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->priv->wrap_around_checkbutton),
- wrap_around);
-}
-
-gboolean
-gedit_search_dialog_get_wrap_around (GeditSearchDialog *dialog)
-{
- g_return_val_if_fail (GEDIT_IS_SEARCH_DIALOG (dialog), FALSE);
-
- return gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->priv->wrap_around_checkbutton));
-}
diff --git a/gedit/dialogs/gedit-search-dialog.h b/gedit/dialogs/gedit-search-dialog.h
deleted file mode 100755
index a225be14..00000000
--- a/gedit/dialogs/gedit-search-dialog.h
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * gedit-search-dialog.h
- * This file is part of gedit
- *
- * Copyright (C) 2005 Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifndef __GEDIT_SEARCH_DIALOG_H__
-#define __GEDIT_SEARCH_DIALOG_H__
-
-#include <gtk/gtk.h>
-
-G_BEGIN_DECLS
-
-/*
- * Type checking and casting macros
- */
-#define GEDIT_TYPE_SEARCH_DIALOG (gedit_search_dialog_get_type())
-#define GEDIT_SEARCH_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GEDIT_TYPE_SEARCH_DIALOG, GeditSearchDialog))
-#define GEDIT_SEARCH_DIALOG_CONST(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GEDIT_TYPE_SEARCH_DIALOG, GeditSearchDialog const))
-#define GEDIT_SEARCH_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GEDIT_TYPE_SEARCH_DIALOG, GeditSearchDialogClass))
-#define GEDIT_IS_SEARCH_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GEDIT_TYPE_SEARCH_DIALOG))
-#define GEDIT_IS_SEARCH_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEDIT_TYPE_SEARCH_DIALOG))
-#define GEDIT_SEARCH_DIALOG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GEDIT_TYPE_SEARCH_DIALOG, GeditSearchDialogClass))
-
-/* Private structure type */
-typedef struct _GeditSearchDialogPrivate GeditSearchDialogPrivate;
-
-/*
- * Main object structure
- */
-typedef struct _GeditSearchDialog GeditSearchDialog;
-
-struct _GeditSearchDialog
-{
- GtkDialog dialog;
-
- /*< private > */
- GeditSearchDialogPrivate *priv;
-};
-
-/*
- * Class definition
- */
-typedef struct _GeditSearchDialogClass GeditSearchDialogClass;
-
-struct _GeditSearchDialogClass
-{
- GtkDialogClass parent_class;
-
- /* Key bindings */
- gboolean (* show_replace) (GeditSearchDialog *dlg);
-};
-
-enum
-{
- GEDIT_SEARCH_DIALOG_FIND_RESPONSE = 100,
- GEDIT_SEARCH_DIALOG_REPLACE_RESPONSE,
- GEDIT_SEARCH_DIALOG_REPLACE_ALL_RESPONSE
-};
-
-/*
- * Public methods
- */
-GType gedit_search_dialog_get_type (void) G_GNUC_CONST;
-
-GtkWidget *gedit_search_dialog_new (GtkWindow *parent,
- gboolean show_replace);
-
-void gedit_search_dialog_present_with_time (GeditSearchDialog *dialog,
- guint32 timestamp);
-
-gboolean gedit_search_dialog_get_show_replace (GeditSearchDialog *dialog);
-
-void gedit_search_dialog_set_show_replace (GeditSearchDialog *dialog,
- gboolean show_replace);
-
-
-void gedit_search_dialog_set_search_text (GeditSearchDialog *dialog,
- const gchar *text);
-const gchar *gedit_search_dialog_get_search_text (GeditSearchDialog *dialog);
-
-void gedit_search_dialog_set_replace_text (GeditSearchDialog *dialog,
- const gchar *text);
-const gchar *gedit_search_dialog_get_replace_text (GeditSearchDialog *dialog);
-
-void gedit_search_dialog_set_match_case (GeditSearchDialog *dialog,
- gboolean match_case);
-gboolean gedit_search_dialog_get_match_case (GeditSearchDialog *dialog);
-
-void gedit_search_dialog_set_entire_word (GeditSearchDialog *dialog,
- gboolean entire_word);
-gboolean gedit_search_dialog_get_entire_word (GeditSearchDialog *dialog);
-
-void gedit_search_dialog_set_backwards (GeditSearchDialog *dialog,
- gboolean backwards);
-gboolean gedit_search_dialog_get_backwards (GeditSearchDialog *dialog);
-
-void gedit_search_dialog_set_wrap_around (GeditSearchDialog *dialog,
- gboolean wrap_around);
-gboolean gedit_search_dialog_get_wrap_around (GeditSearchDialog *dialog);
-
-G_END_DECLS
-
-#endif /* __GEDIT_SEARCH_DIALOG_H__ */
diff --git a/gedit/dialogs/gedit-search-dialog.ui b/gedit/dialogs/gedit-search-dialog.ui
deleted file mode 100755
index 35b6c390..00000000
--- a/gedit/dialogs/gedit-search-dialog.ui
+++ /dev/null
@@ -1,255 +0,0 @@
-<?xml version="1.0"?>
-<!--*- mode: xml -*-->
-<interface>
- <object class="GtkDialog" id="dialog">
- <property name="title" translatable="yes">Replace</property>
- <property name="type">GTK_WINDOW_TOPLEVEL</property>
- <property name="window_position">GTK_WIN_POS_NONE</property>
- <property name="modal">False</property>
- <property name="resizable">False</property>
- <property name="destroy_with_parent">False</property>
- <property name="decorated">True</property>
- <property name="skip_taskbar_hint">False</property>
- <property name="skip_pager_hint">False</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
- <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
- <property name="focus_on_map">True</property>
- <property name="urgency_hint">False</property>
- <property name="has_separator">False</property>
- <child internal-child="vbox">
- <object class="GtkVBox" id="dialog-vbox1">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">8</property>
- <child internal-child="action_area">
- <object class="GtkHButtonBox" id="dialog-action_area1">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_DEFAULT_STYLE</property>
- <child>
- <object class="GtkButton" id="close_button">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-close</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- </object>
- </child>
- <child>
- <object class="GtkButton" id="replace_all_button">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Replace All</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- </object>
- </child>
- <child>
- <object class="GtkButton" id="replace_button">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Replace</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- </object>
- </child>
- <child>
- <object class="GtkButton" id="find_next_button">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-find</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- </object>
- </child>
- </object>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
- <child>
- <object class="GtkVBox" id="search_dialog_content">
- <property name="border_width">5</property>
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">18</property>
- <child>
- <object class="GtkTable" id="table">
- <property name="visible">True</property>
- <property name="n_rows">2</property>
- <property name="n_columns">2</property>
- <property name="homogeneous">False</property>
- <property name="row_spacing">12</property>
- <property name="column_spacing">12</property>
- <child>
- <object class="GtkLabel" id="search_label">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_Search for: </property>
- <property name="use_underline">True</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>
- </object>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="x_options">fill</property>
- <property name="y_options"/>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="replace_with_label">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Replace _with: </property>
- <property name="use_underline">True</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>
- </object>
- <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"/>
- </packing>
- </child>
- </object>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- <child>
- <object class="GtkVBox" id="vbox3">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">12</property>
- <child>
- <object class="GtkCheckButton" id="match_case_checkbutton">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">_Match case</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- </object>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- <child>
- <object class="GtkCheckButton" id="entire_word_checkbutton">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Match _entire word only</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- </object>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- <child>
- <object class="GtkCheckButton" id="search_backwards_checkbutton">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Search _backwards</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">False</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- </object>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- <child>
- <object class="GtkCheckButton" id="wrap_around_checkbutton">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">_Wrap around</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="active">True</property>
- <property name="inconsistent">False</property>
- <property name="draw_indicator">True</property>
- </object>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </object>
- </child>
- <action-widgets>
- <action-widget response="0">close_button</action-widget>
- <action-widget response="0">replace_all_button</action-widget>
- <action-widget response="0">replace_button</action-widget>
- <action-widget response="0">find_next_button</action-widget>
- </action-widgets>
- </object>
-</interface>
diff --git a/gedit/gedit-app.c b/gedit/gedit-app.c
deleted file mode 100755
index 14148fef..00000000
--- a/gedit/gedit-app.c
+++ /dev/null
@@ -1,911 +0,0 @@
-/*
- * gedit-app.c
- * This file is part of gedit
- *
- * Copyright (C) 2005-2006 - Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <string.h>
-#include <unistd.h>
-
-#include <glib/gi18n.h>
-
-#include "gedit-app.h"
-#include "gedit-prefs-manager-app.h"
-#include "gedit-commands.h"
-#include "gedit-notebook.h"
-#include "gedit-debug.h"
-#include "gedit-utils.h"
-#include "gedit-enum-types.h"
-#include "gedit-dirs.h"
-
-#ifdef OS_OSX
-#include <ige-mac-integration.h>
-#endif
-
-#define GEDIT_PAGE_SETUP_FILE "gedit-page-setup"
-#define GEDIT_PRINT_SETTINGS_FILE "gedit-print-settings"
-
-#define GEDIT_APP_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), GEDIT_TYPE_APP, GeditAppPrivate))
-
-/* Properties */
-enum
-{
- PROP_0,
- PROP_LOCKDOWN
-};
-
-struct _GeditAppPrivate
-{
- GList *windows;
- GeditWindow *active_window;
-
- GeditLockdownMask lockdown;
-
- GtkPageSetup *page_setup;
- GtkPrintSettings *print_settings;
-};
-
-G_DEFINE_TYPE(GeditApp, gedit_app, G_TYPE_OBJECT)
-
-static void
-gedit_app_finalize (GObject *object)
-{
- GeditApp *app = GEDIT_APP (object);
-
- g_list_free (app->priv->windows);
-
- if (app->priv->page_setup)
- g_object_unref (app->priv->page_setup);
- if (app->priv->print_settings)
- g_object_unref (app->priv->print_settings);
-
- G_OBJECT_CLASS (gedit_app_parent_class)->finalize (object);
-}
-
-static void
-gedit_app_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- GeditApp *app = GEDIT_APP (object);
-
- switch (prop_id)
- {
- case PROP_LOCKDOWN:
- g_value_set_flags (value, gedit_app_get_lockdown (app));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gedit_app_class_init (GeditAppClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->finalize = gedit_app_finalize;
- object_class->get_property = gedit_app_get_property;
-
- g_object_class_install_property (object_class,
- PROP_LOCKDOWN,
- g_param_spec_flags ("lockdown",
- "Lockdown",
- "The lockdown mask",
- GEDIT_TYPE_LOCKDOWN_MASK,
- 0,
- G_PARAM_READABLE |
- G_PARAM_STATIC_STRINGS));
-
- g_type_class_add_private (object_class, sizeof(GeditAppPrivate));
-}
-
-static gboolean
-ensure_user_config_dir (void)
-{
- gchar *config_dir;
- gboolean ret = TRUE;
- gint res;
-
- config_dir = gedit_dirs_get_user_config_dir ();
- if (config_dir == NULL)
- {
- g_warning ("Could not get config directory\n");
- return FALSE;
- }
-
- res = g_mkdir_with_parents (config_dir, 0755);
- if (res < 0)
- {
- g_warning ("Could not create config directory\n");
- ret = FALSE;
- }
-
- g_free (config_dir);
-
- return ret;
-}
-
-static void
-load_accels (void)
-{
- gchar *filename;
-
- filename = gedit_dirs_get_user_accels_file ();
- if (filename != NULL)
- {
- gedit_debug_message (DEBUG_APP, "Loading keybindings from %s\n", filename);
- gtk_accel_map_load (filename);
- g_free (filename);
- }
-}
-
-static void
-save_accels (void)
-{
- gchar *filename;
-
- filename = gedit_dirs_get_user_accels_file ();
- if (filename != NULL)
- {
- gedit_debug_message (DEBUG_APP, "Saving keybindings in %s\n", filename);
- gtk_accel_map_save (filename);
- g_free (filename);
- }
-}
-
-static gchar *
-get_page_setup_file (void)
-{
- gchar *config_dir;
- gchar *setup = NULL;
-
- config_dir = gedit_dirs_get_user_config_dir ();
-
- if (config_dir != NULL)
- {
- setup = g_build_filename (config_dir,
- GEDIT_PAGE_SETUP_FILE,
- NULL);
- g_free (config_dir);
- }
-
- return setup;
-}
-
-static void
-load_page_setup (GeditApp *app)
-{
- gchar *filename;
- GError *error = NULL;
-
- g_return_if_fail (app->priv->page_setup == NULL);
-
- filename = get_page_setup_file ();
-
- app->priv->page_setup = gtk_page_setup_new_from_file (filename,
- &error);
- if (error)
- {
- /* Ignore file not found error */
- if (error->domain != G_FILE_ERROR ||
- error->code != G_FILE_ERROR_NOENT)
- {
- g_warning ("%s", error->message);
- }
-
- g_error_free (error);
- }
-
- g_free (filename);
-
- /* fall back to default settings */
- if (app->priv->page_setup == NULL)
- app->priv->page_setup = gtk_page_setup_new ();
-}
-
-static void
-save_page_setup (GeditApp *app)
-{
- gchar *filename;
- GError *error = NULL;
-
- if (app->priv->page_setup == NULL)
- return;
-
- filename = get_page_setup_file ();
-
- gtk_page_setup_to_file (app->priv->page_setup,
- filename,
- &error);
- if (error)
- {
- g_warning ("%s", error->message);
- g_error_free (error);
- }
-
- g_free (filename);
-}
-
-static gchar *
-get_print_settings_file (void)
-{
- gchar *config_dir;
- gchar *settings = NULL;
-
- config_dir = gedit_dirs_get_user_config_dir ();
-
- if (config_dir != NULL)
- {
- settings = g_build_filename (config_dir,
- GEDIT_PRINT_SETTINGS_FILE,
- NULL);
- g_free (config_dir);
- }
-
- return settings;
-}
-
-static void
-load_print_settings (GeditApp *app)
-{
- gchar *filename;
- GError *error = NULL;
-
- g_return_if_fail (app->priv->print_settings == NULL);
-
- filename = get_print_settings_file ();
-
- app->priv->print_settings = gtk_print_settings_new_from_file (filename,
- &error);
- if (error)
- {
- /* Ignore file not found error */
- if (error->domain != G_FILE_ERROR ||
- error->code != G_FILE_ERROR_NOENT)
- {
- g_warning ("%s", error->message);
- }
-
- g_error_free (error);
- }
-
- g_free (filename);
-
- /* fall back to default settings */
- if (app->priv->print_settings == NULL)
- app->priv->print_settings = gtk_print_settings_new ();
-}
-
-static void
-save_print_settings (GeditApp *app)
-{
- gchar *filename;
- GError *error = NULL;
-
- if (app->priv->print_settings == NULL)
- return;
-
- filename = get_print_settings_file ();
-
- gtk_print_settings_to_file (app->priv->print_settings,
- filename,
- &error);
- if (error)
- {
- g_warning ("%s", error->message);
- g_error_free (error);
- }
-
- g_free (filename);
-}
-
-static void
-gedit_app_init (GeditApp *app)
-{
- app->priv = GEDIT_APP_GET_PRIVATE (app);
-
- load_accels ();
-
- /* initial lockdown state */
- app->priv->lockdown = gedit_prefs_manager_get_lockdown ();
-}
-
-static void
-app_weak_notify (gpointer data,
- GObject *where_the_app_was)
-{
- gtk_main_quit ();
-}
-
-/**
- * gedit_app_get_default:
- *
- * Returns the #GeditApp object. This object is a singleton and
- * represents the running gedit instance.
- *
- * Return value: the #GeditApp pointer
- */
-GeditApp *
-gedit_app_get_default (void)
-{
- static GeditApp *app = NULL;
-
- if (app != NULL)
- return app;
-
- app = GEDIT_APP (g_object_new (GEDIT_TYPE_APP, NULL));
-
- g_object_add_weak_pointer (G_OBJECT (app),
- (gpointer) &app);
- g_object_weak_ref (G_OBJECT (app),
- app_weak_notify,
- NULL);
-
- return app;
-}
-
-static void
-set_active_window (GeditApp *app,
- GeditWindow *window)
-{
- app->priv->active_window = window;
-}
-
-static gboolean
-window_focus_in_event (GeditWindow *window,
- GdkEventFocus *event,
- GeditApp *app)
-{
- /* updates active_view and active_child when a new toplevel receives focus */
- g_return_val_if_fail (GEDIT_IS_WINDOW (window), FALSE);
-
- set_active_window (app, window);
-
- return FALSE;
-}
-
-static gboolean
-window_delete_event (GeditWindow *window,
- GdkEvent *event,
- GeditApp *app)
-{
- GeditWindowState ws;
-
- ws = gedit_window_get_state (window);
-
- if (ws &
- (GEDIT_WINDOW_STATE_SAVING |
- GEDIT_WINDOW_STATE_PRINTING |
- GEDIT_WINDOW_STATE_SAVING_SESSION))
- return TRUE;
-
- _gedit_cmd_file_quit (NULL, window);
-
- /* Do not destroy the window */
- return TRUE;
-}
-
-static void
-window_destroy (GeditWindow *window,
- GeditApp *app)
-{
- app->priv->windows = g_list_remove (app->priv->windows,
- window);
-
- if (window == app->priv->active_window)
- {
- set_active_window (app, app->priv->windows != NULL ? app->priv->windows->data : NULL);
- }
-
-/* CHECK: I don't think we have to disconnect this function, since windows
- is being destroyed */
-/*
- g_signal_handlers_disconnect_by_func (window,
- G_CALLBACK (window_focus_in_event),
- app);
- g_signal_handlers_disconnect_by_func (window,
- G_CALLBACK (window_destroy),
- app);
-*/
- if (app->priv->windows == NULL)
- {
-#ifdef OS_OSX
- if (!GPOINTER_TO_INT (g_object_get_data (G_OBJECT (window), "gedit-is-quitting-all")))
- {
- /* Create hidden proxy window on OS X to handle the menu */
- gedit_app_create_window (app, NULL);
- return;
- }
-#endif
- /* Last window is gone... save some settings and exit */
- ensure_user_config_dir ();
-
- save_accels ();
- save_page_setup (app);
- save_print_settings (app);
-
- g_object_unref (app);
- }
-}
-
-/* Generates a unique string for a window role */
-static gchar *
-gen_role (void)
-{
- GTimeVal result;
- static gint serial;
-
- g_get_current_time (&result);
-
- return g_strdup_printf ("gedit-window-%ld-%ld-%d-%s",
- result.tv_sec,
- result.tv_usec,
- serial++,
- g_get_host_name ());
-}
-
-static GeditWindow *
-gedit_app_create_window_real (GeditApp *app,
- gboolean set_geometry,
- const gchar *role)
-{
- GeditWindow *window;
-
- gedit_debug (DEBUG_APP);
-
- /*
- * We need to be careful here, there is a race condition:
- * when another gedit is launched it checks active_window,
- * so we must do our best to ensure that active_window
- * is never NULL when at least a window exists.
- */
- if (app->priv->windows == NULL)
- {
- window = g_object_new (GEDIT_TYPE_WINDOW, NULL);
- set_active_window (app, window);
- }
- else
- {
- window = g_object_new (GEDIT_TYPE_WINDOW, NULL);
- }
-
- app->priv->windows = g_list_prepend (app->priv->windows,
- window);
-
- gedit_debug_message (DEBUG_APP, "Window created");
-
- if (role != NULL)
- {
- gtk_window_set_role (GTK_WINDOW (window), role);
- }
- else
- {
- gchar *newrole;
-
- newrole = gen_role ();
- gtk_window_set_role (GTK_WINDOW (window), newrole);
- g_free (newrole);
- }
-
- if (set_geometry)
- {
- GdkWindowState state;
- gint w, h;
-
- state = gedit_prefs_manager_get_window_state ();
-
- if ((state & GDK_WINDOW_STATE_MAXIMIZED) != 0)
- {
- gedit_prefs_manager_get_default_window_size (&w, &h);
- gtk_window_set_default_size (GTK_WINDOW (window), w, h);
- gtk_window_maximize (GTK_WINDOW (window));
- }
- else
- {
- gedit_prefs_manager_get_window_size (&w, &h);
- gtk_window_set_default_size (GTK_WINDOW (window), w, h);
- gtk_window_unmaximize (GTK_WINDOW (window));
- }
-
- if ((state & GDK_WINDOW_STATE_STICKY ) != 0)
- gtk_window_stick (GTK_WINDOW (window));
- else
- gtk_window_unstick (GTK_WINDOW (window));
- }
-
- g_signal_connect (window,
- "focus_in_event",
- G_CALLBACK (window_focus_in_event),
- app);
- g_signal_connect (window,
- "delete_event",
- G_CALLBACK (window_delete_event),
- app);
- g_signal_connect (window,
- "destroy",
- G_CALLBACK (window_destroy),
- app);
-
- return window;
-}
-
-/**
- * gedit_app_create_window:
- * @app: the #GeditApp
- *
- * Create a new #GeditWindow part of @app.
- *
- * Return value: the new #GeditWindow
- */
-GeditWindow *
-gedit_app_create_window (GeditApp *app,
- GdkScreen *screen)
-{
- GeditWindow *window;
-
- window = gedit_app_create_window_real (app, TRUE, NULL);
-
- if (screen != NULL)
- gtk_window_set_screen (GTK_WINDOW (window), screen);
-
- return window;
-}
-
-/*
- * Same as _create_window, but doesn't set the geometry.
- * The session manager takes care of it. Used in mate-session.
- */
-GeditWindow *
-_gedit_app_restore_window (GeditApp *app,
- const gchar *role)
-{
- GeditWindow *window;
-
- window = gedit_app_create_window_real (app, FALSE, role);
-
- return window;
-}
-
-/**
- * gedit_app_get_windows:
- * @app: the #GeditApp
- *
- * Returns all the windows currently present in #GeditApp.
- *
- * Return value: the list of #GeditWindows objects. The list
- * should not be freed
- */
-const GList *
-gedit_app_get_windows (GeditApp *app)
-{
- g_return_val_if_fail (GEDIT_IS_APP (app), NULL);
-
- return app->priv->windows;
-}
-
-/**
- * gedit_app_get_active_window:
- * @app: the #GeditApp
- *
- * Retrives the #GeditWindow currently active.
- *
- * Return value: the active #GeditWindow
- */
-GeditWindow *
-gedit_app_get_active_window (GeditApp *app)
-{
- g_return_val_if_fail (GEDIT_IS_APP (app), NULL);
-
- /* make sure our active window is always realized:
- * this is needed on startup if we launch two gedit fast
- * enough that the second instance comes up before the
- * first one shows its window.
- */
- if (!GTK_WIDGET_REALIZED (GTK_WIDGET (app->priv->active_window)))
- gtk_widget_realize (GTK_WIDGET (app->priv->active_window));
-
- return app->priv->active_window;
-}
-
-static gboolean
-is_in_viewport (GeditWindow *window,
- GdkScreen *screen,
- gint workspace,
- gint viewport_x,
- gint viewport_y)
-{
- GdkScreen *s;
- GdkDisplay *display;
- GdkWindow *gdkwindow;
- const gchar *cur_name;
- const gchar *name;
- gint cur_n;
- gint n;
- gint ws;
- gint sc_width, sc_height;
- gint x, y, width, height;
- gint vp_x, vp_y;
-
- /* Check for screen and display match */
- display = gdk_screen_get_display (screen);
- cur_name = gdk_display_get_name (display);
- cur_n = gdk_screen_get_number (screen);
-
- s = gtk_window_get_screen (GTK_WINDOW (window));
- display = gdk_screen_get_display (s);
- name = gdk_display_get_name (display);
- n = gdk_screen_get_number (s);
-
- if (strcmp (cur_name, name) != 0 || cur_n != n)
- return FALSE;
-
- /* Check for workspace match */
- ws = gedit_utils_get_window_workspace (GTK_WINDOW (window));
- if (ws != workspace && ws != GEDIT_ALL_WORKSPACES)
- return FALSE;
-
- /* Check for viewport match */
- gdkwindow = gtk_widget_get_window (GTK_WIDGET (window));
- gdk_window_get_position (gdkwindow, &x, &y);
-
- #if GTK_CHECK_VERSION(3, 0, 0)
- width = gdk_window_get_width(gdkwindow);
- height = gdk_window_get_height(gdkwindow);
- #else
- gdk_drawable_get_size(gdkwindow, &width, &height);
- #endif
-
- gedit_utils_get_current_viewport (screen, &vp_x, &vp_y);
- x += vp_x;
- y += vp_y;
-
- sc_width = gdk_screen_get_width (screen);
- sc_height = gdk_screen_get_height (screen);
-
- return x + width * .25 >= viewport_x &&
- x + width * .75 <= viewport_x + sc_width &&
- y >= viewport_y &&
- y + height <= viewport_y + sc_height;
-}
-
-/**
- * _gedit_app_get_window_in_viewport
- * @app: the #GeditApp
- * @screen: the #GdkScreen
- * @workspace: the workspace number
- * @viewport_x: the viewport horizontal origin
- * @viewport_y: the viewport vertical origin
- *
- * Since a workspace can be larger than the screen, it is divided into several
- * equal parts called viewports. This function retrives the #GeditWindow in
- * the given viewport of the given workspace.
- *
- * Return value: the #GeditWindow in the given viewport of the given workspace.
- */
-GeditWindow *
-_gedit_app_get_window_in_viewport (GeditApp *app,
- GdkScreen *screen,
- gint workspace,
- gint viewport_x,
- gint viewport_y)
-{
- GeditWindow *window;
-
- GList *l;
-
- g_return_val_if_fail (GEDIT_IS_APP (app), NULL);
-
- /* first try if the active window */
- window = app->priv->active_window;
-
- g_return_val_if_fail (GEDIT_IS_WINDOW (window), NULL);
-
- if (is_in_viewport (window, screen, workspace, viewport_x, viewport_y))
- return window;
-
- /* otherwise try to see if there is a window on this workspace */
- for (l = app->priv->windows; l != NULL; l = l->next)
- {
- window = l->data;
-
- if (is_in_viewport (window, screen, workspace, viewport_x, viewport_y))
- return window;
- }
-
- /* no window on this workspace... create a new one */
- return gedit_app_create_window (app, screen);
-}
-
-/**
- * gedit_app_get_documents:
- * @app: the #GeditApp
- *
- * Returns all the documents currently open in #GeditApp.
- *
- * Return value: a newly allocated list of #GeditDocument objects
- */
-GList *
-gedit_app_get_documents (GeditApp *app)
-{
- GList *res = NULL;
- GList *windows;
-
- g_return_val_if_fail (GEDIT_IS_APP (app), NULL);
-
- windows = app->priv->windows;
-
- while (windows != NULL)
- {
- res = g_list_concat (res,
- gedit_window_get_documents (GEDIT_WINDOW (windows->data)));
-
- windows = g_list_next (windows);
- }
-
- return res;
-}
-
-/**
- * gedit_app_get_views:
- * @app: the #GeditApp
- *
- * Returns all the views currently present in #GeditApp.
- *
- * Return value: a newly allocated list of #GeditView objects
- */
-GList *
-gedit_app_get_views (GeditApp *app)
-{
- GList *res = NULL;
- GList *windows;
-
- g_return_val_if_fail (GEDIT_IS_APP (app), NULL);
-
- windows = app->priv->windows;
-
- while (windows != NULL)
- {
- res = g_list_concat (res,
- gedit_window_get_views (GEDIT_WINDOW (windows->data)));
-
- windows = g_list_next (windows);
- }
-
- return res;
-}
-
-/**
- * gedit_app_get_lockdown:
- * @app: a #GeditApp
- *
- * Gets the lockdown mask (see #GeditLockdownMask) for the application.
- * The lockdown mask determines which functions are locked down using
- * the MATE-wise lockdown MateConf keys.
- **/
-GeditLockdownMask
-gedit_app_get_lockdown (GeditApp *app)
-{
- g_return_val_if_fail (GEDIT_IS_APP (app), GEDIT_LOCKDOWN_ALL);
-
- return app->priv->lockdown;
-}
-
-static void
-app_lockdown_changed (GeditApp *app)
-{
- GList *l;
-
- for (l = app->priv->windows; l != NULL; l = l->next)
- _gedit_window_set_lockdown (GEDIT_WINDOW (l->data),
- app->priv->lockdown);
-
- g_object_notify (G_OBJECT (app), "lockdown");
-}
-
-void
-_gedit_app_set_lockdown (GeditApp *app,
- GeditLockdownMask lockdown)
-{
- g_return_if_fail (GEDIT_IS_APP (app));
-
- app->priv->lockdown = lockdown;
-
- app_lockdown_changed (app);
-}
-
-void
-_gedit_app_set_lockdown_bit (GeditApp *app,
- GeditLockdownMask bit,
- gboolean value)
-{
- g_return_if_fail (GEDIT_IS_APP (app));
-
- if (value)
- app->priv->lockdown |= bit;
- else
- app->priv->lockdown &= ~bit;
-
- app_lockdown_changed (app);
-}
-
-/* Returns a copy */
-GtkPageSetup *
-_gedit_app_get_default_page_setup (GeditApp *app)
-{
- g_return_val_if_fail (GEDIT_IS_APP (app), NULL);
-
- if (app->priv->page_setup == NULL)
- load_page_setup (app);
-
- return gtk_page_setup_copy (app->priv->page_setup);
-}
-
-void
-_gedit_app_set_default_page_setup (GeditApp *app,
- GtkPageSetup *page_setup)
-{
- g_return_if_fail (GEDIT_IS_APP (app));
- g_return_if_fail (GTK_IS_PAGE_SETUP (page_setup));
-
- if (app->priv->page_setup != NULL)
- g_object_unref (app->priv->page_setup);
-
- app->priv->page_setup = g_object_ref (page_setup);
-}
-
-/* Returns a copy */
-GtkPrintSettings *
-_gedit_app_get_default_print_settings (GeditApp *app)
-{
- g_return_val_if_fail (GEDIT_IS_APP (app), NULL);
-
- if (app->priv->print_settings == NULL)
- load_print_settings (app);
-
- return gtk_print_settings_copy (app->priv->print_settings);
-}
-
-void
-_gedit_app_set_default_print_settings (GeditApp *app,
- GtkPrintSettings *settings)
-{
- g_return_if_fail (GEDIT_IS_APP (app));
- g_return_if_fail (GTK_IS_PRINT_SETTINGS (settings));
-
- if (app->priv->print_settings != NULL)
- g_object_unref (app->priv->print_settings);
-
- app->priv->print_settings = g_object_ref (settings);
-}
-
diff --git a/gedit/gedit-app.h b/gedit/gedit-app.h
deleted file mode 100755
index 5311930a..00000000
--- a/gedit/gedit-app.h
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * gedit-app.h
- * This file is part of gedit
- *
- * Copyright (C) 2005 - Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifndef __GEDIT_APP_H__
-#define __GEDIT_APP_H__
-
-#include <gtk/gtk.h>
-
-#include <gedit/gedit-window.h>
-
-G_BEGIN_DECLS
-
-/*
- * Type checking and casting macros
- */
-#define GEDIT_TYPE_APP (gedit_app_get_type())
-#define GEDIT_APP(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GEDIT_TYPE_APP, GeditApp))
-#define GEDIT_APP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GEDIT_TYPE_APP, GeditAppClass))
-#define GEDIT_IS_APP(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GEDIT_TYPE_APP))
-#define GEDIT_IS_APP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEDIT_TYPE_APP))
-#define GEDIT_APP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GEDIT_TYPE_APP, GeditAppClass))
-
-/* Private structure type */
-typedef struct _GeditAppPrivate GeditAppPrivate;
-
-/*
- * Main object structure
- */
-typedef struct _GeditApp GeditApp;
-
-struct _GeditApp
-{
- GObject object;
-
- /*< private > */
- GeditAppPrivate *priv;
-};
-
-/*
- * Class definition
- */
-typedef struct _GeditAppClass GeditAppClass;
-
-struct _GeditAppClass
-{
- GObjectClass parent_class;
-};
-
-/*
- * Lockdown mask definition
- */
-typedef enum
-{
- GEDIT_LOCKDOWN_COMMAND_LINE = 1 << 0,
- GEDIT_LOCKDOWN_PRINTING = 1 << 1,
- GEDIT_LOCKDOWN_PRINT_SETUP = 1 << 2,
- GEDIT_LOCKDOWN_SAVE_TO_DISK = 1 << 3,
- GEDIT_LOCKDOWN_ALL = 0xF
-} GeditLockdownMask;
-
-/*
- * Public methods
- */
-GType gedit_app_get_type (void) G_GNUC_CONST;
-
-GeditApp *gedit_app_get_default (void);
-
-GeditWindow *gedit_app_create_window (GeditApp *app,
- GdkScreen *screen);
-
-const GList *gedit_app_get_windows (GeditApp *app);
-GeditWindow *gedit_app_get_active_window (GeditApp *app);
-
-/* Returns a newly allocated list with all the documents */
-GList *gedit_app_get_documents (GeditApp *app);
-
-/* Returns a newly allocated list with all the views */
-GList *gedit_app_get_views (GeditApp *app);
-
-/* Lockdown state */
-GeditLockdownMask gedit_app_get_lockdown (GeditApp *app);
-
-/*
- * Non exported functions
- */
-GeditWindow *_gedit_app_restore_window (GeditApp *app,
- const gchar *role);
-GeditWindow *_gedit_app_get_window_in_viewport (GeditApp *app,
- GdkScreen *screen,
- gint workspace,
- gint viewport_x,
- gint viewport_y);
-void _gedit_app_set_lockdown (GeditApp *app,
- GeditLockdownMask lockdown);
-void _gedit_app_set_lockdown_bit (GeditApp *app,
- GeditLockdownMask bit,
- gboolean value);
-/*
- * This one is a gedit-window function, but we declare it here to avoid
- * #include headaches since it needs the GeditLockdownMask declaration.
- */
-void _gedit_window_set_lockdown (GeditWindow *window,
- GeditLockdownMask lockdown);
-
-/* global print config */
-GtkPageSetup *_gedit_app_get_default_page_setup (GeditApp *app);
-void _gedit_app_set_default_page_setup (GeditApp *app,
- GtkPageSetup *page_setup);
-GtkPrintSettings *_gedit_app_get_default_print_settings (GeditApp *app);
-void _gedit_app_set_default_print_settings (GeditApp *app,
- GtkPrintSettings *settings);
-
-G_END_DECLS
-
-#endif /* __GEDIT_APP_H__ */
diff --git a/gedit/gedit-close-button.c b/gedit/gedit-close-button.c
deleted file mode 100755
index 0e9f157e..00000000
--- a/gedit/gedit-close-button.c
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * gedit-close-button.c
- * This file is part of gedit
- *
- * Copyright (C) 2010 - Paolo Borelli
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#include "gedit-close-button.h"
-
-G_DEFINE_TYPE (GeditCloseButton, gedit_close_button, GTK_TYPE_BUTTON)
-
-static void
-gedit_close_button_style_set (GtkWidget *button,
- GtkStyle *previous_style)
-{
- gint h, w;
-
- gtk_icon_size_lookup_for_settings (gtk_widget_get_settings (button),
- GTK_ICON_SIZE_MENU, &w, &h);
-
- gtk_widget_set_size_request (button, w + 2, h + 2);
-
- GTK_WIDGET_CLASS (gedit_close_button_parent_class)->style_set (button, previous_style);
-}
-
-static void
-gedit_close_button_class_init (GeditCloseButtonClass *klass)
-{
- GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
-
- widget_class->style_set = gedit_close_button_style_set;
-}
-
-static void
-gedit_close_button_init (GeditCloseButton *button)
-{
- GtkRcStyle *rcstyle;
- GtkWidget *image;
-
- /* make it as small as possible */
- rcstyle = gtk_rc_style_new ();
- rcstyle->xthickness = rcstyle->ythickness = 0;
- gtk_widget_modify_style (GTK_WIDGET (button), rcstyle);
- g_object_unref (rcstyle);
-
- image = gtk_image_new_from_stock (GTK_STOCK_CLOSE,
- GTK_ICON_SIZE_MENU);
- gtk_widget_show (image);
-
- gtk_container_add (GTK_CONTAINER (button), image);
-}
-
-GtkWidget *
-gedit_close_button_new ()
-{
- GeditCloseButton *button;
-
- button = g_object_new (GEDIT_TYPE_CLOSE_BUTTON,
- "relief", GTK_RELIEF_NONE,
- "focus-on-click", FALSE,
- NULL);
-
- return GTK_WIDGET (button);
-}
-
diff --git a/gedit/gedit-close-button.h b/gedit/gedit-close-button.h
deleted file mode 100755
index 4f631380..00000000
--- a/gedit/gedit-close-button.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * gedit-close-button.h
- * This file is part of gedit
- *
- * Copyright (C) 2010 - Paolo Borelli
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#ifndef __GEDIT_CLOSE_BUTTON_H__
-#define __GEDIT_CLOSE_BUTTON_H__
-
-#include <gtk/gtk.h>
-
-G_BEGIN_DECLS
-
-#define GEDIT_TYPE_CLOSE_BUTTON (gedit_close_button_get_type ())
-#define GEDIT_CLOSE_BUTTON(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEDIT_TYPE_CLOSE_BUTTON, GeditCloseButton))
-#define GEDIT_CLOSE_BUTTON_CONST(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEDIT_TYPE_CLOSE_BUTTON, GeditCloseButton const))
-#define GEDIT_CLOSE_BUTTON_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEDIT_TYPE_CLOSE_BUTTON, GeditCloseButtonClass))
-#define GEDIT_IS_CLOSE_BUTTON(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEDIT_TYPE_CLOSE_BUTTON))
-#define GEDIT_IS_CLOSE_BUTTON_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEDIT_TYPE_CLOSE_BUTTON))
-#define GEDIT_CLOSE_BUTTON_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEDIT_TYPE_CLOSE_BUTTON, GeditCloseButtonClass))
-
-typedef struct _GeditCloseButton GeditCloseButton;
-typedef struct _GeditCloseButtonClass GeditCloseButtonClass;
-typedef struct _GeditCloseButtonPrivate GeditCloseButtonPrivate;
-
-struct _GeditCloseButton {
- GtkButton parent;
-};
-
-struct _GeditCloseButtonClass {
- GtkButtonClass parent_class;
-};
-
-GType gedit_close_button_get_type (void) G_GNUC_CONST;
-
-GtkWidget *gedit_close_button_new (void);
-
-G_END_DECLS
-
-#endif /* __GEDIT_CLOSE_BUTTON_H__ */
diff --git a/gedit/gedit-commands-documents.c b/gedit/gedit-commands-documents.c
deleted file mode 100755
index 016ebbe8..00000000
--- a/gedit/gedit-commands-documents.c
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * gedit-documents-commands.c
- * This file is part of gedit
- *
- * Copyright (C) 1998, 1999 Alex Roberts, Evan Lawrence
- * Copyright (C) 2000, 2001 Chema Celorio, Paolo Maggi
- * Copyright (C) 2002-2005 Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 1998-2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <gtk/gtk.h>
-
-#include "gedit-commands.h"
-#include "gedit-window.h"
-#include "gedit-notebook.h"
-#include "gedit-debug.h"
-
-void
-_gedit_cmd_documents_previous_document (GtkAction *action,
- GeditWindow *window)
-{
- GtkNotebook *notebook;
-
- gedit_debug (DEBUG_COMMANDS);
-
- notebook = GTK_NOTEBOOK (_gedit_window_get_notebook (window));
- gtk_notebook_prev_page (notebook);
-}
-
-void
-_gedit_cmd_documents_next_document (GtkAction *action,
- GeditWindow *window)
-{
- GtkNotebook *notebook;
-
- gedit_debug (DEBUG_COMMANDS);
-
- notebook = GTK_NOTEBOOK (_gedit_window_get_notebook (window));
- gtk_notebook_next_page (notebook);
-}
-
-void
-_gedit_cmd_documents_move_to_new_window (GtkAction *action,
- GeditWindow *window)
-{
- GeditNotebook *old_notebook;
- GeditTab *tab;
-
- gedit_debug (DEBUG_COMMANDS);
-
- tab = gedit_window_get_active_tab (window);
-
- if (tab == NULL)
- return;
-
- old_notebook = GEDIT_NOTEBOOK (_gedit_window_get_notebook (window));
-
- g_return_if_fail (gtk_notebook_get_n_pages (GTK_NOTEBOOK (old_notebook)) > 1);
-
- _gedit_window_move_tab_to_new_window (window, tab);
-}
diff --git a/gedit/gedit-commands-edit.c b/gedit/gedit-commands-edit.c
deleted file mode 100755
index e2cedeb6..00000000
--- a/gedit/gedit-commands-edit.c
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
- * gedit-commands-edit.c
- * This file is part of gedit
- *
- * Copyright (C) 1998, 1999 Alex Roberts, Evan Lawrence
- * Copyright (C) 2000, 2001 Chema Celorio, Paolo Maggi
- * Copyright (C) 2002-2005 Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 1998-2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <gtk/gtk.h>
-
-#include "gedit-commands.h"
-#include "gedit-window.h"
-#include "gedit-debug.h"
-#include "gedit-view.h"
-#include "dialogs/gedit-preferences-dialog.h"
-
-void
-_gedit_cmd_edit_undo (GtkAction *action,
- GeditWindow *window)
-{
- GeditView *active_view;
- GtkSourceBuffer *active_document;
-
- gedit_debug (DEBUG_COMMANDS);
-
- active_view = gedit_window_get_active_view (window);
- g_return_if_fail (active_view);
-
- active_document = GTK_SOURCE_BUFFER (gtk_text_view_get_buffer (GTK_TEXT_VIEW (active_view)));
-
- gtk_source_buffer_undo (active_document);
-
- gedit_view_scroll_to_cursor (active_view);
-
- gtk_widget_grab_focus (GTK_WIDGET (active_view));
-}
-
-void
-_gedit_cmd_edit_redo (GtkAction *action,
- GeditWindow *window)
-{
- GeditView *active_view;
- GtkSourceBuffer *active_document;
-
- gedit_debug (DEBUG_COMMANDS);
-
- active_view = gedit_window_get_active_view (window);
- g_return_if_fail (active_view);
-
- active_document = GTK_SOURCE_BUFFER (gtk_text_view_get_buffer (GTK_TEXT_VIEW (active_view)));
-
- gtk_source_buffer_redo (active_document);
-
- gedit_view_scroll_to_cursor (active_view);
-
- gtk_widget_grab_focus (GTK_WIDGET (active_view));
-}
-
-void
-_gedit_cmd_edit_cut (GtkAction *action,
- GeditWindow *window)
-{
- GeditView *active_view;
-
- gedit_debug (DEBUG_COMMANDS);
-
- active_view = gedit_window_get_active_view (window);
- g_return_if_fail (active_view);
-
- gedit_view_cut_clipboard (active_view);
-
- gtk_widget_grab_focus (GTK_WIDGET (active_view));
-}
-
-void
-_gedit_cmd_edit_copy (GtkAction *action,
- GeditWindow *window)
-{
- GeditView *active_view;
-
- gedit_debug (DEBUG_COMMANDS);
-
- active_view = gedit_window_get_active_view (window);
- g_return_if_fail (active_view);
-
- gedit_view_copy_clipboard (active_view);
-
- gtk_widget_grab_focus (GTK_WIDGET (active_view));
-}
-
-void
-_gedit_cmd_edit_paste (GtkAction *action,
- GeditWindow *window)
-{
- GeditView *active_view;
-
- gedit_debug (DEBUG_COMMANDS);
-
- active_view = gedit_window_get_active_view (window);
- g_return_if_fail (active_view);
-
- gedit_view_paste_clipboard (active_view);
-
- gtk_widget_grab_focus (GTK_WIDGET (active_view));
-}
-
-void
-_gedit_cmd_edit_delete (GtkAction *action,
- GeditWindow *window)
-{
- GeditView *active_view;
-
- gedit_debug (DEBUG_COMMANDS);
-
- active_view = gedit_window_get_active_view (window);
- g_return_if_fail (active_view);
-
- gedit_view_delete_selection (active_view);
-
- gtk_widget_grab_focus (GTK_WIDGET (active_view));
-}
-
-void
-_gedit_cmd_edit_select_all (GtkAction *action,
- GeditWindow *window)
-{
- GeditView *active_view;
-
- gedit_debug (DEBUG_COMMANDS);
-
- active_view = gedit_window_get_active_view (window);
- g_return_if_fail (active_view);
-
- gedit_view_select_all (active_view);
-
- gtk_widget_grab_focus (GTK_WIDGET (active_view));
-}
-
-void
-_gedit_cmd_edit_preferences (GtkAction *action,
- GeditWindow *window)
-{
- gedit_debug (DEBUG_COMMANDS);
-
- gedit_show_preferences_dialog (window);
-}
diff --git a/gedit/gedit-commands-file-print.c b/gedit/gedit-commands-file-print.c
deleted file mode 100755
index 455e2e21..00000000
--- a/gedit/gedit-commands-file-print.c
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * gedit-commands-file-print.c
- * This file is part of gedit
- *
- * Copyright (C) 1998, 1999 Alex Roberts, Evan Lawrence
- * Copyright (C) 2000, 2001 Chema Celorio, Paolo Maggi
- * Copyright (C) 2002-2005 Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 1998-2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <glib/gi18n.h>
-#include <gtk/gtk.h>
-
-#include "gedit-commands.h"
-#include "gedit-window.h"
-#include "gedit-tab.h"
-#include "gedit-debug.h"
-
-#if !GTK_CHECK_VERSION (2, 17, 4)
-void
-_gedit_cmd_file_page_setup (GtkAction *action,
- GeditWindow *window)
-{
- GeditTab *tab;
-
- gedit_debug (DEBUG_COMMANDS);
-
- tab = gedit_window_get_active_tab (window);
- if (tab == NULL)
- return;
-
- _gedit_tab_page_setup (tab);
-}
-#endif
-
-void
-_gedit_cmd_file_print_preview (GtkAction *action,
- GeditWindow *window)
-{
- GeditTab *tab;
-
- gedit_debug (DEBUG_COMMANDS);
-
- tab = gedit_window_get_active_tab (window);
- if (tab == NULL)
- return;
-
- _gedit_tab_print_preview (tab);
-}
-
-void
-_gedit_cmd_file_print (GtkAction *action,
- GeditWindow *window)
-{
- GeditTab *tab;
-
- gedit_debug (DEBUG_COMMANDS);
-
- tab = gedit_window_get_active_tab (window);
- if (tab == NULL)
- return;
-
- _gedit_tab_print (tab);
-}
-
diff --git a/gedit/gedit-commands-file.c b/gedit/gedit-commands-file.c
deleted file mode 100755
index 985b0417..00000000
--- a/gedit/gedit-commands-file.c
+++ /dev/null
@@ -1,1885 +0,0 @@
-/*
- * gedit-commands-file.c
- * This file is part of gedit
- *
- * Copyright (C) 1998, 1999 Alex Roberts, Evan Lawrence
- * Copyright (C) 2000, 2001 Chema Celorio, Paolo Maggi
- * Copyright (C) 2002-2005 Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 1998-2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <string.h> /* For strlen and strcmp */
-
-#include <glib/gi18n.h>
-#include <gio/gio.h>
-#include <gtk/gtk.h>
-
-#include "gedit-commands.h"
-#include "gedit-window.h"
-#include "gedit-window-private.h"
-#include "gedit-statusbar.h"
-#include "gedit-debug.h"
-#include "gedit-utils.h"
-#include "gedit-file-chooser-dialog.h"
-#include "dialogs/gedit-close-confirmation-dialog.h"
-
-
-/* Defined constants */
-#define GEDIT_OPEN_DIALOG_KEY "gedit-open-dialog-key"
-#define GEDIT_TAB_TO_SAVE_AS "gedit-tab-to-save-as"
-#define GEDIT_LIST_OF_TABS_TO_SAVE_AS "gedit-list-of-tabs-to-save-as"
-#define GEDIT_IS_CLOSING_ALL "gedit-is-closing-all"
-#define GEDIT_IS_QUITTING "gedit-is-quitting"
-#define GEDIT_IS_CLOSING_TAB "gedit-is-closing-tab"
-#define GEDIT_IS_QUITTING_ALL "gedit-is-quitting-all"
-
-static void tab_state_changed_while_saving (GeditTab *tab,
- GParamSpec *pspec,
- GeditWindow *window);
-
-void
-_gedit_cmd_file_new (GtkAction *action,
- GeditWindow *window)
-{
- gedit_debug (DEBUG_COMMANDS);
-
- gedit_window_create_tab (window, TRUE);
-}
-
-static GeditTab *
-get_tab_from_file (GList *docs, GFile *file)
-{
- GeditTab *tab = NULL;
-
- while (docs != NULL)
- {
- GeditDocument *d;
- GFile *l;
-
- d = GEDIT_DOCUMENT (docs->data);
-
- l = gedit_document_get_location (d);
- if (l != NULL)
- {
- if (g_file_equal (l, file))
- {
- tab = gedit_tab_get_from_document (d);
- g_object_unref (l);
- break;
- }
-
- g_object_unref (l);
- }
-
- docs = g_list_next (docs);
- }
-
- return tab;
-}
-
-static gboolean
-is_duplicated_file (GSList *files, GFile *file)
-{
- while (files != NULL)
- {
- if (g_file_equal (files->data, file))
- return TRUE;
-
- files = g_slist_next (files);
- }
-
- return FALSE;
-}
-
-/* File loading */
-static gint
-load_file_list (GeditWindow *window,
- GSList *files,
- const GeditEncoding *encoding,
- gint line_pos,
- gboolean create)
-{
- GeditTab *tab;
- gint loaded_files = 0; /* Number of files to load */
- gboolean jump_to = TRUE; /* Whether to jump to the new tab */
- GList *win_docs;
- GSList *files_to_load = NULL;
- GSList *l;
-
- gedit_debug (DEBUG_COMMANDS);
-
- win_docs = gedit_window_get_documents (window);
-
- /* Remove the uris corresponding to documents already open
- * in "window" and remove duplicates from "uris" list */
- for (l = files; l != NULL; l = l->next)
- {
- if (!is_duplicated_file (files_to_load, l->data))
- {
- tab = get_tab_from_file (win_docs, l->data);
- if (tab != NULL)
- {
- if (l == files)
- {
- gedit_window_set_active_tab (window, tab);
- jump_to = FALSE;
-
- if (line_pos > 0)
- {
- GeditDocument *doc;
- GeditView *view;
-
- doc = gedit_tab_get_document (tab);
- view = gedit_tab_get_view (tab);
-
- /* document counts lines starting from 0 */
- gedit_document_goto_line (doc, line_pos - 1);
- gedit_view_scroll_to_cursor (view);
- }
- }
-
- ++loaded_files;
- }
- else
- {
- files_to_load = g_slist_prepend (files_to_load,
- l->data);
- }
- }
- }
-
- g_list_free (win_docs);
-
- if (files_to_load == NULL)
- return loaded_files;
-
- files_to_load = g_slist_reverse (files_to_load);
- l = files_to_load;
-
- tab = gedit_window_get_active_tab (window);
- if (tab != NULL)
- {
- GeditDocument *doc;
-
- doc = gedit_tab_get_document (tab);
-
- if (gedit_document_is_untouched (doc) &&
- (gedit_tab_get_state (tab) == GEDIT_TAB_STATE_NORMAL))
- {
- gchar *uri;
-
- // FIXME: pass the GFile to tab when api is there
- uri = g_file_get_uri (l->data);
- _gedit_tab_load (tab,
- uri,
- encoding,
- line_pos,
- create);
- g_free (uri);
-
- l = g_slist_next (l);
- jump_to = FALSE;
-
- ++loaded_files;
- }
- }
-
- while (l != NULL)
- {
- gchar *uri;
-
- g_return_val_if_fail (l->data != NULL, 0);
-
- // FIXME: pass the GFile to tab when api is there
- uri = g_file_get_uri (l->data);
- tab = gedit_window_create_tab_from_uri (window,
- uri,
- encoding,
- line_pos,
- create,
- jump_to);
- g_free (uri);
-
- if (tab != NULL)
- {
- jump_to = FALSE;
- ++loaded_files;
- }
-
- l = g_slist_next (l);
- }
-
- if (loaded_files == 1)
- {
- GeditDocument *doc;
- gchar *uri_for_display;
-
- g_return_val_if_fail (tab != NULL, loaded_files);
-
- doc = gedit_tab_get_document (tab);
- uri_for_display = gedit_document_get_uri_for_display (doc);
-
- gedit_statusbar_flash_message (GEDIT_STATUSBAR (window->priv->statusbar),
- window->priv->generic_message_cid,
- _("Loading file '%s'\342\200\246"),
- uri_for_display);
-
- g_free (uri_for_display);
- }
- else
- {
- gedit_statusbar_flash_message (GEDIT_STATUSBAR (window->priv->statusbar),
- window->priv->generic_message_cid,
- ngettext("Loading %d file\342\200\246",
- "Loading %d files\342\200\246",
- loaded_files),
- loaded_files);
- }
-
- /* Free uris_to_load. Note that l points to the first element of uris_to_load */
- g_slist_free (files_to_load);
-
- return loaded_files;
-}
-
-
-// FIXME: we should expose API with GFile and just make the uri
-// variants backward compat wrappers
-
-static gint
-load_uri_list (GeditWindow *window,
- const GSList *uris,
- const GeditEncoding *encoding,
- gint line_pos,
- gboolean create)
-{
- GSList *files = NULL;
- const GSList *u;
- gint ret;
-
- for (u = uris; u != NULL; u = u->next)
- {
- gchar *uri = u->data;
-
- if (gedit_utils_is_valid_uri (uri))
- files = g_slist_prepend (files, g_file_new_for_uri (uri));
- else
- g_warning ("invalid uri: %s", uri);
- }
- files = g_slist_reverse (files);
-
- ret = load_file_list (window, files, encoding, line_pos, create);
-
- g_slist_foreach (files, (GFunc) g_object_unref, NULL);
- g_slist_free (files);
-
- return ret;
-}
-
-/**
- * gedit_commands_load_uri:
- *
- * Do nothing if URI does not exist
- */
-void
-gedit_commands_load_uri (GeditWindow *window,
- const gchar *uri,
- const GeditEncoding *encoding,
- gint line_pos)
-{
- GSList *uris = NULL;
-
- g_return_if_fail (GEDIT_IS_WINDOW (window));
- g_return_if_fail (uri != NULL);
- g_return_if_fail (gedit_utils_is_valid_uri (uri));
-
- gedit_debug_message (DEBUG_COMMANDS, "Loading URI '%s'", uri);
-
- uris = g_slist_prepend (uris, (gchar *)uri);
-
- load_uri_list (window, uris, encoding, line_pos, FALSE);
-
- g_slist_free (uris);
-}
-
-/**
- * gedit_commands_load_uris:
- *
- * Ignore non-existing URIs
- */
-gint
-gedit_commands_load_uris (GeditWindow *window,
- const GSList *uris,
- const GeditEncoding *encoding,
- gint line_pos)
-{
- g_return_val_if_fail (GEDIT_IS_WINDOW (window), 0);
- g_return_val_if_fail ((uris != NULL) && (uris->data != NULL), 0);
-
- gedit_debug (DEBUG_COMMANDS);
-
- return load_uri_list (window, uris, encoding, line_pos, FALSE);
-}
-
-/*
- * This should become public once we convert all api to GFile:
- */
-static gint
-gedit_commands_load_files (GeditWindow *window,
- GSList *files,
- const GeditEncoding *encoding,
- gint line_pos)
-{
- g_return_val_if_fail (GEDIT_IS_WINDOW (window), 0);
- g_return_val_if_fail ((files != NULL) && (files->data != NULL), 0);
-
- gedit_debug (DEBUG_COMMANDS);
-
- return load_file_list (window, files, encoding, line_pos, FALSE);
-}
-
-/*
- * From the command line we can specify a line position for the
- * first doc. Beside specifying a not existing uri creates a
- * titled document.
- */
-gint
-_gedit_cmd_load_files_from_prompt (GeditWindow *window,
- GSList *files,
- const GeditEncoding *encoding,
- gint line_pos)
-{
- gedit_debug (DEBUG_COMMANDS);
-
- return load_file_list (window, files, encoding, line_pos, TRUE);
-}
-
-static void
-open_dialog_destroyed (GeditWindow *window,
- GeditFileChooserDialog *dialog)
-{
- gedit_debug (DEBUG_COMMANDS);
-
- g_object_set_data (G_OBJECT (window),
- GEDIT_OPEN_DIALOG_KEY,
- NULL);
-}
-
-static void
-open_dialog_response_cb (GeditFileChooserDialog *dialog,
- gint response_id,
- GeditWindow *window)
-{
- GSList *files;
- const GeditEncoding *encoding;
-
- gedit_debug (DEBUG_COMMANDS);
-
- if (response_id != GTK_RESPONSE_OK)
- {
- gtk_widget_destroy (GTK_WIDGET (dialog));
-
- return;
- }
-
- files = gtk_file_chooser_get_files (GTK_FILE_CHOOSER (dialog));
- g_return_if_fail (files != NULL);
-
- encoding = gedit_file_chooser_dialog_get_encoding (dialog);
-
- gtk_widget_destroy (GTK_WIDGET (dialog));
-
- /* Remember the folder we navigated to */
- _gedit_window_set_default_location (window, files->data);
-
- gedit_commands_load_files (window,
- files,
- encoding,
- 0);
-
- g_slist_foreach (files, (GFunc) g_object_unref, NULL);
- g_slist_free (files);
-}
-
-void
-_gedit_cmd_file_open (GtkAction *action,
- GeditWindow *window)
-{
- GtkWidget *open_dialog;
- gpointer data;
- GeditDocument *doc;
- GFile *default_path = NULL;
-
- gedit_debug (DEBUG_COMMANDS);
-
- data = g_object_get_data (G_OBJECT (window), GEDIT_OPEN_DIALOG_KEY);
-
- if (data != NULL)
- {
- g_return_if_fail (GEDIT_IS_FILE_CHOOSER_DIALOG (data));
-
- gtk_window_present (GTK_WINDOW (data));
-
- return;
- }
-
- /* Translators: "Open Files" is the title of the file chooser window */
- open_dialog = gedit_file_chooser_dialog_new (_("Open Files"),
- GTK_WINDOW (window),
- GTK_FILE_CHOOSER_ACTION_OPEN,
- NULL,
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- GTK_STOCK_OPEN, GTK_RESPONSE_OK,
- NULL);
-
- g_object_set_data (G_OBJECT (window),
- GEDIT_OPEN_DIALOG_KEY,
- open_dialog);
-
- g_object_weak_ref (G_OBJECT (open_dialog),
- (GWeakNotify) open_dialog_destroyed,
- window);
-
- /* Set the curret folder uri */
- doc = gedit_window_get_active_document (window);
- if (doc != NULL)
- {
- GFile *file;
-
- file = gedit_document_get_location (doc);
-
- if (file != NULL)
- {
- default_path = g_file_get_parent (file);
- g_object_unref (file);
- }
- }
-
- if (default_path == NULL)
- default_path = _gedit_window_get_default_location (window);
-
- if (default_path != NULL)
- {
- gchar *uri;
-
- uri = g_file_get_uri (default_path);
- gtk_file_chooser_set_current_folder_uri (GTK_FILE_CHOOSER (open_dialog),
- uri);
-
- g_free (uri);
- g_object_unref (default_path);
- }
-
- g_signal_connect (open_dialog,
- "response",
- G_CALLBACK (open_dialog_response_cb),
- window);
-
- gtk_widget_show (open_dialog);
-}
-
-/* File saving */
-static void file_save_as (GeditTab *tab, GeditWindow *window);
-
-static gboolean
-is_read_only (GFile *location)
-{
- gboolean ret = TRUE; /* default to read only */
- GFileInfo *info;
-
- gedit_debug (DEBUG_COMMANDS);
-
- info = g_file_query_info (location,
- G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE,
- G_FILE_QUERY_INFO_NONE,
- NULL,
- NULL);
-
- if (info != NULL)
- {
- if (g_file_info_has_attribute (info,
- G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE))
- {
- ret = !g_file_info_get_attribute_boolean (info,
- G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE);
- }
-
- g_object_unref (info);
- }
-
- return ret;
-}
-
-/* FIXME: modify this dialog to be similar to the one provided by gtk+ for
- * already existing files - Paolo (Oct. 11, 2005) */
-static gboolean
-replace_read_only_file (GtkWindow *parent, GFile *file)
-{
- GtkWidget *dialog;
- gint ret;
- gchar *parse_name;
- gchar *name_for_display;
-
- gedit_debug (DEBUG_COMMANDS);
-
- parse_name = g_file_get_parse_name (file);
-
- /* Truncate the name so it doesn't get insanely wide. Note that even
- * though the dialog uses wrapped text, if the name doesn't contain
- * white space then the text-wrapping code is too stupid to wrap it.
- */
- name_for_display = gedit_utils_str_middle_truncate (parse_name, 50);
- g_free (parse_name);
-
- dialog = gtk_message_dialog_new (parent,
- GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_MESSAGE_QUESTION,
- GTK_BUTTONS_NONE,
- _("The file \"%s\" is read-only."),
- name_for_display);
- g_free (name_for_display);
-
- gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
- _("Do you want to try to replace it "
- "with the one you are saving?"));
-
- gtk_dialog_add_button (GTK_DIALOG (dialog),
- GTK_STOCK_CANCEL,
- GTK_RESPONSE_CANCEL);
-
- gedit_dialog_add_button (GTK_DIALOG (dialog),
- _("_Replace"),
- GTK_STOCK_SAVE_AS,
- GTK_RESPONSE_YES);
-
- gtk_dialog_set_default_response (GTK_DIALOG (dialog),
- GTK_RESPONSE_CANCEL);
-
- gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE);
-
- ret = gtk_dialog_run (GTK_DIALOG (dialog));
-
- gtk_widget_destroy (dialog);
-
- return (ret == GTK_RESPONSE_YES);
-}
-
-static void
-save_dialog_response_cb (GeditFileChooserDialog *dialog,
- gint response_id,
- GeditWindow *window)
-{
- GFile *file;
- const GeditEncoding *encoding;
- GeditTab *tab;
- gpointer data;
- GSList *tabs_to_save_as;
- GeditDocumentNewlineType newline_type;
-
- gedit_debug (DEBUG_COMMANDS);
-
- tab = GEDIT_TAB (g_object_get_data (G_OBJECT (dialog),
- GEDIT_TAB_TO_SAVE_AS));
-
- if (response_id != GTK_RESPONSE_OK)
- {
- gtk_widget_destroy (GTK_WIDGET (dialog));
-
- goto save_next_tab;
- }
-
- file = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (dialog));
- g_return_if_fail (file != NULL);
-
- encoding = gedit_file_chooser_dialog_get_encoding (dialog);
- newline_type = gedit_file_chooser_dialog_get_newline_type (dialog);
-
- gtk_widget_destroy (GTK_WIDGET (dialog));
-
- if (tab != NULL)
- {
- GeditDocument *doc;
- gchar *parse_name;
- gchar *uri;
-
- doc = gedit_tab_get_document (tab);
- g_return_if_fail (GEDIT_IS_DOCUMENT (doc));
-
- parse_name = g_file_get_parse_name (file);
-
- gedit_statusbar_flash_message (GEDIT_STATUSBAR (window->priv->statusbar),
- window->priv->generic_message_cid,
- _("Saving file '%s'\342\200\246"),
- parse_name);
-
- g_free (parse_name);
-
- /* let's remember the dir we navigated too,
- * even if the saving fails... */
- _gedit_window_set_default_location (window, file);
-
- // FIXME: pass the GFile to tab when api is there
- uri = g_file_get_uri (file);
- _gedit_tab_save_as (tab, uri, encoding, newline_type);
- g_free (uri);
- }
-
- g_object_unref (file);
-
-save_next_tab:
-
- data = g_object_get_data (G_OBJECT (window),
- GEDIT_LIST_OF_TABS_TO_SAVE_AS);
- if (data == NULL)
- return;
-
- /* Save As the next tab of the list (we are Saving All files) */
- tabs_to_save_as = (GSList *)data;
- g_return_if_fail (tab == GEDIT_TAB (tabs_to_save_as->data));
-
- /* Remove the first item of the list */
- tabs_to_save_as = g_slist_delete_link (tabs_to_save_as,
- tabs_to_save_as);
-
- g_object_set_data (G_OBJECT (window),
- GEDIT_LIST_OF_TABS_TO_SAVE_AS,
- tabs_to_save_as);
-
- if (tabs_to_save_as != NULL)
- {
- tab = GEDIT_TAB (tabs_to_save_as->data);
-
- if (GPOINTER_TO_BOOLEAN (g_object_get_data (G_OBJECT (tab),
- GEDIT_IS_CLOSING_TAB)) == TRUE)
- {
- g_object_set_data (G_OBJECT (tab),
- GEDIT_IS_CLOSING_TAB,
- NULL);
-
- /* Trace tab state changes */
- g_signal_connect (tab,
- "notify::state",
- G_CALLBACK (tab_state_changed_while_saving),
- window);
- }
-
- gedit_window_set_active_tab (window, tab);
- file_save_as (tab, window);
- }
-}
-
-static GtkFileChooserConfirmation
-confirm_overwrite_callback (GtkFileChooser *dialog,
- gpointer data)
-{
- gchar *uri;
- GFile *file;
- GtkFileChooserConfirmation res;
-
- gedit_debug (DEBUG_COMMANDS);
-
- uri = gtk_file_chooser_get_uri (dialog);
- file = g_file_new_for_uri (uri);
- g_free (uri);
-
- if (is_read_only (file))
- {
- if (replace_read_only_file (GTK_WINDOW (dialog), file))
- res = GTK_FILE_CHOOSER_CONFIRMATION_ACCEPT_FILENAME;
- else
- res = GTK_FILE_CHOOSER_CONFIRMATION_SELECT_AGAIN;
- }
- else
- {
- /* fall back to the default confirmation dialog */
- res = GTK_FILE_CHOOSER_CONFIRMATION_CONFIRM;
- }
-
- g_object_unref (file);
-
- return res;
-}
-
-static void
-file_save_as (GeditTab *tab,
- GeditWindow *window)
-{
- GtkWidget *save_dialog;
- GtkWindowGroup *wg;
- GeditDocument *doc;
- GFile *file;
- gboolean uri_set = FALSE;
- const GeditEncoding *encoding;
- GeditDocumentNewlineType newline_type;
-
- g_return_if_fail (GEDIT_IS_TAB (tab));
- g_return_if_fail (GEDIT_IS_WINDOW (window));
-
- gedit_debug (DEBUG_COMMANDS);
-
- save_dialog = gedit_file_chooser_dialog_new (_("Save As\342\200\246"),
- GTK_WINDOW (window),
- GTK_FILE_CHOOSER_ACTION_SAVE,
- NULL,
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- GTK_STOCK_SAVE, GTK_RESPONSE_OK,
- NULL);
-
- gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (save_dialog),
- TRUE);
- g_signal_connect (save_dialog,
- "confirm-overwrite",
- G_CALLBACK (confirm_overwrite_callback),
- NULL);
-
- wg = gedit_window_get_group (window);
-
- gtk_window_group_add_window (wg,
- GTK_WINDOW (save_dialog));
-
- /* Save As dialog is modal to its main window */
- gtk_window_set_modal (GTK_WINDOW (save_dialog), TRUE);
-
- /* Set the suggested file name */
- doc = gedit_tab_get_document (tab);
- file = gedit_document_get_location (doc);
-
- if (file != NULL)
- {
- uri_set = gtk_file_chooser_set_file (GTK_FILE_CHOOSER (save_dialog),
- file,
- NULL);
-
- g_object_unref (file);
- }
-
-
- if (!uri_set)
- {
- GFile *default_path;
- gchar *docname;
-
- default_path = _gedit_window_get_default_location (window);
- docname = gedit_document_get_short_name_for_display (doc);
-
- if (default_path != NULL)
- {
- gchar *uri;
-
- uri = g_file_get_uri (default_path);
- gtk_file_chooser_set_current_folder_uri (GTK_FILE_CHOOSER (save_dialog),
- uri);
-
- g_free (uri);
- g_object_unref (default_path);
- }
-
- gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (save_dialog),
- docname);
-
- g_free (docname);
- }
-
- /* Set suggested encoding */
- encoding = gedit_document_get_encoding (doc);
- g_return_if_fail (encoding != NULL);
-
- newline_type = gedit_document_get_newline_type (doc);
-
- gedit_file_chooser_dialog_set_encoding (GEDIT_FILE_CHOOSER_DIALOG (save_dialog),
- encoding);
-
- gedit_file_chooser_dialog_set_newline_type (GEDIT_FILE_CHOOSER_DIALOG (save_dialog),
- newline_type);
-
- g_object_set_data (G_OBJECT (save_dialog),
- GEDIT_TAB_TO_SAVE_AS,
- tab);
-
- g_signal_connect (save_dialog,
- "response",
- G_CALLBACK (save_dialog_response_cb),
- window);
-
- gtk_widget_show (save_dialog);
-}
-
-static void
-file_save (GeditTab *tab,
- GeditWindow *window)
-{
- GeditDocument *doc;
- gchar *uri_for_display;
-
- gedit_debug (DEBUG_COMMANDS);
-
- g_return_if_fail (GEDIT_IS_TAB (tab));
- g_return_if_fail (GEDIT_IS_WINDOW (window));
-
- doc = gedit_tab_get_document (tab);
- g_return_if_fail (GEDIT_IS_DOCUMENT (doc));
-
- if (gedit_document_is_untitled (doc) ||
- gedit_document_get_readonly (doc))
- {
- gedit_debug_message (DEBUG_COMMANDS, "Untitled or Readonly");
-
- file_save_as (tab, window);
-
- return;
- }
-
- uri_for_display = gedit_document_get_uri_for_display (doc);
- gedit_statusbar_flash_message (GEDIT_STATUSBAR (window->priv->statusbar),
- window->priv->generic_message_cid,
- _("Saving file '%s'\342\200\246"),
- uri_for_display);
-
- g_free (uri_for_display);
-
- _gedit_tab_save (tab);
-}
-
-void
-_gedit_cmd_file_save (GtkAction *action,
- GeditWindow *window)
-{
- GeditTab *tab;
-
- gedit_debug (DEBUG_COMMANDS);
-
- tab = gedit_window_get_active_tab (window);
- if (tab == NULL)
- return;
-
- file_save (tab, window);
-}
-
-void
-_gedit_cmd_file_save_as (GtkAction *action,
- GeditWindow *window)
-{
- GeditTab *tab;
-
- gedit_debug (DEBUG_COMMANDS);
-
- tab = gedit_window_get_active_tab (window);
- if (tab == NULL)
- return;
-
- file_save_as (tab, window);
-}
-
-static gboolean
-document_needs_saving (GeditDocument *doc)
-{
- if (gtk_text_buffer_get_modified (GTK_TEXT_BUFFER (doc)))
- return TRUE;
-
- /* we check if it was deleted only for local files
- * since for remote files it may hang */
- if (gedit_document_is_local (doc) && gedit_document_get_deleted (doc))
- return TRUE;
-
- return FALSE;
-}
-
-/*
- * The docs in the list must belong to the same GeditWindow.
- */
-void
-_gedit_cmd_file_save_documents_list (GeditWindow *window,
- GList *docs)
-{
- GList *l;
- GSList *tabs_to_save_as = NULL;
-
- gedit_debug (DEBUG_COMMANDS);
-
- g_return_if_fail (!(gedit_window_get_state (window) &
- (GEDIT_WINDOW_STATE_PRINTING |
- GEDIT_WINDOW_STATE_SAVING_SESSION)));
-
- l = docs;
- while (l != NULL)
- {
- GeditDocument *doc;
- GeditTab *t;
- GeditTabState state;
-
- g_return_if_fail (GEDIT_IS_DOCUMENT (l->data));
-
- doc = GEDIT_DOCUMENT (l->data);
- t = gedit_tab_get_from_document (doc);
- state = gedit_tab_get_state (t);
-
- g_return_if_fail (state != GEDIT_TAB_STATE_PRINTING);
- g_return_if_fail (state != GEDIT_TAB_STATE_PRINT_PREVIEWING);
- g_return_if_fail (state != GEDIT_TAB_STATE_CLOSING);
-
- if ((state == GEDIT_TAB_STATE_NORMAL) ||
- (state == GEDIT_TAB_STATE_SHOWING_PRINT_PREVIEW) ||
- (state == GEDIT_TAB_STATE_GENERIC_NOT_EDITABLE))
- {
- /* FIXME: manage the case of local readonly files owned by the
- user is running gedit - Paolo (Dec. 8, 2005) */
- if (gedit_document_is_untitled (doc) ||
- gedit_document_get_readonly (doc))
- {
- if (document_needs_saving (doc))
- {
- tabs_to_save_as = g_slist_prepend (tabs_to_save_as,
- t);
- }
- }
- else
- {
- file_save (t, window);
- }
- }
- else
- {
- /* If the state is:
- - GEDIT_TAB_STATE_LOADING: we do not save since we are sure the file is unmodified
- - GEDIT_TAB_STATE_REVERTING: we do not save since the user wants
- to return back to the version of the file she previously saved
- - GEDIT_TAB_STATE_SAVING: well, we are already saving (no need to save again)
- - GEDIT_TAB_STATE_PRINTING, GEDIT_TAB_STATE_PRINT_PREVIEWING: there is not a
- real reason for not saving in this case, we do not save to avoid to run
- two operations using the message area at the same time (may be we can remove
- this limitation in the future). Note that SaveAll, ClosAll
- and Quit are unsensitive if the window state is PRINTING.
- - GEDIT_TAB_STATE_GENERIC_ERROR: we do not save since the document contains
- errors (I don't think this is a very frequent case, we should probably remove
- this state)
- - GEDIT_TAB_STATE_LOADING_ERROR: there is nothing to save
- - GEDIT_TAB_STATE_REVERTING_ERROR: there is nothing to save and saving the current
- document will overwrite the copy of the file the user wants to go back to
- - GEDIT_TAB_STATE_SAVING_ERROR: we do not save since we just failed to save, so there is
- no reason to automatically retry... we wait for user intervention
- - GEDIT_TAB_STATE_CLOSING: this state is invalid in this case
- */
-
- gchar *uri_for_display;
-
- uri_for_display = gedit_document_get_uri_for_display (doc);
- gedit_debug_message (DEBUG_COMMANDS,
- "File '%s' not saved. State: %d",
- uri_for_display,
- state);
- g_free (uri_for_display);
- }
-
- l = g_list_next (l);
- }
-
- if (tabs_to_save_as != NULL)
- {
- GeditTab *tab;
-
- tabs_to_save_as = g_slist_reverse (tabs_to_save_as );
-
- g_return_if_fail (g_object_get_data (G_OBJECT (window),
- GEDIT_LIST_OF_TABS_TO_SAVE_AS) == NULL);
-
- g_object_set_data (G_OBJECT (window),
- GEDIT_LIST_OF_TABS_TO_SAVE_AS,
- tabs_to_save_as);
-
- tab = GEDIT_TAB (tabs_to_save_as->data);
-
- gedit_window_set_active_tab (window, tab);
- file_save_as (tab, window);
- }
-}
-
-void
-gedit_commands_save_all_documents (GeditWindow *window)
-{
- GList *docs;
-
- g_return_if_fail (GEDIT_IS_WINDOW (window));
-
- gedit_debug (DEBUG_COMMANDS);
-
- docs = gedit_window_get_documents (window);
-
- _gedit_cmd_file_save_documents_list (window, docs);
-
- g_list_free (docs);
-}
-
-void
-_gedit_cmd_file_save_all (GtkAction *action,
- GeditWindow *window)
-{
- gedit_commands_save_all_documents (window);
-}
-
-void
-gedit_commands_save_document (GeditWindow *window,
- GeditDocument *document)
-{
- GeditTab *tab;
-
- g_return_if_fail (GEDIT_IS_WINDOW (window));
- g_return_if_fail (GEDIT_IS_DOCUMENT (document));
-
- gedit_debug (DEBUG_COMMANDS);
-
- tab = gedit_tab_get_from_document (document);
- file_save (tab, window);
-}
-
-/* File revert */
-static void
-do_revert (GeditWindow *window,
- GeditTab *tab)
-{
- GeditDocument *doc;
- gchar *docname;
-
- gedit_debug (DEBUG_COMMANDS);
-
- doc = gedit_tab_get_document (tab);
- docname = gedit_document_get_short_name_for_display (doc);
-
- gedit_statusbar_flash_message (GEDIT_STATUSBAR (window->priv->statusbar),
- window->priv->generic_message_cid,
- _("Reverting the document '%s'\342\200\246"),
- docname);
-
- g_free (docname);
-
- _gedit_tab_revert (tab);
-}
-
-static void
-revert_dialog_response_cb (GtkDialog *dialog,
- gint response_id,
- GeditWindow *window)
-{
- GeditTab *tab;
-
- gedit_debug (DEBUG_COMMANDS);
-
- /* FIXME: we are relying on the fact that the dialog is
- modal so the active tab can't be changed...
- not very nice - Paolo (Oct 11, 2005) */
- tab = gedit_window_get_active_tab (window);
- if (tab == NULL)
- return;
-
- gtk_widget_destroy (GTK_WIDGET (dialog));
-
- if (response_id == GTK_RESPONSE_OK)
- {
- do_revert (window, tab);
- }
-}
-
-static GtkWidget *
-revert_dialog (GeditWindow *window,
- GeditDocument *doc)
-{
- GtkWidget *dialog;
- gchar *docname;
- gchar *primary_msg;
- gchar *secondary_msg;
- glong seconds;
-
- gedit_debug (DEBUG_COMMANDS);
-
- docname = gedit_document_get_short_name_for_display (doc);
- primary_msg = g_strdup_printf (_("Revert unsaved changes to document '%s'?"),
- docname);
- g_free (docname);
-
- seconds = MAX (1, _gedit_document_get_seconds_since_last_save_or_load (doc));
-
- if (seconds < 55)
- {
- secondary_msg = g_strdup_printf (
- ngettext ("Changes made to the document in the last %ld second "
- "will be permanently lost.",
- "Changes made to the document in the last %ld seconds "
- "will be permanently lost.",
- seconds),
- seconds);
- }
- else if (seconds < 75) /* 55 <= seconds < 75 */
- {
- secondary_msg = g_strdup (_("Changes made to the document in the last minute "
- "will be permanently lost."));
- }
- else if (seconds < 110) /* 75 <= seconds < 110 */
- {
- secondary_msg = g_strdup_printf (
- ngettext ("Changes made to the document in the last minute and "
- "%ld second will be permanently lost.",
- "Changes made to the document in the last minute and "
- "%ld seconds will be permanently lost.",
- seconds - 60 ),
- seconds - 60);
- }
- else if (seconds < 3600)
- {
- secondary_msg = g_strdup_printf (
- ngettext ("Changes made to the document in the last %ld minute "
- "will be permanently lost.",
- "Changes made to the document in the last %ld minutes "
- "will be permanently lost.",
- seconds / 60),
- seconds / 60);
- }
- else if (seconds < 7200)
- {
- gint minutes;
- seconds -= 3600;
-
- minutes = seconds / 60;
- if (minutes < 5)
- {
- secondary_msg = g_strdup (_("Changes made to the document in the last hour "
- "will be permanently lost."));
- }
- else
- {
- secondary_msg = g_strdup_printf (
- ngettext ("Changes made to the document in the last hour and "
- "%d minute will be permanently lost.",
- "Changes made to the document in the last hour and "
- "%d minutes will be permanently lost.",
- minutes),
- minutes);
- }
- }
- else
- {
- gint hours;
-
- hours = seconds / 3600;
-
- secondary_msg = g_strdup_printf (
- ngettext ("Changes made to the document in the last %d hour "
- "will be permanently lost.",
- "Changes made to the document in the last %d hours "
- "will be permanently lost.",
- hours),
- hours);
- }
-
- dialog = gtk_message_dialog_new (GTK_WINDOW (window),
- GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_MESSAGE_QUESTION,
- GTK_BUTTONS_NONE,
- "%s", primary_msg);
-
- gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
- "%s", secondary_msg);
- g_free (primary_msg);
- g_free (secondary_msg);
-
- gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE);
-
- gtk_dialog_add_button (GTK_DIALOG (dialog),
- GTK_STOCK_CANCEL,
- GTK_RESPONSE_CANCEL);
-
- gedit_dialog_add_button (GTK_DIALOG (dialog),
- _("_Revert"),
- GTK_STOCK_REVERT_TO_SAVED,
- GTK_RESPONSE_OK);
-
- gtk_dialog_set_default_response (GTK_DIALOG (dialog),
- GTK_RESPONSE_CANCEL);
-
- return dialog;
-}
-
-void
-_gedit_cmd_file_revert (GtkAction *action,
- GeditWindow *window)
-{
- GeditTab *tab;
- GeditDocument *doc;
- GtkWidget *dialog;
- GtkWindowGroup *wg;
-
- gedit_debug (DEBUG_COMMANDS);
-
- tab = gedit_window_get_active_tab (window);
- g_return_if_fail (tab != NULL);
-
- /* If we are already displaying a notification
- * reverting will drop local modifications, do
- * not bug the user further */
- if (gedit_tab_get_state (tab) == GEDIT_TAB_STATE_EXTERNALLY_MODIFIED_NOTIFICATION)
- {
- do_revert (window, tab);
- return;
- }
-
- doc = gedit_tab_get_document (tab);
- g_return_if_fail (doc != NULL);
- g_return_if_fail (!gedit_document_is_untitled (doc));
-
- dialog = revert_dialog (window, doc);
-
- wg = gedit_window_get_group (window);
-
- gtk_window_group_add_window (wg, GTK_WINDOW (dialog));
-
- gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
-
- g_signal_connect (dialog,
- "response",
- G_CALLBACK (revert_dialog_response_cb),
- window);
-
- gtk_widget_show (dialog);
-}
-
-/* Close tab */
-static gboolean
-really_close_tab (GeditTab *tab)
-{
- GtkWidget *toplevel;
- GeditWindow *window;
-
- gedit_debug (DEBUG_COMMANDS);
-
- g_return_val_if_fail (gedit_tab_get_state (tab) == GEDIT_TAB_STATE_CLOSING,
- FALSE);
-
- toplevel = gtk_widget_get_toplevel (GTK_WIDGET (tab));
- g_return_val_if_fail (GEDIT_IS_WINDOW (toplevel), FALSE);
-
- window = GEDIT_WINDOW (toplevel);
-
- gedit_window_close_tab (window, tab);
-
- if (gedit_window_get_active_tab (window) == NULL)
- {
- gboolean is_quitting;
-
- is_quitting = GPOINTER_TO_BOOLEAN (g_object_get_data (G_OBJECT (window),
- GEDIT_IS_QUITTING));
-
- if (is_quitting)
- gtk_widget_destroy (GTK_WIDGET (window));
- }
-
- return FALSE;
-}
-
-static void
-tab_state_changed_while_saving (GeditTab *tab,
- GParamSpec *pspec,
- GeditWindow *window)
-{
- GeditTabState ts;
-
- ts = gedit_tab_get_state (tab);
-
- gedit_debug_message (DEBUG_COMMANDS, "State while saving: %d\n", ts);
-
- /* When the state become NORMAL, it means the saving operation is
- finished */
- if (ts == GEDIT_TAB_STATE_NORMAL)
- {
- GeditDocument *doc;
-
- g_signal_handlers_disconnect_by_func (tab,
- G_CALLBACK (tab_state_changed_while_saving),
- window);
-
- doc = gedit_tab_get_document (tab);
- g_return_if_fail (doc != NULL);
-
- /* If the saving operation failed or was interrupted, then the
- document is still "modified" -> do not close the tab */
- if (document_needs_saving (doc))
- return;
-
- /* Close the document only if it has been succesfully saved.
- Tab state is set to CLOSING (it is a state without exiting
- transitions) and the tab is closed in a idle handler */
- _gedit_tab_mark_for_closing (tab);
-
- g_idle_add_full (G_PRIORITY_HIGH_IDLE,
- (GSourceFunc)really_close_tab,
- tab,
- NULL);
- }
-}
-
-static void
-save_and_close (GeditTab *tab,
- GeditWindow *window)
-{
- gedit_debug (DEBUG_COMMANDS);
-
- /* Trace tab state changes */
- g_signal_connect (tab,
- "notify::state",
- G_CALLBACK (tab_state_changed_while_saving),
- window);
-
- file_save (tab, window);
-}
-
-static void
-save_as_and_close (GeditTab *tab,
- GeditWindow *window)
-{
- gedit_debug (DEBUG_COMMANDS);
-
- g_object_set_data (G_OBJECT (tab),
- GEDIT_IS_CLOSING_TAB,
- NULL);
-
- /* Trace tab state changes */
- g_signal_connect (tab,
- "notify::state",
- G_CALLBACK (tab_state_changed_while_saving),
- window);
-
- gedit_window_set_active_tab (window, tab);
- file_save_as (tab, window);
-}
-
-static void
-save_and_close_all_documents (const GList *docs,
- GeditWindow *window)
-{
- GList *tabs;
- GList *l;
- GSList *sl;
- GSList *tabs_to_save_as;
- GSList *tabs_to_save_and_close;
- GList *tabs_to_close;
-
- gedit_debug (DEBUG_COMMANDS);
-
- g_return_if_fail (!(gedit_window_get_state (window) & GEDIT_WINDOW_STATE_PRINTING));
-
- tabs = gtk_container_get_children (
- GTK_CONTAINER (_gedit_window_get_notebook (window)));
-
- tabs_to_save_as = NULL;
- tabs_to_save_and_close = NULL;
- tabs_to_close = NULL;
-
- l = tabs;
- while (l != NULL)
- {
- GeditTab *t;
- GeditTabState state;
- GeditDocument *doc;
-
- t = GEDIT_TAB (l->data);
-
- state = gedit_tab_get_state (t);
- doc = gedit_tab_get_document (t);
-
- /* If the state is: ([*] invalid states)
- - GEDIT_TAB_STATE_NORMAL: close (and if needed save)
- - GEDIT_TAB_STATE_LOADING: close, we are sure the file is unmodified
- - GEDIT_TAB_STATE_REVERTING: since the user wants
- to return back to the version of the file she previously saved, we can close
- without saving (CHECK: are we sure this is the right behavior, suppose the case
- the original file has been deleted)
- - [*] GEDIT_TAB_STATE_SAVING: invalid, ClosAll
- and Quit are unsensitive if the window state is SAVING.
- - [*] GEDIT_TAB_STATE_PRINTING, GEDIT_TAB_STATE_PRINT_PREVIEWING: there is not a
- real reason for not closing in this case, we do not save to avoid to run
- two operations using the message area at the same time (may be we can remove
- this limitation in the future). Note that ClosAll
- and Quit are unsensitive if the window state is PRINTING.
- - GEDIT_TAB_STATE_SHOWING_PRINT_PREVIEW: close (and if needed save)
- - GEDIT_TAB_STATE_LOADING_ERROR: close without saving (if the state is LOADING_ERROR then the
- document is not modified)
- - GEDIT_TAB_STATE_REVERTING_ERROR: we do not close since the document contains errors
- - GEDIT_TAB_STATE_SAVING_ERROR: we do not close since the document contains errors
- - GEDIT_TAB_STATE_GENERIC_ERROR: we do not close since the document contains
- errors (CHECK: we should problably remove this state)
- - [*] GEDIT_TAB_STATE_CLOSING: this state is invalid in this case
- */
-
- g_return_if_fail (state != GEDIT_TAB_STATE_PRINTING);
- g_return_if_fail (state != GEDIT_TAB_STATE_PRINT_PREVIEWING);
- g_return_if_fail (state != GEDIT_TAB_STATE_CLOSING);
- g_return_if_fail (state != GEDIT_TAB_STATE_SAVING);
-
- if ((state != GEDIT_TAB_STATE_SAVING_ERROR) &&
- (state != GEDIT_TAB_STATE_GENERIC_ERROR) &&
- (state != GEDIT_TAB_STATE_REVERTING_ERROR))
- {
- if ((g_list_index ((GList *)docs, doc) >= 0) &&
- (state != GEDIT_TAB_STATE_LOADING) &&
- (state != GEDIT_TAB_STATE_LOADING_ERROR) &&
- (state != GEDIT_TAB_STATE_REVERTING)) /* CHECK: is this the right behavior with REVERTING ?*/
- {
- /* The document must be saved before closing */
- g_return_if_fail (document_needs_saving (doc));
-
- /* FIXME: manage the case of local readonly files owned by the
- user is running gedit - Paolo (Dec. 8, 2005) */
- if (gedit_document_is_untitled (doc) ||
- gedit_document_get_readonly (doc))
- {
- g_object_set_data (G_OBJECT (t),
- GEDIT_IS_CLOSING_TAB,
- GBOOLEAN_TO_POINTER (TRUE));
-
- tabs_to_save_as = g_slist_prepend (tabs_to_save_as,
- t);
- }
- else
- {
- tabs_to_save_and_close = g_slist_prepend (tabs_to_save_and_close,
- t);
- }
- }
- else
- {
- /* The document must be closed without saving */
- tabs_to_close = g_list_prepend (tabs_to_close,
- t);
- }
- }
-
- l = g_list_next (l);
- }
-
- g_list_free (tabs);
-
- /* Close all tabs to close (in a sync way) */
- gedit_window_close_tabs (window, tabs_to_close);
- g_list_free (tabs_to_close);
-
- /* Save and close all the files in tabs_to_save_and_close */
- sl = tabs_to_save_and_close;
- while (sl != NULL)
- {
- save_and_close (GEDIT_TAB (sl->data),
- window);
- sl = g_slist_next (sl);
- }
- g_slist_free (tabs_to_save_and_close);
-
- /* Save As and close all the files in tabs_to_save_as */
- if (tabs_to_save_as != NULL)
- {
- GeditTab *tab;
-
- tabs_to_save_as = g_slist_reverse (tabs_to_save_as );
-
- g_return_if_fail (g_object_get_data (G_OBJECT (window),
- GEDIT_LIST_OF_TABS_TO_SAVE_AS) == NULL);
-
- g_object_set_data (G_OBJECT (window),
- GEDIT_LIST_OF_TABS_TO_SAVE_AS,
- tabs_to_save_as);
-
- tab = GEDIT_TAB (tabs_to_save_as->data);
-
- save_as_and_close (tab, window);
- }
-}
-
-static void
-save_and_close_document (const GList *docs,
- GeditWindow *window)
-{
- GeditTab *tab;
-
- gedit_debug (DEBUG_COMMANDS);
-
- g_return_if_fail (docs->next == NULL);
-
- tab = gedit_tab_get_from_document (GEDIT_DOCUMENT (docs->data));
- g_return_if_fail (tab != NULL);
-
- save_and_close (tab, window);
-}
-
-static void
-close_all_tabs (GeditWindow *window)
-{
- gboolean is_quitting;
-
- gedit_debug (DEBUG_COMMANDS);
-
- /* There is no document to save -> close all tabs */
- gedit_window_close_all_tabs (window);
-
- is_quitting = GPOINTER_TO_BOOLEAN (g_object_get_data (G_OBJECT (window),
- GEDIT_IS_QUITTING));
-
- if (is_quitting)
- gtk_widget_destroy (GTK_WIDGET (window));
-
- return;
-}
-
-static void
-close_document (GeditWindow *window,
- GeditDocument *doc)
-{
- GeditTab *tab;
-
- gedit_debug (DEBUG_COMMANDS);
-
- tab = gedit_tab_get_from_document (doc);
- g_return_if_fail (tab != NULL);
-
- gedit_window_close_tab (window, tab);
-}
-
-static void
-close_confirmation_dialog_response_handler (GeditCloseConfirmationDialog *dlg,
- gint response_id,
- GeditWindow *window)
-{
- GList *selected_documents;
- gboolean is_closing_all;
-
- gedit_debug (DEBUG_COMMANDS);
-
- is_closing_all = GPOINTER_TO_BOOLEAN (g_object_get_data (G_OBJECT (window),
- GEDIT_IS_CLOSING_ALL));
-
- gtk_widget_hide (GTK_WIDGET (dlg));
-
- switch (response_id)
- {
- case GTK_RESPONSE_YES: /* Save and Close */
- selected_documents = gedit_close_confirmation_dialog_get_selected_documents (dlg);
- if (selected_documents == NULL)
- {
- if (is_closing_all)
- {
- /* There is no document to save -> close all tabs */
- /* We call gtk_widget_destroy before close_all_tabs
- * because close_all_tabs could destroy the gedit window */
- gtk_widget_destroy (GTK_WIDGET (dlg));
-
- close_all_tabs (window);
-
- return;
- }
- else
- g_return_if_reached ();
- }
- else
- {
- if (is_closing_all)
- {
- save_and_close_all_documents (selected_documents,
- window);
- }
- else
- {
- save_and_close_document (selected_documents,
- window);
- }
- }
-
- g_list_free (selected_documents);
-
- break;
-
- case GTK_RESPONSE_NO: /* Close without Saving */
- if (is_closing_all)
- {
- /* We call gtk_widget_destroy before close_all_tabs
- * because close_all_tabs could destroy the gedit window */
- gtk_widget_destroy (GTK_WIDGET (dlg));
-
- close_all_tabs (window);
-
- return;
- }
- else
- {
- const GList *unsaved_documents;
-
- unsaved_documents = gedit_close_confirmation_dialog_get_unsaved_documents (dlg);
- g_return_if_fail (unsaved_documents->next == NULL);
-
- close_document (window,
- GEDIT_DOCUMENT (unsaved_documents->data));
- }
-
- break;
- default: /* Do not close */
-
- /* Reset is_quitting flag */
- g_object_set_data (G_OBJECT (window),
- GEDIT_IS_QUITTING,
- GBOOLEAN_TO_POINTER (FALSE));
-
-#ifdef OS_OSX
- g_object_set_data (G_OBJECT (window),
- GEDIT_IS_QUITTING_ALL,
- GINT_TO_POINTER (FALSE));
-#endif
- break;
- }
-
- gtk_widget_destroy (GTK_WIDGET (dlg));
-}
-
-/* Returns TRUE if the tab can be immediately closed */
-static gboolean
-tab_can_close (GeditTab *tab,
- GtkWindow *window)
-{
- GeditDocument *doc;
-
- gedit_debug (DEBUG_COMMANDS);
-
- doc = gedit_tab_get_document (tab);
-
- if (!_gedit_tab_can_close (tab))
- {
- GtkWidget *dlg;
-
- dlg = gedit_close_confirmation_dialog_new_single (
- window,
- doc,
- FALSE);
-
- g_signal_connect (dlg,
- "response",
- G_CALLBACK (close_confirmation_dialog_response_handler),
- window);
-
- gtk_widget_show (dlg);
-
- return FALSE;
- }
-
- return TRUE;
-}
-
-/* CHECK: we probably need this one public for plugins...
- * maybe even a _list variant. Or maybe it's better make
- * gedit_window_close_tab always run the confirm dialog?
- * we should not allow closing a tab without resetting the
- * GEDIT_IS_CLOSING_ALL flag!
- */
-void
-_gedit_cmd_file_close_tab (GeditTab *tab,
- GeditWindow *window)
-{
- gedit_debug (DEBUG_COMMANDS);
-
- g_return_if_fail (GTK_WIDGET (window) == gtk_widget_get_toplevel (GTK_WIDGET (tab)));
-
- g_object_set_data (G_OBJECT (window),
- GEDIT_IS_CLOSING_ALL,
- GBOOLEAN_TO_POINTER (FALSE));
-
- g_object_set_data (G_OBJECT (window),
- GEDIT_IS_QUITTING,
- GBOOLEAN_TO_POINTER (FALSE));
-
- g_object_set_data (G_OBJECT (window),
- GEDIT_IS_QUITTING_ALL,
- GINT_TO_POINTER (FALSE));
-
-
- if (tab_can_close (tab, GTK_WINDOW (window)))
- gedit_window_close_tab (window, tab);
-}
-
-void
-_gedit_cmd_file_close (GtkAction *action,
- GeditWindow *window)
-{
- GeditTab *active_tab;
-
- gedit_debug (DEBUG_COMMANDS);
-
- active_tab = gedit_window_get_active_tab (window);
-
- if (active_tab == NULL)
- {
-#ifdef OS_OSX
- /* Close the window on OS X */
- gtk_widget_destroy (GTK_WIDGET (window));
-#endif
- return;
- }
-
- _gedit_cmd_file_close_tab (active_tab, window);
-}
-
-/* Close all tabs */
-static void
-file_close_all (GeditWindow *window,
- gboolean is_quitting)
-{
- GList *unsaved_docs;
- GtkWidget *dlg;
-
- gedit_debug (DEBUG_COMMANDS);
-
- g_return_if_fail (!(gedit_window_get_state (window) &
- (GEDIT_WINDOW_STATE_SAVING |
- GEDIT_WINDOW_STATE_PRINTING |
- GEDIT_WINDOW_STATE_SAVING_SESSION)));
-
- g_object_set_data (G_OBJECT (window),
- GEDIT_IS_CLOSING_ALL,
- GBOOLEAN_TO_POINTER (TRUE));
-
- g_object_set_data (G_OBJECT (window),
- GEDIT_IS_QUITTING,
- GBOOLEAN_TO_POINTER (is_quitting));
-
- unsaved_docs = gedit_window_get_unsaved_documents (window);
-
- if (unsaved_docs == NULL)
- {
- /* There is no document to save -> close all tabs */
- gedit_window_close_all_tabs (window);
-
- if (is_quitting)
- gtk_widget_destroy (GTK_WIDGET (window));
-
- return;
- }
-
- if (unsaved_docs->next == NULL)
- {
- /* There is only one unsaved document */
- GeditTab *tab;
- GeditDocument *doc;
-
- doc = GEDIT_DOCUMENT (unsaved_docs->data);
-
- tab = gedit_tab_get_from_document (doc);
- g_return_if_fail (tab != NULL);
-
- gedit_window_set_active_tab (window, tab);
-
- dlg = gedit_close_confirmation_dialog_new_single (
- GTK_WINDOW (window),
- doc,
- FALSE);
- }
- else
- {
- dlg = gedit_close_confirmation_dialog_new (GTK_WINDOW (window),
- unsaved_docs,
- FALSE);
- }
-
- g_list_free (unsaved_docs);
-
- g_signal_connect (dlg,
- "response",
- G_CALLBACK (close_confirmation_dialog_response_handler),
- window);
-
- gtk_widget_show (dlg);
-}
-
-void
-_gedit_cmd_file_close_all (GtkAction *action,
- GeditWindow *window)
-{
- gedit_debug (DEBUG_COMMANDS);
-
- g_return_if_fail (!(gedit_window_get_state (window) &
- (GEDIT_WINDOW_STATE_SAVING |
- GEDIT_WINDOW_STATE_PRINTING |
- GEDIT_WINDOW_STATE_SAVING_SESSION)));
-
- file_close_all (window, FALSE);
-}
-
-/* Quit */
-#ifdef OS_OSX
-static void
-quit_all ()
-{
- GList *windows;
- GList *item;
- GeditApp *app;
-
- app = gedit_app_get_default ();
- windows = g_list_copy ((GList *)gedit_app_get_windows (app));
-
- for (item = windows; item; item = g_list_next (item))
- {
- GeditWindow *window = GEDIT_WINDOW (item->data);
-
- g_object_set_data (G_OBJECT (window),
- GEDIT_IS_QUITTING_ALL,
- GINT_TO_POINTER (TRUE));
-
- if (!(gedit_window_get_state (window) &
- (GEDIT_WINDOW_STATE_SAVING |
- GEDIT_WINDOW_STATE_PRINTING |
- GEDIT_WINDOW_STATE_SAVING_SESSION)))
- {
- file_close_all (window, TRUE);
- }
- }
-
- g_list_free (windows);
-}
-#endif
-
-void
-_gedit_cmd_file_quit (GtkAction *action,
- GeditWindow *window)
-{
- gedit_debug (DEBUG_COMMANDS);
-
-#ifdef OS_OSX
- if (action != NULL)
- {
- quit_all ();
- return;
- }
-#endif
-
- g_return_if_fail (!(gedit_window_get_state (window) &
- (GEDIT_WINDOW_STATE_SAVING |
- GEDIT_WINDOW_STATE_PRINTING |
- GEDIT_WINDOW_STATE_SAVING_SESSION)));
-
- file_close_all (window, TRUE);
-}
diff --git a/gedit/gedit-commands-help.c b/gedit/gedit-commands-help.c
deleted file mode 100755
index 3b71106e..00000000
--- a/gedit/gedit-commands-help.c
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * gedit-help-commands.c
- * This file is part of gedit
- *
- * Copyright (C) 1998, 1999 Alex Roberts, Evan Lawrence
- * Copyright (C) 2000, 2001 Chema Celorio, Paolo Maggi
- * Copyright (C) 2002-2005 Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 1998-2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <glib/gi18n.h>
-#include <gtk/gtk.h>
-
-#include "gedit-commands.h"
-#include "gedit-debug.h"
-#include "gedit-help.h"
-#include "gedit-dirs.h"
-
-void
-_gedit_cmd_help_contents (GtkAction *action,
- GeditWindow *window)
-{
- gedit_debug (DEBUG_COMMANDS);
-
- gedit_help_display (GTK_WINDOW (window), NULL, NULL);
-}
-
-void
-_gedit_cmd_help_about (GtkAction *action,
- GeditWindow *window)
-{
- static const gchar * const authors[] = {
- "Paolo Maggi <[email protected]>",
- "Paolo Borelli <[email protected]>",
- "Steve Fr\303\251cinaux <[email protected]>",
- "Jesse van den Kieboom <[email protected]>",
- "Ignacio Casal Quinteiro <[email protected]>",
- "James Willcox <[email protected]>",
- "Chema Celorio",
- "Federico Mena Quintero <[email protected]>",
- NULL
- };
-
- static const gchar * const documenters[] = {
- "Sun MATE Documentation Team <[email protected]>",
- "Eric Baudais <[email protected]>",
- NULL
- };
-
- static const gchar copyright[] = \
- "Copyright \xc2\xa9 1998-2000 Evan Lawrence, Alex Robert\n"
- "Copyright \xc2\xa9 2000-2002 Chema Celorio, Paolo Maggi\n"
- "Copyright \xc2\xa9 2003-2006 Paolo Maggi\n"
- "Copyright \xc2\xa9 2004-2010 Paolo Borelli, Jesse van den Kieboom\nSteve Fr\303\251cinaux, Ignacio Casal Quinteiro";
-
- static const gchar comments[] = \
- N_("gedit is a small and lightweight text editor for the "
- "MATE Desktop");
-
- GdkPixbuf *logo;
- gchar *data_dir;
- gchar *logo_file;
-
- gedit_debug (DEBUG_COMMANDS);
-
- data_dir = gedit_dirs_get_gedit_data_dir ();
- logo_file = g_build_filename (data_dir,
- "logo",
- "gedit-logo.png",
- NULL);
- g_free (data_dir);
- logo = gdk_pixbuf_new_from_file (logo_file, NULL);
- g_free (logo_file);
-
- gtk_show_about_dialog (GTK_WINDOW (window),
- "program-name", "gedit",
- "authors", authors,
- "comments", _(comments),
- "copyright", copyright,
- "documenters", documenters,
- "logo", logo,
- "translator-credits", _("translator-credits"),
- "version", VERSION,
- "website", "http://www.gedit.org",
- NULL);
-
- if (logo)
- g_object_unref (logo);
-}
diff --git a/gedit/gedit-commands-search.c b/gedit/gedit-commands-search.c
deleted file mode 100755
index 3a44a218..00000000
--- a/gedit/gedit-commands-search.c
+++ /dev/null
@@ -1,716 +0,0 @@
-/*
- * gedit-search-commands.c
- * This file is part of gedit
- *
- * Copyright (C) 1998, 1999 Alex Roberts, Evan Lawrence
- * Copyright (C) 2000, 2001 Chema Celorio, Paolo Maggi
- * Copyright (C) 2002-2006 Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 1998-2006. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <string.h>
-#include <glib/gi18n.h>
-#include <gdk/gdkkeysyms.h>
-
-#include "gedit-commands.h"
-#include "gedit-debug.h"
-#include "gedit-statusbar.h"
-#include "gedit-window.h"
-#include "gedit-window-private.h"
-#include "gedit-utils.h"
-#include "dialogs/gedit-search-dialog.h"
-
-#define GEDIT_SEARCH_DIALOG_KEY "gedit-search-dialog-key"
-#define GEDIT_LAST_SEARCH_DATA_KEY "gedit-last-search-data-key"
-
-typedef struct _LastSearchData LastSearchData;
-struct _LastSearchData
-{
- gint x;
- gint y;
-};
-
-static void
-last_search_data_free (LastSearchData *data)
-{
- g_slice_free (LastSearchData, data);
-}
-
-static void
-last_search_data_restore_position (GeditSearchDialog *dlg)
-{
- LastSearchData *data;
-
- data = g_object_get_data (G_OBJECT (dlg), GEDIT_LAST_SEARCH_DATA_KEY);
-
- if (data != NULL)
- {
- gtk_window_move (GTK_WINDOW (dlg),
- data->x,
- data->y);
- }
-}
-
-static void
-last_search_data_store_position (GeditSearchDialog *dlg)
-{
- LastSearchData *data;
-
- data = g_object_get_data (G_OBJECT (dlg), GEDIT_LAST_SEARCH_DATA_KEY);
-
- if (data == NULL)
- {
- data = g_slice_new (LastSearchData);
-
- g_object_set_data_full (G_OBJECT (dlg),
- GEDIT_LAST_SEARCH_DATA_KEY,
- data,
- (GDestroyNotify) last_search_data_free);
- }
-
- gtk_window_get_position (GTK_WINDOW (dlg),
- &data->x,
- &data->y);
-}
-
-/* Use occurences only for Replace All */
-static void
-text_found (GeditWindow *window,
- gint occurrences)
-{
- if (occurrences > 1)
- {
- gedit_statusbar_flash_message (GEDIT_STATUSBAR (window->priv->statusbar),
- window->priv->generic_message_cid,
- ngettext("Found and replaced %d occurrence",
- "Found and replaced %d occurrences",
- occurrences),
- occurrences);
- }
- else
- {
- if (occurrences == 1)
- gedit_statusbar_flash_message (GEDIT_STATUSBAR (window->priv->statusbar),
- window->priv->generic_message_cid,
- _("Found and replaced one occurrence"));
- else
- gedit_statusbar_flash_message (GEDIT_STATUSBAR (window->priv->statusbar),
- window->priv->generic_message_cid,
- " ");
- }
-}
-
-#define MAX_MSG_LENGTH 40
-static void
-text_not_found (GeditWindow *window,
- const gchar *text)
-{
- gchar *searched;
-
- searched = gedit_utils_str_end_truncate (text, MAX_MSG_LENGTH);
-
- gedit_statusbar_flash_message (GEDIT_STATUSBAR (window->priv->statusbar),
- window->priv->generic_message_cid,
- /* Translators: %s is replaced by the text
- entered by the user in the search box */
- _("\"%s\" not found"), searched);
- g_free (searched);
-}
-
-static gboolean
-run_search (GeditView *view,
- gboolean wrap_around,
- gboolean search_backwards)
-{
- GeditDocument *doc;
- GtkTextIter start_iter;
- GtkTextIter match_start;
- GtkTextIter match_end;
- gboolean found = FALSE;
-
- doc = GEDIT_DOCUMENT (gtk_text_view_get_buffer (GTK_TEXT_VIEW (view)));
-
- if (!search_backwards)
- {
- gtk_text_buffer_get_selection_bounds (GTK_TEXT_BUFFER (doc),
- NULL,
- &start_iter);
-
- found = gedit_document_search_forward (doc,
- &start_iter,
- NULL,
- &match_start,
- &match_end);
- }
- else
- {
- gtk_text_buffer_get_selection_bounds (GTK_TEXT_BUFFER (doc),
- &start_iter,
- NULL);
-
- found = gedit_document_search_backward (doc,
- NULL,
- &start_iter,
- &match_start,
- &match_end);
- }
-
- if (!found && wrap_around)
- {
- if (!search_backwards)
- found = gedit_document_search_forward (doc,
- NULL,
- NULL, /* FIXME: set the end_inter */
- &match_start,
- &match_end);
- else
- found = gedit_document_search_backward (doc,
- NULL, /* FIXME: set the start_inter */
- NULL,
- &match_start,
- &match_end);
- }
-
- if (found)
- {
- gtk_text_buffer_place_cursor (GTK_TEXT_BUFFER (doc),
- &match_start);
-
- gtk_text_buffer_move_mark_by_name (GTK_TEXT_BUFFER (doc),
- "selection_bound",
- &match_end);
-
- gedit_view_scroll_to_cursor (view);
- }
- else
- {
- gtk_text_buffer_place_cursor (GTK_TEXT_BUFFER (doc),
- &start_iter);
- }
-
- return found;
-}
-
-static void
-do_find (GeditSearchDialog *dialog,
- GeditWindow *window)
-{
- GeditView *active_view;
- GeditDocument *doc;
- gchar *search_text;
- const gchar *entry_text;
- gboolean match_case;
- gboolean entire_word;
- gboolean wrap_around;
- gboolean search_backwards;
- guint flags = 0;
- guint old_flags = 0;
- gboolean found;
-
- /* TODO: make the dialog insensitive when all the tabs are closed
- * and assert here that the view is not NULL */
- active_view = gedit_window_get_active_view (window);
- if (active_view == NULL)
- return;
-
- doc = GEDIT_DOCUMENT (gtk_text_view_get_buffer (GTK_TEXT_VIEW (active_view)));
-
- entry_text = gedit_search_dialog_get_search_text (dialog);
-
- match_case = gedit_search_dialog_get_match_case (dialog);
- entire_word = gedit_search_dialog_get_entire_word (dialog);
- search_backwards = gedit_search_dialog_get_backwards (dialog);
- wrap_around = gedit_search_dialog_get_wrap_around (dialog);
-
- GEDIT_SEARCH_SET_CASE_SENSITIVE (flags, match_case);
- GEDIT_SEARCH_SET_ENTIRE_WORD (flags, entire_word);
-
- search_text = gedit_document_get_search_text (doc, &old_flags);
-
- if ((search_text == NULL) ||
- (strcmp (search_text, entry_text) != 0) ||
- (flags != old_flags))
- {
- gedit_document_set_search_text (doc, entry_text, flags);
- }
-
- g_free (search_text);
-
- found = run_search (active_view,
- wrap_around,
- search_backwards);
-
- if (found)
- text_found (window, 0);
- else
- text_not_found (window, entry_text);
-
- gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog),
- GEDIT_SEARCH_DIALOG_REPLACE_RESPONSE,
- found);
-}
-
-/* FIXME: move in gedit-document.c and share it with gedit-view */
-static gboolean
-get_selected_text (GtkTextBuffer *doc,
- gchar **selected_text,
- gint *len)
-{
- GtkTextIter start, end;
-
- g_return_val_if_fail (selected_text != NULL, FALSE);
- g_return_val_if_fail (*selected_text == NULL, FALSE);
-
- if (!gtk_text_buffer_get_selection_bounds (doc, &start, &end))
- {
- if (len != NULL)
- len = 0;
-
- return FALSE;
- }
-
- *selected_text = gtk_text_buffer_get_slice (doc, &start, &end, TRUE);
-
- if (len != NULL)
- *len = g_utf8_strlen (*selected_text, -1);
-
- return TRUE;
-}
-
-static void
-replace_selected_text (GtkTextBuffer *buffer,
- const gchar *replace)
-{
- g_return_if_fail (gtk_text_buffer_get_selection_bounds (buffer, NULL, NULL));
- g_return_if_fail (replace != NULL);
-
- gtk_text_buffer_begin_user_action (buffer);
-
- gtk_text_buffer_delete_selection (buffer, FALSE, TRUE);
-
- gtk_text_buffer_insert_at_cursor (buffer, replace, strlen (replace));
-
- gtk_text_buffer_end_user_action (buffer);
-}
-
-static void
-do_replace (GeditSearchDialog *dialog,
- GeditWindow *window)
-{
- GeditDocument *doc;
- const gchar *search_entry_text;
- const gchar *replace_entry_text;
- gchar *unescaped_search_text;
- gchar *unescaped_replace_text;
- gchar *selected_text = NULL;
- gboolean match_case;
-
- doc = gedit_window_get_active_document (window);
- if (doc == NULL)
- return;
-
- search_entry_text = gedit_search_dialog_get_search_text (dialog);
- g_return_if_fail ((search_entry_text) != NULL);
- g_return_if_fail ((*search_entry_text) != '\0');
-
- /* replace text may be "", we just delete */
- replace_entry_text = gedit_search_dialog_get_replace_text (dialog);
- g_return_if_fail ((replace_entry_text) != NULL);
-
- unescaped_search_text = gedit_utils_unescape_search_text (search_entry_text);
-
- get_selected_text (GTK_TEXT_BUFFER (doc),
- &selected_text,
- NULL);
-
- match_case = gedit_search_dialog_get_match_case (dialog);
-
- if ((selected_text == NULL) ||
- (match_case && (strcmp (selected_text, unescaped_search_text) != 0)) ||
- (!match_case && !g_utf8_caselessnmatch (selected_text,
- unescaped_search_text,
- strlen (selected_text),
- strlen (unescaped_search_text)) != 0))
- {
- do_find (dialog, window);
- g_free (unescaped_search_text);
- g_free (selected_text);
-
- return;
- }
-
- unescaped_replace_text = gedit_utils_unescape_search_text (replace_entry_text);
- replace_selected_text (GTK_TEXT_BUFFER (doc), unescaped_replace_text);
-
- g_free (unescaped_search_text);
- g_free (selected_text);
- g_free (unescaped_replace_text);
-
- do_find (dialog, window);
-}
-
-static void
-do_replace_all (GeditSearchDialog *dialog,
- GeditWindow *window)
-{
- GeditView *active_view;
- GeditDocument *doc;
- const gchar *search_entry_text;
- const gchar *replace_entry_text;
- gboolean match_case;
- gboolean entire_word;
- guint flags = 0;
- gint count;
-
- active_view = gedit_window_get_active_view (window);
- if (active_view == NULL)
- return;
-
- doc = GEDIT_DOCUMENT (gtk_text_view_get_buffer (GTK_TEXT_VIEW (active_view)));
-
- search_entry_text = gedit_search_dialog_get_search_text (dialog);
- g_return_if_fail ((search_entry_text) != NULL);
- g_return_if_fail ((*search_entry_text) != '\0');
-
- /* replace text may be "", we just delete all occurrencies */
- replace_entry_text = gedit_search_dialog_get_replace_text (dialog);
- g_return_if_fail ((replace_entry_text) != NULL);
-
- match_case = gedit_search_dialog_get_match_case (dialog);
- entire_word = gedit_search_dialog_get_entire_word (dialog);
-
- GEDIT_SEARCH_SET_CASE_SENSITIVE (flags, match_case);
- GEDIT_SEARCH_SET_ENTIRE_WORD (flags, entire_word);
-
- count = gedit_document_replace_all (doc,
- search_entry_text,
- replace_entry_text,
- flags);
-
- if (count > 0)
- {
- text_found (window, count);
- }
- else
- {
- text_not_found (window, search_entry_text);
- }
-
- gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog),
- GEDIT_SEARCH_DIALOG_REPLACE_RESPONSE,
- FALSE);
-}
-
-static void
-search_dialog_response_cb (GeditSearchDialog *dialog,
- gint response_id,
- GeditWindow *window)
-{
- gedit_debug (DEBUG_COMMANDS);
-
- switch (response_id)
- {
- case GEDIT_SEARCH_DIALOG_FIND_RESPONSE:
- do_find (dialog, window);
- break;
- case GEDIT_SEARCH_DIALOG_REPLACE_RESPONSE:
- do_replace (dialog, window);
- break;
- case GEDIT_SEARCH_DIALOG_REPLACE_ALL_RESPONSE:
- do_replace_all (dialog, window);
- break;
- default:
- last_search_data_store_position (dialog);
- gtk_widget_hide (GTK_WIDGET (dialog));
- }
-}
-
-static gboolean
-search_dialog_delete_event_cb (GtkWidget *widget,
- GdkEventAny *event,
- gpointer user_data)
-{
- gedit_debug (DEBUG_COMMANDS);
-
- /* prevent destruction */
- return TRUE;
-}
-
-static void
-search_dialog_destroyed (GeditWindow *window,
- GeditSearchDialog *dialog)
-{
- gedit_debug (DEBUG_COMMANDS);
-
- g_object_set_data (G_OBJECT (window),
- GEDIT_SEARCH_DIALOG_KEY,
- NULL);
- g_object_set_data (G_OBJECT (dialog),
- GEDIT_LAST_SEARCH_DATA_KEY,
- NULL);
-}
-
-static GtkWidget *
-create_dialog (GeditWindow *window, gboolean show_replace)
-{
- GtkWidget *dialog;
-
- dialog = gedit_search_dialog_new (GTK_WINDOW (window), show_replace);
-
- g_signal_connect (dialog,
- "response",
- G_CALLBACK (search_dialog_response_cb),
- window);
- g_signal_connect (dialog,
- "delete-event",
- G_CALLBACK (search_dialog_delete_event_cb),
- NULL);
-
- g_object_set_data (G_OBJECT (window),
- GEDIT_SEARCH_DIALOG_KEY,
- dialog);
-
- g_object_weak_ref (G_OBJECT (dialog),
- (GWeakNotify) search_dialog_destroyed,
- window);
-
- return dialog;
-}
-
-void
-_gedit_cmd_search_find (GtkAction *action,
- GeditWindow *window)
-{
- gpointer data;
- GtkWidget *search_dialog;
- GeditDocument *doc;
- gboolean selection_exists;
- gchar *find_text = NULL;
- gint sel_len;
-
- gedit_debug (DEBUG_COMMANDS);
-
- data = g_object_get_data (G_OBJECT (window), GEDIT_SEARCH_DIALOG_KEY);
-
- if (data == NULL)
- {
- search_dialog = create_dialog (window, FALSE);
- }
- else
- {
- g_return_if_fail (GEDIT_IS_SEARCH_DIALOG (data));
-
- search_dialog = GTK_WIDGET (data);
-
- /* turn the dialog into a find dialog if needed */
- if (gedit_search_dialog_get_show_replace (GEDIT_SEARCH_DIALOG (search_dialog)))
- gedit_search_dialog_set_show_replace (GEDIT_SEARCH_DIALOG (search_dialog),
- FALSE);
- }
-
- doc = gedit_window_get_active_document (window);
- g_return_if_fail (doc != NULL);
-
- selection_exists = get_selected_text (GTK_TEXT_BUFFER (doc),
- &find_text,
- &sel_len);
-
- if (selection_exists && find_text != NULL && sel_len < 80)
- {
- gedit_search_dialog_set_search_text (GEDIT_SEARCH_DIALOG (search_dialog),
- find_text);
- g_free (find_text);
- }
- else
- {
- g_free (find_text);
- }
-
- gtk_widget_show (search_dialog);
- last_search_data_restore_position (GEDIT_SEARCH_DIALOG (search_dialog));
- gedit_search_dialog_present_with_time (GEDIT_SEARCH_DIALOG (search_dialog),
- GDK_CURRENT_TIME);
-}
-
-void
-_gedit_cmd_search_replace (GtkAction *action,
- GeditWindow *window)
-{
- gpointer data;
- GtkWidget *replace_dialog;
- GeditDocument *doc;
- gboolean selection_exists;
- gchar *find_text = NULL;
- gint sel_len;
-
- gedit_debug (DEBUG_COMMANDS);
-
- data = g_object_get_data (G_OBJECT (window), GEDIT_SEARCH_DIALOG_KEY);
-
- if (data == NULL)
- {
- replace_dialog = create_dialog (window, TRUE);
- }
- else
- {
- g_return_if_fail (GEDIT_IS_SEARCH_DIALOG (data));
-
- replace_dialog = GTK_WIDGET (data);
-
- /* turn the dialog into a find dialog if needed */
- if (!gedit_search_dialog_get_show_replace (GEDIT_SEARCH_DIALOG (replace_dialog)))
- gedit_search_dialog_set_show_replace (GEDIT_SEARCH_DIALOG (replace_dialog),
- TRUE);
- }
-
- doc = gedit_window_get_active_document (window);
- g_return_if_fail (doc != NULL);
-
- selection_exists = get_selected_text (GTK_TEXT_BUFFER (doc),
- &find_text,
- &sel_len);
-
- if (selection_exists && find_text != NULL && sel_len < 80)
- {
- gedit_search_dialog_set_search_text (GEDIT_SEARCH_DIALOG (replace_dialog),
- find_text);
- g_free (find_text);
- }
- else
- {
- g_free (find_text);
- }
-
- gtk_widget_show (replace_dialog);
- last_search_data_restore_position (GEDIT_SEARCH_DIALOG (replace_dialog));
- gedit_search_dialog_present_with_time (GEDIT_SEARCH_DIALOG (replace_dialog),
- GDK_CURRENT_TIME);
-}
-
-static void
-do_find_again (GeditWindow *window,
- gboolean backward)
-{
- GeditView *active_view;
- gboolean wrap_around = TRUE;
- gpointer data;
-
- active_view = gedit_window_get_active_view (window);
- g_return_if_fail (active_view != NULL);
-
- data = g_object_get_data (G_OBJECT (window), GEDIT_SEARCH_DIALOG_KEY);
-
- if (data != NULL)
- wrap_around = gedit_search_dialog_get_wrap_around (GEDIT_SEARCH_DIALOG (data));
-
- run_search (active_view,
- wrap_around,
- backward);
-}
-
-void
-_gedit_cmd_search_find_next (GtkAction *action,
- GeditWindow *window)
-{
- gedit_debug (DEBUG_COMMANDS);
-
- do_find_again (window, FALSE);
-}
-
-void
-_gedit_cmd_search_find_prev (GtkAction *action,
- GeditWindow *window)
-{
- gedit_debug (DEBUG_COMMANDS);
-
- do_find_again (window, TRUE);
-}
-
-void
-_gedit_cmd_search_clear_highlight (GtkAction *action,
- GeditWindow *window)
-{
- GeditDocument *doc;
-
- gedit_debug (DEBUG_COMMANDS);
-
- doc = gedit_window_get_active_document (window);
- gedit_document_set_search_text (GEDIT_DOCUMENT (doc),
- "",
- GEDIT_SEARCH_DONT_SET_FLAGS);
-}
-
-void
-_gedit_cmd_search_goto_line (GtkAction *action,
- GeditWindow *window)
-{
- GeditView *active_view;
-
- gedit_debug (DEBUG_COMMANDS);
-
- active_view = gedit_window_get_active_view (window);
- if (active_view == NULL)
- return;
-
- /* Focus the view if needed: we need to focus the view otherwise
- activating the binding for goto line has no effect */
- gtk_widget_grab_focus (GTK_WIDGET (active_view));
-
-
- /* goto line is builtin in GeditView, just activate
- * the corrisponding binding.
- */
- gtk_bindings_activate (GTK_OBJECT (active_view),
- GDK_i,
- GDK_CONTROL_MASK);
-}
-
-void
-_gedit_cmd_search_incremental_search (GtkAction *action,
- GeditWindow *window)
-{
- GeditView *active_view;
-
- gedit_debug (DEBUG_COMMANDS);
-
- active_view = gedit_window_get_active_view (window);
- if (active_view == NULL)
- return;
-
- /* Focus the view if needed: we need to focus the view otherwise
- activating the binding for incremental search has no effect */
- gtk_widget_grab_focus (GTK_WIDGET (active_view));
-
- /* incremental search is builtin in GeditView, just activate
- * the corrisponding binding.
- */
- gtk_bindings_activate (GTK_OBJECT (active_view),
- GDK_k,
- GDK_CONTROL_MASK);
-}
diff --git a/gedit/gedit-commands-view.c b/gedit/gedit-commands-view.c
deleted file mode 100755
index 2366e49c..00000000
--- a/gedit/gedit-commands-view.c
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * gedit-view-commands.c
- * This file is part of gedit
- *
- * Copyright (C) 1998, 1999 Alex Roberts, Evan Lawrence
- * Copyright (C) 2000, 2001 Chema Celorio, Paolo Maggi
- * Copyright (C) 2002-2005 Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 1998-2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <gtk/gtk.h>
-
-#include "gedit-commands.h"
-#include "gedit-debug.h"
-#include "gedit-window.h"
-#include "gedit-window-private.h"
-
-
-void
-_gedit_cmd_view_show_toolbar (GtkAction *action,
- GeditWindow *window)
-{
- gboolean visible;
-
- gedit_debug (DEBUG_COMMANDS);
-
- visible = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));
-
- if (visible)
- gtk_widget_show (window->priv->toolbar);
- else
- gtk_widget_hide (window->priv->toolbar);
-}
-
-void
-_gedit_cmd_view_show_statusbar (GtkAction *action,
- GeditWindow *window)
-{
- gboolean visible;
-
- gedit_debug (DEBUG_COMMANDS);
-
- visible = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));
-
- if (visible)
- gtk_widget_show (window->priv->statusbar);
- else
- gtk_widget_hide (window->priv->statusbar);
-}
-
-void
-_gedit_cmd_view_show_side_pane (GtkAction *action,
- GeditWindow *window)
-{
- gboolean visible;
- GeditPanel *panel;
-
- gedit_debug (DEBUG_COMMANDS);
-
- visible = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));
-
- panel = gedit_window_get_side_panel (window);
-
- if (visible)
- {
- gtk_widget_show (GTK_WIDGET (panel));
- gtk_widget_grab_focus (GTK_WIDGET (panel));
- }
- else
- {
- gtk_widget_hide (GTK_WIDGET (panel));
- }
-}
-
-void
-_gedit_cmd_view_show_bottom_pane (GtkAction *action,
- GeditWindow *window)
-{
- gboolean visible;
- GeditPanel *panel;
-
- gedit_debug (DEBUG_COMMANDS);
-
- visible = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));
-
- panel = gedit_window_get_bottom_panel (window);
-
- if (visible)
- {
- gtk_widget_show (GTK_WIDGET (panel));
- gtk_widget_grab_focus (GTK_WIDGET (panel));
- }
- else
- {
- gtk_widget_hide (GTK_WIDGET (panel));
- }
-}
-
-void
-_gedit_cmd_view_toggle_fullscreen_mode (GtkAction *action,
- GeditWindow *window)
-{
- gedit_debug (DEBUG_COMMANDS);
-
- if (_gedit_window_is_fullscreen (window))
- _gedit_window_unfullscreen (window);
- else
- _gedit_window_fullscreen (window);
-}
-
-void
-_gedit_cmd_view_leave_fullscreen_mode (GtkAction *action,
- GeditWindow *window)
-{
- GtkAction *view_action;
-
- view_action = gtk_action_group_get_action (window->priv->always_sensitive_action_group,
- "ViewFullscreen");
- g_signal_handlers_block_by_func
- (view_action, G_CALLBACK (_gedit_cmd_view_toggle_fullscreen_mode),
- window);
- gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (view_action),
- FALSE);
- _gedit_window_unfullscreen (window);
- g_signal_handlers_unblock_by_func
- (view_action, G_CALLBACK (_gedit_cmd_view_toggle_fullscreen_mode),
- window);
-}
diff --git a/gedit/gedit-commands.h b/gedit/gedit-commands.h
deleted file mode 100755
index 08e70885..00000000
--- a/gedit/gedit-commands.h
+++ /dev/null
@@ -1,166 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * gedit-commands.h
- * This file is part of gedit
- *
- * Copyright (C) 1998, 1999 Alex Roberts, Evan Lawrence
- * Copyright (C) 2000, 2001 Chema Celorio, Paolo Maggi
- * Copyright (C) 2002-2005 Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 1998-2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifndef __GEDIT_COMMANDS_H__
-#define __GEDIT_COMMANDS_H__
-
-#include <gtk/gtk.h>
-#include <gedit/gedit-window.h>
-
-G_BEGIN_DECLS
-
-/* Do nothing if URI does not exist */
-void gedit_commands_load_uri (GeditWindow *window,
- const gchar *uri,
- const GeditEncoding *encoding,
- gint line_pos);
-
-/* Ignore non-existing URIs */
-gint gedit_commands_load_uris (GeditWindow *window,
- const GSList *uris,
- const GeditEncoding *encoding,
- gint line_pos);
-
-void gedit_commands_save_document (GeditWindow *window,
- GeditDocument *document);
-
-void gedit_commands_save_all_documents (GeditWindow *window);
-
-/*
- * Non-exported functions
- */
-
-/* Create titled documens for non-existing URIs */
-gint _gedit_cmd_load_files_from_prompt (GeditWindow *window,
- GSList *files,
- const GeditEncoding *encoding,
- gint line_pos);
-
-void _gedit_cmd_file_new (GtkAction *action,
- GeditWindow *window);
-void _gedit_cmd_file_open (GtkAction *action,
- GeditWindow *window);
-void _gedit_cmd_file_save (GtkAction *action,
- GeditWindow *window);
-void _gedit_cmd_file_save_as (GtkAction *action,
- GeditWindow *window);
-void _gedit_cmd_file_save_all (GtkAction *action,
- GeditWindow *window);
-void _gedit_cmd_file_revert (GtkAction *action,
- GeditWindow *window);
-void _gedit_cmd_file_open_uri (GtkAction *action,
- GeditWindow *window);
-void _gedit_cmd_file_print_preview (GtkAction *action,
- GeditWindow *window);
-void _gedit_cmd_file_print (GtkAction *action,
- GeditWindow *window);
-void _gedit_cmd_file_close (GtkAction *action,
- GeditWindow *window);
-void _gedit_cmd_file_close_all (GtkAction *action,
- GeditWindow *window);
-void _gedit_cmd_file_quit (GtkAction *action,
- GeditWindow *window);
-
-void _gedit_cmd_edit_undo (GtkAction *action,
- GeditWindow *window);
-void _gedit_cmd_edit_redo (GtkAction *action,
- GeditWindow *window);
-void _gedit_cmd_edit_cut (GtkAction *action,
- GeditWindow *window);
-void _gedit_cmd_edit_copy (GtkAction *action,
- GeditWindow *window);
-void _gedit_cmd_edit_paste (GtkAction *action,
- GeditWindow *window);
-void _gedit_cmd_edit_delete (GtkAction *action,
- GeditWindow *window);
-void _gedit_cmd_edit_select_all (GtkAction *action,
- GeditWindow *window);
-void _gedit_cmd_edit_preferences (GtkAction *action,
- GeditWindow *window);
-
-void _gedit_cmd_view_show_toolbar (GtkAction *action,
- GeditWindow *window);
-void _gedit_cmd_view_show_statusbar (GtkAction *action,
- GeditWindow *window);
-void _gedit_cmd_view_show_side_pane (GtkAction *action,
- GeditWindow *window);
-void _gedit_cmd_view_show_bottom_pane (GtkAction *action,
- GeditWindow *window);
-void _gedit_cmd_view_toggle_fullscreen_mode (GtkAction *action,
- GeditWindow *window);
-void _gedit_cmd_view_leave_fullscreen_mode (GtkAction *action,
- GeditWindow *window);
-
-void _gedit_cmd_search_find (GtkAction *action,
- GeditWindow *window);
-void _gedit_cmd_search_find_next (GtkAction *action,
- GeditWindow *window);
-void _gedit_cmd_search_find_prev (GtkAction *action,
- GeditWindow *window);
-void _gedit_cmd_search_replace (GtkAction *action,
- GeditWindow *window);
-void _gedit_cmd_search_clear_highlight (GtkAction *action,
- GeditWindow *window);
-void _gedit_cmd_search_goto_line (GtkAction *action,
- GeditWindow *window);
-void _gedit_cmd_search_incremental_search (GtkAction *action,
- GeditWindow *window);
-
-void _gedit_cmd_documents_previous_document (GtkAction *action,
- GeditWindow *window);
-void _gedit_cmd_documents_next_document (GtkAction *action,
- GeditWindow *window);
-void _gedit_cmd_documents_move_to_new_window (GtkAction *action,
- GeditWindow *window);
-
-void _gedit_cmd_help_contents (GtkAction *action,
- GeditWindow *window);
-void _gedit_cmd_help_about (GtkAction *action,
- GeditWindow *window);
-
-void _gedit_cmd_file_close_tab (GeditTab *tab,
- GeditWindow *window);
-
-void _gedit_cmd_file_save_documents_list (GeditWindow *window,
- GList *docs);
-
-
-#if !GTK_CHECK_VERSION (2, 17, 4)
-void _gedit_cmd_file_page_setup (GtkAction *action,
- GeditWindow *window);
-#endif
-
-
-G_END_DECLS
-
-#endif /* __GEDIT_COMMANDS_H__ */
diff --git a/gedit/gedit-debug.c b/gedit/gedit-debug.c
deleted file mode 100755
index 163a5a54..00000000
--- a/gedit/gedit-debug.c
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * gedit-debug.c
- * This file is part of gedit
- *
- * Copyright (C) 1998, 1999 Alex Roberts, Evan Lawrence
- * Copyright (C) 2000, 2001 Chema Celorio, Paolo Maggi
- * Copyright (C) 2002 - 2005 Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 1998-2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdio.h>
-#include "gedit-debug.h"
-
-#define ENABLE_PROFILING
-
-#ifdef ENABLE_PROFILING
-static GTimer *timer = NULL;
-static gdouble last = 0.0;
-#endif
-
-static GeditDebugSection debug = GEDIT_NO_DEBUG;
-
-void
-gedit_debug_init (void)
-{
- if (g_getenv ("GEDIT_DEBUG") != NULL)
- {
- /* enable all debugging */
- debug = ~GEDIT_NO_DEBUG;
- goto out;
- }
-
- if (g_getenv ("GEDIT_DEBUG_VIEW") != NULL)
- debug = debug | GEDIT_DEBUG_VIEW;
- if (g_getenv ("GEDIT_DEBUG_SEARCH") != NULL)
- debug = debug | GEDIT_DEBUG_SEARCH;
- if (g_getenv ("GEDIT_DEBUG_PREFS") != NULL)
- debug = debug | GEDIT_DEBUG_PREFS;
- if (g_getenv ("GEDIT_DEBUG_PRINT") != NULL)
- debug = debug | GEDIT_DEBUG_PRINT;
- if (g_getenv ("GEDIT_DEBUG_PLUGINS") != NULL)
- debug = debug | GEDIT_DEBUG_PLUGINS;
- if (g_getenv ("GEDIT_DEBUG_TAB") != NULL)
- debug = debug | GEDIT_DEBUG_TAB;
- if (g_getenv ("GEDIT_DEBUG_DOCUMENT") != NULL)
- debug = debug | GEDIT_DEBUG_DOCUMENT;
- if (g_getenv ("GEDIT_DEBUG_COMMANDS") != NULL)
- debug = debug | GEDIT_DEBUG_COMMANDS;
- if (g_getenv ("GEDIT_DEBUG_APP") != NULL)
- debug = debug | GEDIT_DEBUG_APP;
- if (g_getenv ("GEDIT_DEBUG_SESSION") != NULL)
- debug = debug | GEDIT_DEBUG_SESSION;
- if (g_getenv ("GEDIT_DEBUG_UTILS") != NULL)
- debug = debug | GEDIT_DEBUG_UTILS;
- if (g_getenv ("GEDIT_DEBUG_METADATA") != NULL)
- debug = debug | GEDIT_DEBUG_METADATA;
- if (g_getenv ("GEDIT_DEBUG_WINDOW") != NULL)
- debug = debug | GEDIT_DEBUG_WINDOW;
- if (g_getenv ("GEDIT_DEBUG_LOADER") != NULL)
- debug = debug | GEDIT_DEBUG_LOADER;
- if (g_getenv ("GEDIT_DEBUG_SAVER") != NULL)
- debug = debug | GEDIT_DEBUG_SAVER;
-
-out:
-
-#ifdef ENABLE_PROFILING
- if (debug != GEDIT_NO_DEBUG)
- timer = g_timer_new ();
-#endif
- return;
-}
-
-void
-gedit_debug_message (GeditDebugSection section,
- const gchar *file,
- gint line,
- const gchar *function,
- const gchar *format, ...)
-{
- if (G_UNLIKELY (debug & section))
- {
-#ifdef ENABLE_PROFILING
- gdouble seconds;
-#endif
-
- va_list args;
- gchar *msg;
-
- g_return_if_fail (format != NULL);
-
- va_start (args, format);
- msg = g_strdup_vprintf (format, args);
- va_end (args);
-
-#ifdef ENABLE_PROFILING
- g_return_if_fail (timer != NULL);
-
- seconds = g_timer_elapsed (timer, NULL);
- g_print ("[%f (%f)] %s:%d (%s) %s\n",
- seconds, seconds - last, file, line, function, msg);
- last = seconds;
-#else
- g_print ("%s:%d (%s) %s\n", file, line, function, msg);
-#endif
-
- fflush (stdout);
-
- g_free (msg);
- }
-}
-
-void gedit_debug (GeditDebugSection section,
- const gchar *file,
- gint line,
- const gchar *function)
-{
- if (G_UNLIKELY (debug & section))
- {
-#ifdef ENABLE_PROFILING
- gdouble seconds;
-
- g_return_if_fail (timer != NULL);
-
- seconds = g_timer_elapsed (timer, NULL);
- g_print ("[%f (%f)] %s:%d (%s)\n",
- seconds, seconds - last, file, line, function);
- last = seconds;
-#else
- g_print ("%s:%d (%s)\n", file, line, function);
-#endif
- fflush (stdout);
- }
-}
diff --git a/gedit/gedit-debug.h b/gedit/gedit-debug.h
deleted file mode 100755
index af7d7370..00000000
--- a/gedit/gedit-debug.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * gedit-debug.h
- * This file is part of gedit
- *
- * Copyright (C) 1998, 1999 Alex Roberts, Evan Lawrence
- * Copyright (C) 2000, 2001 Chema Celorio, Paolo Maggi
- * Copyright (C) 2002 - 2005 Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 1998-2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifndef __GEDIT_DEBUG_H__
-#define __GEDIT_DEBUG_H__
-
-#include <glib.h>
-
-/*
- * Set an environmental var of the same name to turn on
- * debugging output. Setting GEDIT_DEBUG will turn on all
- * sections.
- */
-typedef enum {
- GEDIT_NO_DEBUG = 0,
- GEDIT_DEBUG_VIEW = 1 << 0,
- GEDIT_DEBUG_SEARCH = 1 << 1,
- GEDIT_DEBUG_PRINT = 1 << 2,
- GEDIT_DEBUG_PREFS = 1 << 3,
- GEDIT_DEBUG_PLUGINS = 1 << 4,
- GEDIT_DEBUG_TAB = 1 << 5,
- GEDIT_DEBUG_DOCUMENT = 1 << 6,
- GEDIT_DEBUG_COMMANDS = 1 << 7,
- GEDIT_DEBUG_APP = 1 << 8,
- GEDIT_DEBUG_SESSION = 1 << 9,
- GEDIT_DEBUG_UTILS = 1 << 10,
- GEDIT_DEBUG_METADATA = 1 << 11,
- GEDIT_DEBUG_WINDOW = 1 << 12,
- GEDIT_DEBUG_LOADER = 1 << 13,
- GEDIT_DEBUG_SAVER = 1 << 14
-} GeditDebugSection;
-
-
-#define DEBUG_VIEW GEDIT_DEBUG_VIEW, __FILE__, __LINE__, G_STRFUNC
-#define DEBUG_SEARCH GEDIT_DEBUG_SEARCH, __FILE__, __LINE__, G_STRFUNC
-#define DEBUG_PRINT GEDIT_DEBUG_PRINT, __FILE__, __LINE__, G_STRFUNC
-#define DEBUG_PREFS GEDIT_DEBUG_PREFS, __FILE__, __LINE__, G_STRFUNC
-#define DEBUG_PLUGINS GEDIT_DEBUG_PLUGINS, __FILE__, __LINE__, G_STRFUNC
-#define DEBUG_TAB GEDIT_DEBUG_TAB, __FILE__, __LINE__, G_STRFUNC
-#define DEBUG_DOCUMENT GEDIT_DEBUG_DOCUMENT,__FILE__, __LINE__, G_STRFUNC
-#define DEBUG_COMMANDS GEDIT_DEBUG_COMMANDS,__FILE__, __LINE__, G_STRFUNC
-#define DEBUG_APP GEDIT_DEBUG_APP, __FILE__, __LINE__, G_STRFUNC
-#define DEBUG_SESSION GEDIT_DEBUG_SESSION, __FILE__, __LINE__, G_STRFUNC
-#define DEBUG_UTILS GEDIT_DEBUG_UTILS, __FILE__, __LINE__, G_STRFUNC
-#define DEBUG_METADATA GEDIT_DEBUG_METADATA,__FILE__, __LINE__, G_STRFUNC
-#define DEBUG_WINDOW GEDIT_DEBUG_WINDOW, __FILE__, __LINE__, G_STRFUNC
-#define DEBUG_LOADER GEDIT_DEBUG_LOADER, __FILE__, __LINE__, G_STRFUNC
-#define DEBUG_SAVER GEDIT_DEBUG_SAVER, __FILE__, __LINE__, G_STRFUNC
-
-void gedit_debug_init (void);
-
-void gedit_debug (GeditDebugSection section,
- const gchar *file,
- gint line,
- const gchar *function);
-
-void gedit_debug_message (GeditDebugSection section,
- const gchar *file,
- gint line,
- const gchar *function,
- const gchar *format, ...) G_GNUC_PRINTF(5, 6);
-
-
-#endif /* __GEDIT_DEBUG_H__ */
diff --git a/gedit/gedit-dirs.c b/gedit/gedit-dirs.c
deleted file mode 100755
index a1467f61..00000000
--- a/gedit/gedit-dirs.c
+++ /dev/null
@@ -1,320 +0,0 @@
-/*
- * gedit-dirs.c
- * This file is part of gedit
- *
- * Copyright (C) 2008 Ignacio Casal Quinteiro
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "gedit-dirs.h"
-
-#ifdef OS_OSX
-#include <ige-mac-bundle.h>
-#endif
-
-gchar *
-gedit_dirs_get_user_config_dir (void)
-{
- gchar *config_dir = NULL;
-
-#ifndef G_OS_WIN32
- const gchar *envvar;
- const gchar *home;
-
- /* Support old libmate env var */
- envvar = g_getenv ("MATE22_USER_DIR");
- if (envvar != NULL)
- {
- config_dir = g_build_filename (envvar,
- "gedit",
- NULL);
-
- }
- else
- {
- home = g_get_home_dir ();
-
- if (home != NULL)
- {
- config_dir = g_build_filename (home,
- ".mate2",
- "gedit",
- NULL);
- }
- }
-#else
- config_dir = g_build_filename (g_get_user_config_dir (),
- "gedit",
- NULL);
-#endif
-
- return config_dir;
-}
-
-gchar *
-gedit_dirs_get_user_cache_dir (void)
-{
- const gchar *cache_dir;
-
- cache_dir = g_get_user_cache_dir ();
-
- return g_build_filename (cache_dir,
- "gedit",
- NULL);
-}
-
-gchar *
-gedit_dirs_get_user_plugins_dir (void)
-{
- gchar *config_dir;
- gchar *plugin_dir;
-
- config_dir = gedit_dirs_get_user_config_dir ();
-
- plugin_dir = g_build_filename (config_dir,
- "plugins",
- NULL);
- g_free (config_dir);
-
- return plugin_dir;
-}
-
-gchar *
-gedit_dirs_get_user_accels_file (void)
-{
- gchar *accels = NULL;
-
-#ifndef G_OS_WIN32
- const gchar *envvar;
- const gchar *home;
-
- /* on linux accels are stored in .mate2/accels
- * for historic reasons (backward compat with the
- * old libmate that took care of saving them */
-
- /* Support old libmate env var */
- envvar = g_getenv ("MATE22_USER_DIR");
- if (envvar != NULL)
- {
- accels = g_build_filename (envvar,
- "accels",
- "gedit",
- NULL);
- }
- else
- {
- home = g_get_home_dir ();
-
- if (home != NULL)
- {
- accels = g_build_filename (home,
- ".mate2",
- "accels",
- "gedit",
- NULL);
- }
- }
-#else
- {
- gchar *config_dir = NULL;
-
- config_dir = gedit_dirs_get_user_config_dir ();
- accels = g_build_filename (config_dir,
- "accels",
- "gedit",
- NULL);
-
- g_free (config_dir);
- }
-#endif
-
- return accels;
-}
-
-gchar *
-gedit_dirs_get_gedit_data_dir (void)
-{
- gchar *data_dir;
-
-#ifdef G_OS_WIN32
- gchar *win32_dir;
-
- win32_dir = g_win32_get_package_installation_directory_of_module (NULL);
-
- data_dir = g_build_filename (win32_dir,
- "share",
- "gedit-2",
- NULL);
-
- g_free (win32_dir);
-#elif defined (OS_OSX)
- IgeMacBundle *bundle = ige_mac_bundle_get_default ();
-
- if (ige_mac_bundle_get_is_app_bundle (bundle))
- {
- const gchar *bundle_data_dir = ige_mac_bundle_get_datadir (bundle);
-
- data_dir = g_build_filename (bundle_data_dir,
- "gedit-2",
- NULL);
- }
- else
- {
- data_dir = g_build_filename (DATADIR, "gedit-2", NULL);
- }
-#else
- data_dir = g_build_filename (DATADIR,
- "gedit-2",
- NULL);
-#endif
-
- return data_dir;
-}
-
-gchar *
-gedit_dirs_get_gedit_locale_dir (void)
-{
- gchar *locale_dir;
-
-#ifdef G_OS_WIN32
- gchar *win32_dir;
-
- win32_dir = g_win32_get_package_installation_directory_of_module (NULL);
-
- locale_dir = g_build_filename (win32_dir,
- "share",
- "locale",
- NULL);
-
- g_free (win32_dir);
-#elif defined (OS_OSX)
- IgeMacBundle *bundle = ige_mac_bundle_get_default ();
-
- if (ige_mac_bundle_get_is_app_bundle (bundle))
- {
- locale_dir = g_strdup (ige_mac_bundle_get_localedir (bundle));
- }
- else
- {
- locale_dir = g_build_filename (DATADIR,
- "locale",
- NULL);
- }
-#else
- locale_dir = g_build_filename (DATADIR,
- "locale",
- NULL);
-#endif
-
- return locale_dir;
-}
-
-gchar *
-gedit_dirs_get_gedit_lib_dir (void)
-{
- gchar *lib_dir;
-
-#ifdef G_OS_WIN32
- gchar *win32_dir;
-
- win32_dir = g_win32_get_package_installation_directory_of_module (NULL);
-
- lib_dir = g_build_filename (win32_dir,
- "lib",
- "gedit-2",
- NULL);
-
- g_free (win32_dir);
-#elif defined (OS_OSX)
- IgeMacBundle *bundle = ige_mac_bundle_get_default ();
-
- if (ige_mac_bundle_get_is_app_bundle (bundle))
- {
- const gchar *path = ige_mac_bundle_get_resourcesdir (bundle);
- lib_dir = g_build_filename (path,
- "lib",
- "gedit-2",
- NULL);
- }
- else
- {
- lib_dir = g_build_filename (LIBDIR,
- "gedit-2",
- NULL);
- }
-#else
- lib_dir = g_build_filename (LIBDIR,
- "gedit-2",
- NULL);
-#endif
-
- return lib_dir;
-}
-
-gchar *
-gedit_dirs_get_gedit_plugins_dir (void)
-{
- gchar *lib_dir;
- gchar *plugin_dir;
-
- lib_dir = gedit_dirs_get_gedit_lib_dir ();
-
- plugin_dir = g_build_filename (lib_dir,
- "plugins",
- NULL);
- g_free (lib_dir);
-
- return plugin_dir;
-}
-
-gchar *
-gedit_dirs_get_gedit_plugin_loaders_dir (void)
-{
- gchar *lib_dir;
- gchar *loader_dir;
-
- lib_dir = gedit_dirs_get_gedit_lib_dir ();
-
- loader_dir = g_build_filename (lib_dir,
- "plugin-loaders",
- NULL);
- g_free (lib_dir);
-
- return loader_dir;
-}
-
-gchar *
-gedit_dirs_get_ui_file (const gchar *file)
-{
- gchar *datadir;
- gchar *ui_file;
-
- g_return_val_if_fail (file != NULL, NULL);
-
- datadir = gedit_dirs_get_gedit_data_dir ();
- ui_file = g_build_filename (datadir,
- "ui",
- file,
- NULL);
- g_free (datadir);
-
- return ui_file;
-}
diff --git a/gedit/gedit-dirs.h b/gedit/gedit-dirs.h
deleted file mode 100755
index eddd00d0..00000000
--- a/gedit/gedit-dirs.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * gedit-dirs.h
- * This file is part of gedit
- *
- * Copyright (C) 2008 Ignacio Casal Quinteiro
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-
-#ifndef __GEDIT_DIRS_H__
-#define __GEDIT_DIRS_H__
-
-#include <glib.h>
-
-G_BEGIN_DECLS
-
-gchar *gedit_dirs_get_user_config_dir (void);
-
-gchar *gedit_dirs_get_user_cache_dir (void);
-
-gchar *gedit_dirs_get_user_plugins_dir (void);
-
-gchar *gedit_dirs_get_user_accels_file (void);
-
-gchar *gedit_dirs_get_gedit_data_dir (void);
-
-gchar *gedit_dirs_get_gedit_locale_dir (void);
-
-gchar *gedit_dirs_get_gedit_lib_dir (void);
-
-gchar *gedit_dirs_get_gedit_plugins_dir (void);
-
-gchar *gedit_dirs_get_gedit_plugin_loaders_dir
- (void);
-
-gchar *gedit_dirs_get_ui_file (const gchar *file);
-
-G_END_DECLS
-
-#endif /* __GEDIT_DIRS_H__ */
diff --git a/gedit/gedit-document-input-stream.c b/gedit/gedit-document-input-stream.c
deleted file mode 100755
index 5a1f9614..00000000
--- a/gedit/gedit-document-input-stream.c
+++ /dev/null
@@ -1,479 +0,0 @@
-/*
- * gedit-document-input-stream.c
- * This file is part of gedit
- *
- * Copyright (C) 2010 - Ignacio Casal Quinteiro
- *
- * gedit 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.
- *
- * gedit 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 gedit; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- */
-
-#include "config.h"
-
-#include <glib.h>
-#include <gio/gio.h>
-#include <string.h>
-#include "gedit-document-input-stream.h"
-#include "gedit-enum-types.h"
-
-/* NOTE: never use async methods on this stream, the stream is just
- * a wrapper around GtkTextBuffer api so that we can use GIO Stream
- * methods, but the undelying code operates on a GtkTextBuffer, so
- * there is no I/O involved and should be accessed only by the main
- * thread */
-
-
-G_DEFINE_TYPE (GeditDocumentInputStream, gedit_document_input_stream, G_TYPE_INPUT_STREAM);
-
-struct _GeditDocumentInputStreamPrivate
-{
- GtkTextBuffer *buffer;
- GtkTextMark *pos;
- gint bytes_partial;
-
- GeditDocumentNewlineType newline_type;
-
- guint newline_added : 1;
- guint is_initialized : 1;
-};
-
-enum
-{
- PROP_0,
- PROP_BUFFER,
- PROP_NEWLINE_TYPE
-};
-
-static gssize gedit_document_input_stream_read (GInputStream *stream,
- void *buffer,
- gsize count,
- GCancellable *cancellable,
- GError **error);
-static gboolean gedit_document_input_stream_close (GInputStream *stream,
- GCancellable *cancellable,
- GError **error);
-
-static void
-gedit_document_input_stream_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- GeditDocumentInputStream *stream = GEDIT_DOCUMENT_INPUT_STREAM (object);
-
- switch (prop_id)
- {
- case PROP_BUFFER:
- stream->priv->buffer = GTK_TEXT_BUFFER (g_value_get_object (value));
- break;
-
- case PROP_NEWLINE_TYPE:
- stream->priv->newline_type = g_value_get_enum (value);
- break;
-
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gedit_document_input_stream_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- GeditDocumentInputStream *stream = GEDIT_DOCUMENT_INPUT_STREAM (object);
-
- switch (prop_id)
- {
- case PROP_BUFFER:
- g_value_set_object (value, stream->priv->buffer);
- break;
-
- case PROP_NEWLINE_TYPE:
- g_value_set_enum (value, stream->priv->newline_type);
- break;
-
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gedit_document_input_stream_class_init (GeditDocumentInputStreamClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GInputStreamClass *stream_class = G_INPUT_STREAM_CLASS (klass);
-
- g_type_class_add_private (klass, sizeof (GeditDocumentInputStreamPrivate));
-
- gobject_class->get_property = gedit_document_input_stream_get_property;
- gobject_class->set_property = gedit_document_input_stream_set_property;
-
- stream_class->read_fn = gedit_document_input_stream_read;
- stream_class->close_fn = gedit_document_input_stream_close;
-
- g_object_class_install_property (gobject_class,
- PROP_BUFFER,
- g_param_spec_object ("buffer",
- "Buffer",
- "The buffer which is read",
- GTK_TYPE_TEXT_BUFFER,
- G_PARAM_READWRITE |
- G_PARAM_CONSTRUCT_ONLY));
-
- /**
- * GeditDocumentInputStream:newline-type:
- *
- * The :newline-type property determines what is considered
- * as a line ending when reading complete lines from the stream.
- */
- g_object_class_install_property (gobject_class,
- PROP_NEWLINE_TYPE,
- g_param_spec_enum ("newline-type",
- "Newline type",
- "The accepted types of line ending",
- GEDIT_TYPE_DOCUMENT_NEWLINE_TYPE,
- GEDIT_DOCUMENT_NEWLINE_TYPE_LF,
- G_PARAM_READWRITE |
- G_PARAM_STATIC_NAME |
- G_PARAM_STATIC_BLURB |
- G_PARAM_CONSTRUCT_ONLY));
-}
-
-static void
-gedit_document_input_stream_init (GeditDocumentInputStream *stream)
-{
- stream->priv = G_TYPE_INSTANCE_GET_PRIVATE (stream,
- GEDIT_TYPE_DOCUMENT_INPUT_STREAM,
- GeditDocumentInputStreamPrivate);
-}
-
-static gsize
-get_new_line_size (GeditDocumentInputStream *stream)
-{
- gsize ret;
-
- switch (stream->priv->newline_type)
- {
- case GEDIT_DOCUMENT_NEWLINE_TYPE_CR:
- case GEDIT_DOCUMENT_NEWLINE_TYPE_LF:
- ret = 1;
- break;
-
- case GEDIT_DOCUMENT_NEWLINE_TYPE_CR_LF:
- ret = 2;
- break;
-
- default:
- g_warn_if_reached ();
- ret = 1;
- break;
- }
-
- return ret;
-}
-
-/**
- * gedit_document_input_stream_new:
- * @buffer: a #GtkTextBuffer
- *
- * Reads the data from @buffer.
- *
- * Returns: a new #GInputStream to read @buffer
- */
-GInputStream *
-gedit_document_input_stream_new (GtkTextBuffer *buffer,
- GeditDocumentNewlineType type)
-{
- GeditDocumentInputStream *stream;
-
- g_return_val_if_fail (GTK_IS_TEXT_BUFFER (buffer), NULL);
-
- stream = g_object_new (GEDIT_TYPE_DOCUMENT_INPUT_STREAM,
- "buffer", buffer,
- "newline-type", type,
- NULL);
-
- return G_INPUT_STREAM (stream);
-}
-
-gsize
-gedit_document_input_stream_get_total_size (GeditDocumentInputStream *stream)
-{
- g_return_val_if_fail (GEDIT_IS_DOCUMENT_INPUT_STREAM (stream), 0);
-
- return gtk_text_buffer_get_char_count (stream->priv->buffer);
-}
-
-gsize
-gedit_document_input_stream_tell (GeditDocumentInputStream *stream)
-{
- g_return_val_if_fail (GEDIT_IS_DOCUMENT_INPUT_STREAM (stream), 0);
-
- /* FIXME: is this potentially inefficient? If yes, we could keep
- track of the offset internally, assuming the mark doesn't move
- during the operation */
- if (!stream->priv->is_initialized)
- {
- return 0;
- }
- else
- {
- GtkTextIter iter;
-
- gtk_text_buffer_get_iter_at_mark (stream->priv->buffer,
- &iter,
- stream->priv->pos);
- return gtk_text_iter_get_offset (&iter);
- }
-}
-
-static const gchar *
-get_new_line (GeditDocumentInputStream *stream)
-{
- const gchar *ret;
-
- switch (stream->priv->newline_type)
- {
- case GEDIT_DOCUMENT_NEWLINE_TYPE_CR:
- ret = "\r";
- break;
-
- case GEDIT_DOCUMENT_NEWLINE_TYPE_LF:
- ret = "\n";
- break;
-
- case GEDIT_DOCUMENT_NEWLINE_TYPE_CR_LF:
- ret = "\r\n";
- break;
-
- default:
- g_warn_if_reached ();
- ret = "\n";
- break;
- }
-
- return ret;
-}
-
-static gsize
-read_line (GeditDocumentInputStream *stream,
- gchar *outbuf,
- gsize space_left)
-{
- GtkTextIter start, next, end;
- gchar *buf;
- gint bytes; /* int since it's what iter_get_offset returns */
- gsize bytes_to_write, newline_size, read;
- const gchar *newline;
- gboolean is_last;
-
- gtk_text_buffer_get_iter_at_mark (stream->priv->buffer,
- &start,
- stream->priv->pos);
-
- if (gtk_text_iter_is_end (&start))
- return 0;
-
- end = next = start;
- newline = get_new_line (stream);
-
- /* Check needed for empty lines */
- if (!gtk_text_iter_ends_line (&end))
- gtk_text_iter_forward_to_line_end (&end);
-
- gtk_text_iter_forward_line (&next);
-
- buf = gtk_text_iter_get_slice (&start, &end);
-
- /* the bytes of a line includes also the newline, so with the
- offsets we remove the newline and we add the new newline size */
- bytes = gtk_text_iter_get_bytes_in_line (&start) - stream->priv->bytes_partial;
-
- /* bytes_in_line includes the newlines, so we remove that assuming that
- they are single byte characters */
- bytes = bytes - (gtk_text_iter_get_offset (&next) - gtk_text_iter_get_offset (&end));
- is_last = gtk_text_iter_is_end (&end);
-
- /* bytes_to_write contains the amount of bytes we would like to write.
- This means its the amount of bytes in the line (without the newline
- in the buffer) + the amount of bytes for the newline we want to
- write (newline_size) */
- bytes_to_write = bytes;
-
- /* do not add the new newline_size for the last line */
- newline_size = get_new_line_size (stream);
- if (!is_last)
- bytes_to_write += newline_size;
-
- if (bytes_to_write > space_left)
- {
- gchar *ptr;
- gint char_offset;
- gint written;
- gsize to_write;
-
- /* Here the line does not fit in the buffer, we thus write
- the amount of bytes we can still fit, storing the position
- for the next read with the mark. Do not try to write the
- new newline in this case, it will be handled in the next
- iteration */
- to_write = MIN (space_left, bytes);
- ptr = buf;
- written = 0;
- char_offset = 0;
-
- while (written < to_write)
- {
- gint w;
-
- ptr = g_utf8_next_char (ptr);
- w = (ptr - buf);
- if (w > to_write)
- {
- break;
- }
- else
- {
- written = w;
- ++char_offset;
- }
- }
-
- memcpy (outbuf, buf, written);
-
- /* Note: offset is one past what we wrote */
- gtk_text_iter_forward_chars (&start, char_offset);
- stream->priv->bytes_partial += written;
- read = written;
- }
- else
- {
- /* First just copy the bytes without the newline */
- memcpy (outbuf, buf, bytes);
-
- /* Then add the newline, but not for the last line */
- if (!is_last)
- {
- memcpy (outbuf + bytes, newline, newline_size);
- }
-
- start = next;
- stream->priv->bytes_partial = 0;
- read = bytes_to_write;
- }
-
- gtk_text_buffer_move_mark (stream->priv->buffer,
- stream->priv->pos,
- &start);
-
- g_free (buf);
- return read;
-}
-
-static gssize
-gedit_document_input_stream_read (GInputStream *stream,
- void *buffer,
- gsize count,
- GCancellable *cancellable,
- GError **error)
-{
- GeditDocumentInputStream *dstream;
- GtkTextIter iter;
- gssize space_left, read, n;
-
- dstream = GEDIT_DOCUMENT_INPUT_STREAM (stream);
-
- if (count < 6)
- {
- g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NO_SPACE,
- "Not enougth space in destination");
- return -1;
- }
-
- if (g_cancellable_set_error_if_cancelled (cancellable, error))
- return -1;
-
- /* Initialize the mark to the first char in the text buffer */
- if (!dstream->priv->is_initialized)
- {
- gtk_text_buffer_get_start_iter (dstream->priv->buffer, &iter);
- dstream->priv->pos = gtk_text_buffer_create_mark (dstream->priv->buffer,
- NULL,
- &iter,
- FALSE);
-
- dstream->priv->is_initialized = TRUE;
- }
-
- space_left = count;
- read = 0;
-
- do
- {
- n = read_line (dstream, buffer + read, space_left);
- read += n;
- space_left -= n;
- } while (space_left > 0 && n != 0 && dstream->priv->bytes_partial == 0);
-
- /* Make sure that non-empty files are always terminated with \n (see bug #95676).
- * Note that we strip the trailing \n when loading the file */
- gtk_text_buffer_get_iter_at_mark (dstream->priv->buffer,
- &iter,
- dstream->priv->pos);
-
- if (gtk_text_iter_is_end (&iter) &&
- !gtk_text_iter_is_start (&iter))
- {
- gssize newline_size;
-
- newline_size = get_new_line_size (dstream);
-
- if (space_left >= newline_size &&
- !dstream->priv->newline_added)
- {
- const gchar *newline;
-
- newline = get_new_line (dstream);
-
- memcpy (buffer + read, newline, newline_size);
-
- read += newline_size;
- dstream->priv->newline_added = TRUE;
- }
- }
-
- return read;
-}
-
-static gboolean
-gedit_document_input_stream_close (GInputStream *stream,
- GCancellable *cancellable,
- GError **error)
-{
- GeditDocumentInputStream *dstream = GEDIT_DOCUMENT_INPUT_STREAM (stream);
-
- dstream->priv->newline_added = FALSE;
-
- if (dstream->priv->is_initialized)
- {
- gtk_text_buffer_delete_mark (dstream->priv->buffer, dstream->priv->pos);
- }
-
- return TRUE;
-}
diff --git a/gedit/gedit-document-input-stream.h b/gedit/gedit-document-input-stream.h
deleted file mode 100755
index 01f6a491..00000000
--- a/gedit/gedit-document-input-stream.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * gedit-document-input-stream.h
- * This file is part of gedit
- *
- * Copyright (C) 2010 - Ignacio Casal Quinteiro
- *
- * gedit 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.
- *
- * gedit 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 gedit; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- */
-
-#ifndef __GEDIT_DOCUMENT_INPUT_STREAM_H__
-#define __GEDIT_DOCUMENT_INPUT_STREAM_H__
-
-#include <gio/gio.h>
-#include <gtk/gtk.h>
-
-#include "gedit-document.h"
-
-G_BEGIN_DECLS
-
-#define GEDIT_TYPE_DOCUMENT_INPUT_STREAM (gedit_document_input_stream_get_type ())
-#define GEDIT_DOCUMENT_INPUT_STREAM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEDIT_TYPE_DOCUMENT_INPUT_STREAM, GeditDocumentInputStream))
-#define GEDIT_DOCUMENT_INPUT_STREAM_CONST(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEDIT_TYPE_DOCUMENT_INPUT_STREAM, GeditDocumentInputStream const))
-#define GEDIT_DOCUMENT_INPUT_STREAM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEDIT_TYPE_DOCUMENT_INPUT_STREAM, GeditDocumentInputStreamClass))
-#define GEDIT_IS_DOCUMENT_INPUT_STREAM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEDIT_TYPE_DOCUMENT_INPUT_STREAM))
-#define GEDIT_IS_DOCUMENT_INPUT_STREAM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEDIT_TYPE_DOCUMENT_INPUT_STREAM))
-#define GEDIT_DOCUMENT_INPUT_STREAM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEDIT_TYPE_DOCUMENT_INPUT_STREAM, GeditDocumentInputStreamClass))
-
-typedef struct _GeditDocumentInputStream GeditDocumentInputStream;
-typedef struct _GeditDocumentInputStreamClass GeditDocumentInputStreamClass;
-typedef struct _GeditDocumentInputStreamPrivate GeditDocumentInputStreamPrivate;
-
-struct _GeditDocumentInputStream
-{
- GInputStream parent;
-
- GeditDocumentInputStreamPrivate *priv;
-};
-
-struct _GeditDocumentInputStreamClass
-{
- GInputStreamClass parent_class;
-};
-
-GType gedit_document_input_stream_get_type (void) G_GNUC_CONST;
-
-GInputStream *gedit_document_input_stream_new (GtkTextBuffer *buffer,
- GeditDocumentNewlineType type);
-
-gsize gedit_document_input_stream_get_total_size (GeditDocumentInputStream *stream);
-
-gsize gedit_document_input_stream_tell (GeditDocumentInputStream *stream);
-
-G_END_DECLS
-
-#endif /* __GEDIT_DOCUMENT_INPUT_STREAM_H__ */
diff --git a/gedit/gedit-document-loader.c b/gedit/gedit-document-loader.c
deleted file mode 100755
index 05368c8b..00000000
--- a/gedit/gedit-document-loader.c
+++ /dev/null
@@ -1,357 +0,0 @@
-/*
- * gedit-document-loader.c
- * This file is part of gedit
- *
- * Copyright (C) 2005 - Paolo Maggi
- * Copyright (C) 2007 - Paolo Maggi, Steve Frécinaux
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2005-2007. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <glib/gi18n.h>
-
-#include "gedit-document-loader.h"
-#include "gedit-debug.h"
-#include "gedit-metadata-manager.h"
-#include "gedit-utils.h"
-#include "gedit-marshal.h"
-#include "gedit-enum-types.h"
-
-/* Those are for the the gedit_document_loader_new() factory */
-#include "gedit-gio-document-loader.h"
-
-G_DEFINE_ABSTRACT_TYPE(GeditDocumentLoader, gedit_document_loader, G_TYPE_OBJECT)
-
-/* Signals */
-
-enum {
- LOADING,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
-/* Properties */
-
-enum
-{
- PROP_0,
- PROP_DOCUMENT,
- PROP_URI,
- PROP_ENCODING,
- PROP_NEWLINE_TYPE
-};
-
-static void
-gedit_document_loader_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- GeditDocumentLoader *loader = GEDIT_DOCUMENT_LOADER (object);
-
- switch (prop_id)
- {
- case PROP_DOCUMENT:
- g_return_if_fail (loader->document == NULL);
- loader->document = g_value_get_object (value);
- break;
- case PROP_URI:
- g_return_if_fail (loader->uri == NULL);
- loader->uri = g_value_dup_string (value);
- break;
- case PROP_ENCODING:
- g_return_if_fail (loader->encoding == NULL);
- loader->encoding = g_value_get_boxed (value);
- break;
- case PROP_NEWLINE_TYPE:
- loader->auto_detected_newline_type = g_value_get_enum (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gedit_document_loader_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- GeditDocumentLoader *loader = GEDIT_DOCUMENT_LOADER (object);
-
- switch (prop_id)
- {
- case PROP_DOCUMENT:
- g_value_set_object (value, loader->document);
- break;
- case PROP_URI:
- g_value_set_string (value, loader->uri);
- break;
- case PROP_ENCODING:
- g_value_set_boxed (value, gedit_document_loader_get_encoding (loader));
- break;
- case PROP_NEWLINE_TYPE:
- g_value_set_enum (value, loader->auto_detected_newline_type);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gedit_document_loader_finalize (GObject *object)
-{
- GeditDocumentLoader *loader = GEDIT_DOCUMENT_LOADER (object);
-
- g_free (loader->uri);
-
- if (loader->info)
- g_object_unref (loader->info);
-
- G_OBJECT_CLASS (gedit_document_loader_parent_class)->finalize (object);
-}
-
-static void
-gedit_document_loader_dispose (GObject *object)
-{
- GeditDocumentLoader *loader = GEDIT_DOCUMENT_LOADER (object);
-
- if (loader->info != NULL)
- {
- g_object_unref (loader->info);
- loader->info = NULL;
- }
-
- G_OBJECT_CLASS (gedit_document_loader_parent_class)->dispose (object);
-}
-
-static void
-gedit_document_loader_class_init (GeditDocumentLoaderClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->finalize = gedit_document_loader_finalize;
- object_class->dispose = gedit_document_loader_dispose;
- object_class->get_property = gedit_document_loader_get_property;
- object_class->set_property = gedit_document_loader_set_property;
-
- g_object_class_install_property (object_class,
- PROP_DOCUMENT,
- g_param_spec_object ("document",
- "Document",
- "The GeditDocument this GeditDocumentLoader is associated with",
- GEDIT_TYPE_DOCUMENT,
- G_PARAM_READWRITE |
- G_PARAM_CONSTRUCT_ONLY |
- G_PARAM_STATIC_STRINGS));
-
- g_object_class_install_property (object_class,
- PROP_URI,
- g_param_spec_string ("uri",
- "URI",
- "The URI this GeditDocumentLoader loads the document from",
- "",
- G_PARAM_READWRITE |
- G_PARAM_CONSTRUCT_ONLY));
-
- g_object_class_install_property (object_class,
- PROP_ENCODING,
- g_param_spec_boxed ("encoding",
- "Encoding",
- "The encoding of the saved file",
- GEDIT_TYPE_ENCODING,
- G_PARAM_READWRITE |
- G_PARAM_CONSTRUCT_ONLY |
- G_PARAM_STATIC_STRINGS));
-
- g_object_class_install_property (object_class, PROP_NEWLINE_TYPE,
- g_param_spec_enum ("newline-type",
- "Newline type",
- "The accepted types of line ending",
- GEDIT_TYPE_DOCUMENT_NEWLINE_TYPE,
- GEDIT_DOCUMENT_NEWLINE_TYPE_LF,
- G_PARAM_READWRITE |
- G_PARAM_STATIC_NAME |
- G_PARAM_STATIC_BLURB));
-
- signals[LOADING] =
- g_signal_new ("loading",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GeditDocumentLoaderClass, loading),
- NULL, NULL,
- gedit_marshal_VOID__BOOLEAN_POINTER,
- G_TYPE_NONE,
- 2,
- G_TYPE_BOOLEAN,
- G_TYPE_POINTER);
-}
-
-static void
-gedit_document_loader_init (GeditDocumentLoader *loader)
-{
- loader->used = FALSE;
- loader->auto_detected_newline_type = GEDIT_DOCUMENT_NEWLINE_TYPE_DEFAULT;
-}
-
-void
-gedit_document_loader_loading (GeditDocumentLoader *loader,
- gboolean completed,
- GError *error)
-{
- /* the object will be unrefed in the callback of the loading signal
- * (when completed == TRUE), so we need to prevent finalization.
- */
- if (completed)
- {
- g_object_ref (loader);
- }
-
- g_signal_emit (loader, signals[LOADING], 0, completed, error);
-
- if (completed)
- {
- if (error == NULL)
- gedit_debug_message (DEBUG_LOADER, "load completed");
- else
- gedit_debug_message (DEBUG_LOADER, "load failed");
-
- g_object_unref (loader);
- }
-}
-
-/* This is a factory method that returns an appopriate loader
- * for the given uri.
- */
-GeditDocumentLoader *
-gedit_document_loader_new (GeditDocument *doc,
- const gchar *uri,
- const GeditEncoding *encoding)
-{
- GeditDocumentLoader *loader;
- GType loader_type;
-
- g_return_val_if_fail (GEDIT_IS_DOCUMENT (doc), NULL);
-
- /* At the moment we just use gio loader in all cases...
- * In the future it would be great to have a PolicyKit
- * loader to get permission to save systen files etc */
- loader_type = GEDIT_TYPE_GIO_DOCUMENT_LOADER;
-
- loader = GEDIT_DOCUMENT_LOADER (g_object_new (loader_type,
- "document", doc,
- "uri", uri,
- "encoding", encoding,
- NULL));
-
- return loader;
-}
-
-/* If enconding == NULL, the encoding will be autodetected */
-void
-gedit_document_loader_load (GeditDocumentLoader *loader)
-{
- gedit_debug (DEBUG_LOADER);
-
- g_return_if_fail (GEDIT_IS_DOCUMENT_LOADER (loader));
-
- /* the loader can be used just once, then it must be thrown away */
- g_return_if_fail (loader->used == FALSE);
- loader->used = TRUE;
-
- GEDIT_DOCUMENT_LOADER_GET_CLASS (loader)->load (loader);
-}
-
-gboolean
-gedit_document_loader_cancel (GeditDocumentLoader *loader)
-{
- gedit_debug (DEBUG_LOADER);
-
- g_return_val_if_fail (GEDIT_IS_DOCUMENT_LOADER (loader), FALSE);
-
- return GEDIT_DOCUMENT_LOADER_GET_CLASS (loader)->cancel (loader);
-}
-
-GeditDocument *
-gedit_document_loader_get_document (GeditDocumentLoader *loader)
-{
- g_return_val_if_fail (GEDIT_IS_DOCUMENT_LOADER (loader), NULL);
-
- return loader->document;
-}
-
-/* Returns STDIN_URI if loading from stdin */
-const gchar *
-gedit_document_loader_get_uri (GeditDocumentLoader *loader)
-{
- g_return_val_if_fail (GEDIT_IS_DOCUMENT_LOADER (loader), NULL);
-
- return loader->uri;
-}
-
-goffset
-gedit_document_loader_get_bytes_read (GeditDocumentLoader *loader)
-{
- g_return_val_if_fail (GEDIT_IS_DOCUMENT_LOADER (loader), 0);
-
- return GEDIT_DOCUMENT_LOADER_GET_CLASS (loader)->get_bytes_read (loader);
-}
-
-const GeditEncoding *
-gedit_document_loader_get_encoding (GeditDocumentLoader *loader)
-{
- g_return_val_if_fail (GEDIT_IS_DOCUMENT_LOADER (loader), NULL);
-
- if (loader->encoding != NULL)
- return loader->encoding;
-
- g_return_val_if_fail (loader->auto_detected_encoding != NULL,
- gedit_encoding_get_current ());
-
- return loader->auto_detected_encoding;
-}
-
-GeditDocumentNewlineType
-gedit_document_loader_get_newline_type (GeditDocumentLoader *loader)
-{
- g_return_val_if_fail (GEDIT_IS_DOCUMENT_LOADER (loader),
- GEDIT_DOCUMENT_NEWLINE_TYPE_LF);
-
- return loader->auto_detected_newline_type;
-}
-
-GFileInfo *
-gedit_document_loader_get_info (GeditDocumentLoader *loader)
-{
- g_return_val_if_fail (GEDIT_IS_DOCUMENT_LOADER (loader), NULL);
-
- return loader->info;
-}
diff --git a/gedit/gedit-document-loader.h b/gedit/gedit-document-loader.h
deleted file mode 100755
index a627fba0..00000000
--- a/gedit/gedit-document-loader.h
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * gedit-document-loader.h
- * This file is part of gedit
- *
- * Copyright (C) 2005 - Paolo Maggi
- * Copyright (C) 2007 - Paolo Maggi, Steve Frécinaux
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2005-2007. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifndef __GEDIT_DOCUMENT_LOADER_H__
-#define __GEDIT_DOCUMENT_LOADER_H__
-
-#include <gedit/gedit-document.h>
-
-G_BEGIN_DECLS
-
-/*
- * Type checking and casting macros
- */
-#define GEDIT_TYPE_DOCUMENT_LOADER (gedit_document_loader_get_type())
-#define GEDIT_DOCUMENT_LOADER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GEDIT_TYPE_DOCUMENT_LOADER, GeditDocumentLoader))
-#define GEDIT_DOCUMENT_LOADER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GEDIT_TYPE_DOCUMENT_LOADER, GeditDocumentLoaderClass))
-#define GEDIT_IS_DOCUMENT_LOADER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GEDIT_TYPE_DOCUMENT_LOADER))
-#define GEDIT_IS_DOCUMENT_LOADER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEDIT_TYPE_DOCUMENT_LOADER))
-#define GEDIT_DOCUMENT_LOADER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GEDIT_TYPE_DOCUMENT_LOADER, GeditDocumentLoaderClass))
-
-/* Private structure type */
-typedef struct _GeditDocumentLoaderPrivate GeditDocumentLoaderPrivate;
-
-/*
- * Main object structure
- */
-typedef struct _GeditDocumentLoader GeditDocumentLoader;
-
-struct _GeditDocumentLoader
-{
- GObject object;
-
- GeditDocument *document;
- gboolean used;
-
- /* Info on the current file */
- GFileInfo *info;
- gchar *uri;
- const GeditEncoding *encoding;
- const GeditEncoding *auto_detected_encoding;
- GeditDocumentNewlineType auto_detected_newline_type;
-};
-
-/*
- * Class definition
- */
-typedef struct _GeditDocumentLoaderClass GeditDocumentLoaderClass;
-
-struct _GeditDocumentLoaderClass
-{
- GObjectClass parent_class;
-
- /* Signals */
- void (* loading) (GeditDocumentLoader *loader,
- gboolean completed,
- const GError *error);
-
- /* VTable */
- void (* load) (GeditDocumentLoader *loader);
- gboolean (* cancel) (GeditDocumentLoader *loader);
- goffset (* get_bytes_read) (GeditDocumentLoader *loader);
-};
-
-/*
- * Public methods
- */
-GType gedit_document_loader_get_type (void) G_GNUC_CONST;
-
-/* If enconding == NULL, the encoding will be autodetected */
-GeditDocumentLoader *gedit_document_loader_new (GeditDocument *doc,
- const gchar *uri,
- const GeditEncoding *encoding);
-
-void gedit_document_loader_loading (GeditDocumentLoader *loader,
- gboolean completed,
- GError *error);
-
-void gedit_document_loader_load (GeditDocumentLoader *loader);
-#if 0
-gboolean gedit_document_loader_load_from_stdin (GeditDocumentLoader *loader);
-#endif
-gboolean gedit_document_loader_cancel (GeditDocumentLoader *loader);
-
-GeditDocument *gedit_document_loader_get_document (GeditDocumentLoader *loader);
-
-/* Returns STDIN_URI if loading from stdin */
-#define STDIN_URI "stdin:"
-const gchar *gedit_document_loader_get_uri (GeditDocumentLoader *loader);
-
-const GeditEncoding *gedit_document_loader_get_encoding (GeditDocumentLoader *loader);
-
-GeditDocumentNewlineType gedit_document_loader_get_newline_type (GeditDocumentLoader *loader);
-
-goffset gedit_document_loader_get_bytes_read (GeditDocumentLoader *loader);
-
-/* You can get from the info: content_type, time_modified, standard_size, access_can_write
- and also the metadata*/
-GFileInfo *gedit_document_loader_get_info (GeditDocumentLoader *loader);
-
-G_END_DECLS
-
-#endif /* __GEDIT_DOCUMENT_LOADER_H__ */
diff --git a/gedit/gedit-document-output-stream.c b/gedit/gedit-document-output-stream.c
deleted file mode 100755
index e1ef5af5..00000000
--- a/gedit/gedit-document-output-stream.c
+++ /dev/null
@@ -1,391 +0,0 @@
-/*
- * gedit-document-output-stream.c
- * This file is part of gedit
- *
- * Copyright (C) 2010 - Ignacio Casal Quinteiro
- *
- * gedit 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.
- *
- * gedit 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 gedit; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- */
-
-#include "config.h"
-
-#include <string.h>
-#include <glib.h>
-#include <glib/gi18n.h>
-#include <gio/gio.h>
-#include "gedit-document-output-stream.h"
-
-/* NOTE: never use async methods on this stream, the stream is just
- * a wrapper around GtkTextBuffer api so that we can use GIO Stream
- * methods, but the undelying code operates on a GtkTextBuffer, so
- * there is no I/O involved and should be accessed only by the main
- * thread */
-
-#define GEDIT_DOCUMENT_OUTPUT_STREAM_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE((object),\
- GEDIT_TYPE_DOCUMENT_OUTPUT_STREAM,\
- GeditDocumentOutputStreamPrivate))
-
-#define MAX_UNICHAR_LEN 6
-
-struct _GeditDocumentOutputStreamPrivate
-{
- GeditDocument *doc;
- GtkTextIter pos;
-
- gchar *buffer;
- gsize buflen;
-
- guint is_initialized : 1;
- guint is_closed : 1;
-};
-
-enum
-{
- PROP_0,
- PROP_DOCUMENT
-};
-
-G_DEFINE_TYPE (GeditDocumentOutputStream, gedit_document_output_stream, G_TYPE_OUTPUT_STREAM)
-
-static gssize gedit_document_output_stream_write (GOutputStream *stream,
- const void *buffer,
- gsize count,
- GCancellable *cancellable,
- GError **error);
-
-static gboolean gedit_document_output_stream_close (GOutputStream *stream,
- GCancellable *cancellable,
- GError **error);
-
-static void
-gedit_document_output_stream_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- GeditDocumentOutputStream *stream = GEDIT_DOCUMENT_OUTPUT_STREAM (object);
-
- switch (prop_id)
- {
- case PROP_DOCUMENT:
- stream->priv->doc = GEDIT_DOCUMENT (g_value_get_object (value));
- break;
-
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gedit_document_output_stream_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- GeditDocumentOutputStream *stream = GEDIT_DOCUMENT_OUTPUT_STREAM (object);
-
- switch (prop_id)
- {
- case PROP_DOCUMENT:
- g_value_set_object (value, stream->priv->doc);
- break;
-
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gedit_document_output_stream_finalize (GObject *object)
-{
- GeditDocumentOutputStream *stream = GEDIT_DOCUMENT_OUTPUT_STREAM (object);
-
- g_free (stream->priv->buffer);
-
- G_OBJECT_CLASS (gedit_document_output_stream_parent_class)->finalize (object);
-}
-
-static void
-gedit_document_output_stream_constructed (GObject *object)
-{
- GeditDocumentOutputStream *stream = GEDIT_DOCUMENT_OUTPUT_STREAM (object);
-
- if (!stream->priv->doc)
- {
- g_critical ("This should never happen, a problem happened constructing the Document Output Stream!");
- return;
- }
-
- /* Init the undoable action */
- gtk_source_buffer_begin_not_undoable_action (GTK_SOURCE_BUFFER (stream->priv->doc));
- /* clear the buffer */
- gtk_text_buffer_set_text (GTK_TEXT_BUFFER (stream->priv->doc),
- "", 0);
- gtk_text_buffer_set_modified (GTK_TEXT_BUFFER (stream->priv->doc),
- FALSE);
-
- gtk_source_buffer_end_not_undoable_action (GTK_SOURCE_BUFFER (stream->priv->doc));
-}
-
-static void
-gedit_document_output_stream_class_init (GeditDocumentOutputStreamClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- GOutputStreamClass *stream_class = G_OUTPUT_STREAM_CLASS (klass);
-
- object_class->get_property = gedit_document_output_stream_get_property;
- object_class->set_property = gedit_document_output_stream_set_property;
- object_class->finalize = gedit_document_output_stream_finalize;
- object_class->constructed = gedit_document_output_stream_constructed;
-
- stream_class->write_fn = gedit_document_output_stream_write;
- stream_class->close_fn = gedit_document_output_stream_close;
-
- g_object_class_install_property (object_class,
- PROP_DOCUMENT,
- g_param_spec_object ("document",
- "Document",
- "The document which is written",
- GEDIT_TYPE_DOCUMENT,
- G_PARAM_READWRITE |
- G_PARAM_CONSTRUCT_ONLY));
-
- g_type_class_add_private (object_class, sizeof (GeditDocumentOutputStreamPrivate));
-}
-
-static void
-gedit_document_output_stream_init (GeditDocumentOutputStream *stream)
-{
- stream->priv = GEDIT_DOCUMENT_OUTPUT_STREAM_GET_PRIVATE (stream);
-
- stream->priv->buffer = NULL;
- stream->priv->buflen = 0;
-
- stream->priv->is_initialized = FALSE;
- stream->priv->is_closed = FALSE;
-}
-
-static GeditDocumentNewlineType
-get_newline_type (GtkTextIter *end)
-{
- GeditDocumentNewlineType res;
- GtkTextIter copy;
- gunichar c;
-
- copy = *end;
- c = gtk_text_iter_get_char (&copy);
-
- if (g_unichar_break_type (c) == G_UNICODE_BREAK_CARRIAGE_RETURN)
- {
- if (gtk_text_iter_forward_char (&copy) &&
- g_unichar_break_type (gtk_text_iter_get_char (&copy)) == G_UNICODE_BREAK_LINE_FEED)
- {
- res = GEDIT_DOCUMENT_NEWLINE_TYPE_CR_LF;
- }
- else
- {
- res = GEDIT_DOCUMENT_NEWLINE_TYPE_CR;
- }
- }
- else
- {
- res = GEDIT_DOCUMENT_NEWLINE_TYPE_LF;
- }
-
- return res;
-}
-
-GOutputStream *
-gedit_document_output_stream_new (GeditDocument *doc)
-{
- return G_OUTPUT_STREAM (g_object_new (GEDIT_TYPE_DOCUMENT_OUTPUT_STREAM,
- "document", doc, NULL));
-}
-
-GeditDocumentNewlineType
-gedit_document_output_stream_detect_newline_type (GeditDocumentOutputStream *stream)
-{
- GeditDocumentNewlineType type;
- GtkTextIter iter;
-
- g_return_val_if_fail (GEDIT_IS_DOCUMENT_OUTPUT_STREAM (stream),
- GEDIT_DOCUMENT_NEWLINE_TYPE_DEFAULT);
-
- type = GEDIT_DOCUMENT_NEWLINE_TYPE_DEFAULT;
-
- gtk_text_buffer_get_start_iter (GTK_TEXT_BUFFER (stream->priv->doc),
- &iter);
-
- if (gtk_text_iter_ends_line (&iter) || gtk_text_iter_forward_to_line_end (&iter))
- {
- type = get_newline_type (&iter);
- }
-
- return type;
-}
-
-/* If the last char is a newline, remove it from the buffer (otherwise
- GtkTextView shows it as an empty line). See bug #324942. */
-static void
-remove_ending_newline (GeditDocumentOutputStream *stream)
-{
- GtkTextIter end;
- GtkTextIter start;
-
- gtk_text_buffer_get_end_iter (GTK_TEXT_BUFFER (stream->priv->doc), &end);
- start = end;
-
- gtk_text_iter_set_line_offset (&start, 0);
-
- if (gtk_text_iter_ends_line (&start) &&
- gtk_text_iter_backward_line (&start))
- {
- if (!gtk_text_iter_ends_line (&start))
- {
- gtk_text_iter_forward_to_line_end (&start);
- }
-
- /* Delete the empty line which is from 'start' to 'end' */
- gtk_text_buffer_delete (GTK_TEXT_BUFFER (stream->priv->doc),
- &start,
- &end);
- }
-}
-
-static void
-end_append_text_to_document (GeditDocumentOutputStream *stream)
-{
- remove_ending_newline (stream);
-
- gtk_text_buffer_set_modified (GTK_TEXT_BUFFER (stream->priv->doc),
- FALSE);
-
- gtk_source_buffer_end_not_undoable_action (GTK_SOURCE_BUFFER (stream->priv->doc));
-}
-
-static gssize
-gedit_document_output_stream_write (GOutputStream *stream,
- const void *buffer,
- gsize count,
- GCancellable *cancellable,
- GError **error)
-{
- GeditDocumentOutputStream *ostream;
- gchar *text;
- gsize len;
- gboolean freetext = FALSE;
- const gchar *end;
- gsize nvalid;
- gboolean valid;
-
- if (g_cancellable_set_error_if_cancelled (cancellable, error))
- return -1;
-
- ostream = GEDIT_DOCUMENT_OUTPUT_STREAM (stream);
-
- if (!ostream->priv->is_initialized)
- {
- /* Init the undoable action */
- gtk_source_buffer_begin_not_undoable_action (GTK_SOURCE_BUFFER (ostream->priv->doc));
-
- gtk_text_buffer_get_start_iter (GTK_TEXT_BUFFER (ostream->priv->doc),
- &ostream->priv->pos);
- ostream->priv->is_initialized = TRUE;
- }
-
- if (ostream->priv->buflen > 0)
- {
- len = ostream->priv->buflen + count;
- text = g_new (gchar , len + 1);
- memcpy (text, ostream->priv->buffer, ostream->priv->buflen);
- memcpy (text + ostream->priv->buflen, buffer, count);
- text[len] = '\0';
- g_free (ostream->priv->buffer);
- ostream->priv->buffer = NULL;
- ostream->priv->buflen = 0;
- freetext = TRUE;
- }
- else
- {
- text = (gchar *) buffer;
- len = count;
- }
-
- /* validate */
- valid = g_utf8_validate (text, len, &end);
- nvalid = end - text;
-
- if (!valid)
- {
- gsize remainder;
-
- remainder = len - nvalid;
-
- if ((remainder < MAX_UNICHAR_LEN) &&
- (g_utf8_get_char_validated (text + nvalid, remainder) == (gunichar)-2))
- {
- ostream->priv->buffer = g_strndup (end, remainder);
- ostream->priv->buflen = remainder;
- len -= remainder;
- }
- else
- {
- /* TODO: we cuould escape invalid text and tag it in red
- * and make the doc readonly.
- */
- g_set_error (error, G_IO_ERROR, G_IO_ERROR_INVALID_DATA,
- _("Invalid UTF-8 sequence in input"));
-
- if (freetext)
- g_free (text);
-
- return -1;
- }
- }
-
- gtk_text_buffer_insert (GTK_TEXT_BUFFER (ostream->priv->doc),
- &ostream->priv->pos, text, len);
-
- if (freetext)
- g_free (text);
-
- return count;
-}
-
-static gboolean
-gedit_document_output_stream_close (GOutputStream *stream,
- GCancellable *cancellable,
- GError **error)
-{
- GeditDocumentOutputStream *ostream = GEDIT_DOCUMENT_OUTPUT_STREAM (stream);
-
- if (!ostream->priv->is_closed && ostream->priv->is_initialized)
- {
- end_append_text_to_document (ostream);
- ostream->priv->is_closed = TRUE;
- }
-
- if (ostream->priv->buflen > 0)
- {
- g_set_error (error, G_IO_ERROR, G_IO_ERROR_INVALID_DATA,
- _("Incomplete UTF-8 sequence in input"));
- return FALSE;
- }
-
- return TRUE;
-}
diff --git a/gedit/gedit-document-output-stream.h b/gedit/gedit-document-output-stream.h
deleted file mode 100755
index a3f99fce..00000000
--- a/gedit/gedit-document-output-stream.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * gedit-document-output-stream.h
- * This file is part of gedit
- *
- * Copyright (C) 2010 - Ignacio Casal Quinteiro
- *
- * gedit 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.
- *
- * gedit 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 gedit; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- */
-
-
-#ifndef __GEDIT_DOCUMENT_OUTPUT_STREAM_H__
-#define __GEDIT_DOCUMENT_OUTPUT_STREAM_H__
-
-#include <gio/gio.h>
-#include "gedit-document.h"
-
-G_BEGIN_DECLS
-
-#define GEDIT_TYPE_DOCUMENT_OUTPUT_STREAM (gedit_document_output_stream_get_type ())
-#define GEDIT_DOCUMENT_OUTPUT_STREAM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEDIT_TYPE_DOCUMENT_OUTPUT_STREAM, GeditDocumentOutputStream))
-#define GEDIT_DOCUMENT_OUTPUT_STREAM_CONST(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEDIT_TYPE_DOCUMENT_OUTPUT_STREAM, GeditDocumentOutputStream const))
-#define GEDIT_DOCUMENT_OUTPUT_STREAM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEDIT_TYPE_DOCUMENT_OUTPUT_STREAM, GeditDocumentOutputStreamClass))
-#define GEDIT_IS_DOCUMENT_OUTPUT_STREAM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEDIT_TYPE_DOCUMENT_OUTPUT_STREAM))
-#define GEDIT_IS_DOCUMENT_OUTPUT_STREAM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEDIT_TYPE_DOCUMENT_OUTPUT_STREAM))
-#define GEDIT_DOCUMENT_OUTPUT_STREAM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEDIT_TYPE_DOCUMENT_OUTPUT_STREAM, GeditDocumentOutputStreamClass))
-
-typedef struct _GeditDocumentOutputStream GeditDocumentOutputStream;
-typedef struct _GeditDocumentOutputStreamClass GeditDocumentOutputStreamClass;
-typedef struct _GeditDocumentOutputStreamPrivate GeditDocumentOutputStreamPrivate;
-
-struct _GeditDocumentOutputStream
-{
- GOutputStream parent;
-
- GeditDocumentOutputStreamPrivate *priv;
-};
-
-struct _GeditDocumentOutputStreamClass
-{
- GOutputStreamClass parent_class;
-};
-
-GType gedit_document_output_stream_get_type (void) G_GNUC_CONST;
-
-GOutputStream *gedit_document_output_stream_new (GeditDocument *doc);
-
-GeditDocumentNewlineType gedit_document_output_stream_detect_newline_type (GeditDocumentOutputStream *stream);
-
-G_END_DECLS
-
-#endif /* __GEDIT_DOCUMENT_OUTPUT_STREAM_H__ */
diff --git a/gedit/gedit-document-saver.c b/gedit/gedit-document-saver.c
deleted file mode 100755
index 1a064da6..00000000
--- a/gedit/gedit-document-saver.c
+++ /dev/null
@@ -1,359 +0,0 @@
-/*
- * gedit-document-saver.c
- * This file is part of gedit
- *
- * Copyright (C) 2005-2006 - Paolo Borelli and Paolo Maggi
- * Copyright (C) 2007 - Paolo Borelli, Paolo Maggi, Steve Frécinaux
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2005-2006. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <string.h>
-#include <errno.h>
-#include <unistd.h>
-
-#include <glib/gi18n.h>
-
-#include "gedit-document-saver.h"
-#include "gedit-debug.h"
-#include "gedit-prefs-manager.h"
-#include "gedit-marshal.h"
-#include "gedit-utils.h"
-#include "gedit-enum-types.h"
-#include "gedit-gio-document-saver.h"
-
-G_DEFINE_ABSTRACT_TYPE(GeditDocumentSaver, gedit_document_saver, G_TYPE_OBJECT)
-
-/* Signals */
-
-enum {
- SAVING,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
-/* Properties */
-
-enum {
- PROP_0,
- PROP_DOCUMENT,
- PROP_URI,
- PROP_ENCODING,
- PROP_NEWLINE_TYPE,
- PROP_FLAGS
-};
-
-static void
-gedit_document_saver_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- GeditDocumentSaver *saver = GEDIT_DOCUMENT_SAVER (object);
-
- switch (prop_id)
- {
- case PROP_DOCUMENT:
- g_return_if_fail (saver->document == NULL);
- saver->document = g_value_get_object (value);
- break;
- case PROP_URI:
- g_return_if_fail (saver->uri == NULL);
- saver->uri = g_value_dup_string (value);
- break;
- case PROP_ENCODING:
- g_return_if_fail (saver->encoding == NULL);
- saver->encoding = g_value_get_boxed (value);
- break;
- case PROP_NEWLINE_TYPE:
- saver->newline_type = g_value_get_enum (value);
- break;
- case PROP_FLAGS:
- saver->flags = g_value_get_flags (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gedit_document_saver_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- GeditDocumentSaver *saver = GEDIT_DOCUMENT_SAVER (object);
-
- switch (prop_id)
- {
- case PROP_DOCUMENT:
- g_value_set_object (value, saver->document);
- break;
- case PROP_URI:
- g_value_set_string (value, saver->uri);
- break;
- case PROP_ENCODING:
- g_value_set_boxed (value, saver->encoding);
- break;
- case PROP_NEWLINE_TYPE:
- g_value_set_enum (value, saver->newline_type);
- break;
- case PROP_FLAGS:
- g_value_set_flags (value, saver->flags);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gedit_document_saver_finalize (GObject *object)
-{
- GeditDocumentSaver *saver = GEDIT_DOCUMENT_SAVER (object);
-
- g_free (saver->uri);
-
- G_OBJECT_CLASS (gedit_document_saver_parent_class)->finalize (object);
-}
-
-static void
-gedit_document_saver_dispose (GObject *object)
-{
- GeditDocumentSaver *saver = GEDIT_DOCUMENT_SAVER (object);
-
- if (saver->info != NULL)
- {
- g_object_unref (saver->info);
- saver->info = NULL;
- }
-
- G_OBJECT_CLASS (gedit_document_saver_parent_class)->dispose (object);
-}
-
-static void
-gedit_document_saver_class_init (GeditDocumentSaverClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->finalize = gedit_document_saver_finalize;
- object_class->dispose = gedit_document_saver_dispose;
- object_class->set_property = gedit_document_saver_set_property;
- object_class->get_property = gedit_document_saver_get_property;
-
- g_object_class_install_property (object_class,
- PROP_DOCUMENT,
- g_param_spec_object ("document",
- "Document",
- "The GeditDocument this GeditDocumentSaver is associated with",
- GEDIT_TYPE_DOCUMENT,
- G_PARAM_READWRITE |
- G_PARAM_CONSTRUCT_ONLY |
- G_PARAM_STATIC_STRINGS));
-
- g_object_class_install_property (object_class,
- PROP_URI,
- g_param_spec_string ("uri",
- "URI",
- "The URI this GeditDocumentSaver saves the document to",
- "",
- G_PARAM_READWRITE |
- G_PARAM_CONSTRUCT_ONLY |
- G_PARAM_STATIC_STRINGS));
-
- g_object_class_install_property (object_class,
- PROP_ENCODING,
- g_param_spec_boxed ("encoding",
- "URI",
- "The encoding of the saved file",
- GEDIT_TYPE_ENCODING,
- G_PARAM_READWRITE |
- G_PARAM_CONSTRUCT_ONLY |
- G_PARAM_STATIC_STRINGS));
-
- g_object_class_install_property (object_class,
- PROP_NEWLINE_TYPE,
- g_param_spec_enum ("newline-type",
- "Newline type",
- "The accepted types of line ending",
- GEDIT_TYPE_DOCUMENT_NEWLINE_TYPE,
- GEDIT_DOCUMENT_NEWLINE_TYPE_LF,
- G_PARAM_READWRITE |
- G_PARAM_STATIC_NAME |
- G_PARAM_STATIC_BLURB |
- G_PARAM_CONSTRUCT_ONLY));
-
- g_object_class_install_property (object_class,
- PROP_FLAGS,
- g_param_spec_flags ("flags",
- "Flags",
- "The flags for the saving operation",
- GEDIT_TYPE_DOCUMENT_SAVE_FLAGS,
- 0,
- G_PARAM_READWRITE |
- G_PARAM_CONSTRUCT_ONLY));
-
- signals[SAVING] =
- g_signal_new ("saving",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GeditDocumentSaverClass, saving),
- NULL, NULL,
- gedit_marshal_VOID__BOOLEAN_POINTER,
- G_TYPE_NONE,
- 2,
- G_TYPE_BOOLEAN,
- G_TYPE_POINTER);
-}
-
-static void
-gedit_document_saver_init (GeditDocumentSaver *saver)
-{
- saver->used = FALSE;
-}
-
-GeditDocumentSaver *
-gedit_document_saver_new (GeditDocument *doc,
- const gchar *uri,
- const GeditEncoding *encoding,
- GeditDocumentNewlineType newline_type,
- GeditDocumentSaveFlags flags)
-{
- GeditDocumentSaver *saver;
- GType saver_type;
-
- g_return_val_if_fail (GEDIT_IS_DOCUMENT (doc), NULL);
-
- saver_type = GEDIT_TYPE_GIO_DOCUMENT_SAVER;
-
- if (encoding == NULL)
- encoding = gedit_encoding_get_utf8 ();
-
- saver = GEDIT_DOCUMENT_SAVER (g_object_new (saver_type,
- "document", doc,
- "uri", uri,
- "encoding", encoding,
- "newline_type", newline_type,
- "flags", flags,
- NULL));
-
- return saver;
-}
-
-void
-gedit_document_saver_saving (GeditDocumentSaver *saver,
- gboolean completed,
- GError *error)
-{
- /* the object will be unrefed in the callback of the saving
- * signal, so we need to prevent finalization.
- */
- if (completed)
- {
- g_object_ref (saver);
- }
-
- g_signal_emit (saver, signals[SAVING], 0, completed, error);
-
- if (completed)
- {
- if (error == NULL)
- gedit_debug_message (DEBUG_SAVER, "save completed");
- else
- gedit_debug_message (DEBUG_SAVER, "save failed");
-
- g_object_unref (saver);
- }
-}
-
-void
-gedit_document_saver_save (GeditDocumentSaver *saver,
- GTimeVal *old_mtime)
-{
- gedit_debug (DEBUG_SAVER);
-
- g_return_if_fail (GEDIT_IS_DOCUMENT_SAVER (saver));
- g_return_if_fail (saver->uri != NULL && strlen (saver->uri) > 0);
-
- g_return_if_fail (saver->used == FALSE);
- saver->used = TRUE;
-
- // CHECK:
- // - sanity check a max len for the uri?
- // report async (in an idle handler) or sync (bool ret)
- // async is extra work here, sync is special casing in the caller
-
- /* never keep backup of autosaves */
- if ((saver->flags & GEDIT_DOCUMENT_SAVE_PRESERVE_BACKUP) != 0)
- saver->keep_backup = FALSE;
- else
- saver->keep_backup = gedit_prefs_manager_get_create_backup_copy ();
-
- GEDIT_DOCUMENT_SAVER_GET_CLASS (saver)->save (saver, old_mtime);
-}
-
-GeditDocument *
-gedit_document_saver_get_document (GeditDocumentSaver *saver)
-{
- g_return_val_if_fail (GEDIT_IS_DOCUMENT_SAVER (saver), NULL);
-
- return saver->document;
-}
-
-const gchar *
-gedit_document_saver_get_uri (GeditDocumentSaver *saver)
-{
- g_return_val_if_fail (GEDIT_IS_DOCUMENT_SAVER (saver), NULL);
-
- return saver->uri;
-}
-
-/* Returns 0 if file size is unknown */
-goffset
-gedit_document_saver_get_file_size (GeditDocumentSaver *saver)
-{
- g_return_val_if_fail (GEDIT_IS_DOCUMENT_SAVER (saver), 0);
-
- return GEDIT_DOCUMENT_SAVER_GET_CLASS (saver)->get_file_size (saver);
-}
-
-goffset
-gedit_document_saver_get_bytes_written (GeditDocumentSaver *saver)
-{
- g_return_val_if_fail (GEDIT_IS_DOCUMENT_SAVER (saver), 0);
-
- return GEDIT_DOCUMENT_SAVER_GET_CLASS (saver)->get_bytes_written (saver);
-}
-
-GFileInfo *
-gedit_document_saver_get_info (GeditDocumentSaver *saver)
-{
- g_return_val_if_fail (GEDIT_IS_DOCUMENT_SAVER (saver), NULL);
-
- return saver->info;
-}
diff --git a/gedit/gedit-document-saver.h b/gedit/gedit-document-saver.h
deleted file mode 100755
index ccc0b5c7..00000000
--- a/gedit/gedit-document-saver.h
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * gedit-document-saver.h
- * This file is part of gedit
- *
- * Copyright (C) 2005 - Paolo Maggi
- * Copyrhing (C) 2007 - Paolo Maggi, Steve Frécinaux
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifndef __GEDIT_DOCUMENT_SAVER_H__
-#define __GEDIT_DOCUMENT_SAVER_H__
-
-#include <gedit/gedit-document.h>
-
-G_BEGIN_DECLS
-
-/*
- * Type checking and casting macros
- */
-#define GEDIT_TYPE_DOCUMENT_SAVER (gedit_document_saver_get_type())
-#define GEDIT_DOCUMENT_SAVER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GEDIT_TYPE_DOCUMENT_SAVER, GeditDocumentSaver))
-#define GEDIT_DOCUMENT_SAVER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GEDIT_TYPE_DOCUMENT_SAVER, GeditDocumentSaverClass))
-#define GEDIT_IS_DOCUMENT_SAVER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GEDIT_TYPE_DOCUMENT_SAVER))
-#define GEDIT_IS_DOCUMENT_SAVER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEDIT_TYPE_DOCUMENT_SAVER))
-#define GEDIT_DOCUMENT_SAVER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GEDIT_TYPE_DOCUMENT_SAVER, GeditDocumentSaverClass))
-
-/*
- * Main object structure
- */
-typedef struct _GeditDocumentSaver GeditDocumentSaver;
-
-struct _GeditDocumentSaver
-{
- GObject object;
-
- /*< private >*/
- GFileInfo *info;
- GeditDocument *document;
- gboolean used;
-
- gchar *uri;
- const GeditEncoding *encoding;
- GeditDocumentNewlineType newline_type;
-
- GeditDocumentSaveFlags flags;
-
- gboolean keep_backup;
-};
-
-/*
- * Class definition
- */
-typedef struct _GeditDocumentSaverClass GeditDocumentSaverClass;
-
-struct _GeditDocumentSaverClass
-{
- GObjectClass parent_class;
-
- /* Signals */
- void (* saving) (GeditDocumentSaver *saver,
- gboolean completed,
- const GError *error);
-
- /* VTable */
- void (* save) (GeditDocumentSaver *saver,
- GTimeVal *old_mtime);
- goffset (* get_file_size) (GeditDocumentSaver *saver);
- goffset (* get_bytes_written) (GeditDocumentSaver *saver);
-};
-
-/*
- * Public methods
- */
-GType gedit_document_saver_get_type (void) G_GNUC_CONST;
-
-/* If enconding == NULL, the encoding will be autodetected */
-GeditDocumentSaver *gedit_document_saver_new (GeditDocument *doc,
- const gchar *uri,
- const GeditEncoding *encoding,
- GeditDocumentNewlineType newline_type,
- GeditDocumentSaveFlags flags);
-
-void gedit_document_saver_saving (GeditDocumentSaver *saver,
- gboolean completed,
- GError *error);
-void gedit_document_saver_save (GeditDocumentSaver *saver,
- GTimeVal *old_mtime);
-
-#if 0
-void gedit_document_saver_cancel (GeditDocumentSaver *saver);
-#endif
-
-GeditDocument *gedit_document_saver_get_document (GeditDocumentSaver *saver);
-
-const gchar *gedit_document_saver_get_uri (GeditDocumentSaver *saver);
-
-/* If backup_uri is NULL no backup will be made */
-const gchar *gedit_document_saver_get_backup_uri (GeditDocumentSaver *saver);
-void *gedit_document_saver_set_backup_uri (GeditDocumentSaver *saver,
- const gchar *backup_uri);
-
-/* Returns 0 if file size is unknown */
-goffset gedit_document_saver_get_file_size (GeditDocumentSaver *saver);
-
-goffset gedit_document_saver_get_bytes_written (GeditDocumentSaver *saver);
-
-GFileInfo *gedit_document_saver_get_info (GeditDocumentSaver *saver);
-
-G_END_DECLS
-
-#endif /* __GEDIT_DOCUMENT_SAVER_H__ */
diff --git a/gedit/gedit-document.c b/gedit/gedit-document.c
deleted file mode 100755
index d9612263..00000000
--- a/gedit/gedit-document.c
+++ /dev/null
@@ -1,2732 +0,0 @@
-/*
- * gedit-document.c
- * This file is part of gedit
- *
- * Copyright (C) 1998, 1999 Alex Roberts, Evan Lawrence
- * Copyright (C) 2000, 2001 Chema Celorio, Paolo Maggi
- * Copyright (C) 2002-2005 Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 1998-2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <string.h>
-#include <stdlib.h>
-
-#include <glib/gi18n.h>
-#include <gtksourceview/gtksourceiter.h>
-
-#include "gedit-prefs-manager-app.h"
-#include "gedit-document.h"
-#include "gedit-debug.h"
-#include "gedit-utils.h"
-#include "gedit-language-manager.h"
-#include "gedit-style-scheme-manager.h"
-#include "gedit-document-loader.h"
-#include "gedit-document-saver.h"
-#include "gedit-marshal.h"
-#include "gedit-enum-types.h"
-#include "gedittextregion.h"
-
-#ifndef ENABLE_GVFS_METADATA
-#include "gedit-metadata-manager.h"
-#else
-#define METADATA_QUERY "metadata::*"
-#endif
-
-#undef ENABLE_PROFILE
-
-#ifdef ENABLE_PROFILE
-#define PROFILE(x) x
-#else
-#define PROFILE(x)
-#endif
-
-PROFILE (static GTimer *timer = NULL)
-
-#ifdef MAXPATHLEN
-#define GEDIT_MAX_PATH_LEN MAXPATHLEN
-#elif defined (PATH_MAX)
-#define GEDIT_MAX_PATH_LEN PATH_MAX
-#else
-#define GEDIT_MAX_PATH_LEN 2048
-#endif
-
-#define GEDIT_DOCUMENT_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), GEDIT_TYPE_DOCUMENT, GeditDocumentPrivate))
-
-static void gedit_document_load_real (GeditDocument *doc,
- const gchar *uri,
- const GeditEncoding *encoding,
- gint line_pos,
- gboolean create);
-static void gedit_document_save_real (GeditDocument *doc,
- const gchar *uri,
- const GeditEncoding *encoding,
- GeditDocumentSaveFlags flags);
-static void to_search_region_range (GeditDocument *doc,
- GtkTextIter *start,
- GtkTextIter *end);
-static void insert_text_cb (GeditDocument *doc,
- GtkTextIter *pos,
- const gchar *text,
- gint length);
-
-static void delete_range_cb (GeditDocument *doc,
- GtkTextIter *start,
- GtkTextIter *end);
-
-struct _GeditDocumentPrivate
-{
- gchar *uri;
- gint untitled_number;
- gchar *short_name;
-
- GFileInfo *metadata_info;
-
- const GeditEncoding *encoding;
-
- gchar *content_type;
-
- GTimeVal mtime;
- GTimeVal time_of_last_save_or_load;
-
- guint search_flags;
- gchar *search_text;
- gint num_of_lines_search_text;
-
- GeditDocumentNewlineType newline_type;
-
- /* Temp data while loading */
- GeditDocumentLoader *loader;
- gboolean create; /* Create file if uri points
- * to a non existing file */
- const GeditEncoding *requested_encoding;
- gint requested_line_pos;
-
- /* Saving stuff */
- GeditDocumentSaver *saver;
-
- /* Search highlighting support variables */
- GeditTextRegion *to_search_region;
- GtkTextTag *found_tag;
-
- /* Mount operation factory */
- GeditMountOperationFactory mount_operation_factory;
- gpointer mount_operation_userdata;
-
- gint readonly : 1;
- gint last_save_was_manually : 1;
- gint language_set_by_user : 1;
- gint stop_cursor_moved_emission : 1;
- gint dispose_has_run : 1;
-};
-
-enum {
- PROP_0,
-
- PROP_URI,
- PROP_SHORTNAME,
- PROP_CONTENT_TYPE,
- PROP_MIME_TYPE,
- PROP_READ_ONLY,
- PROP_ENCODING,
- PROP_CAN_SEARCH_AGAIN,
- PROP_ENABLE_SEARCH_HIGHLIGHTING,
- PROP_NEWLINE_TYPE
-};
-
-enum {
- CURSOR_MOVED,
- LOAD,
- LOADING,
- LOADED,
- SAVE,
- SAVING,
- SAVED,
- SEARCH_HIGHLIGHT_UPDATED,
- LAST_SIGNAL
-};
-
-static guint document_signals[LAST_SIGNAL] = { 0 };
-
-G_DEFINE_TYPE(GeditDocument, gedit_document, GTK_TYPE_SOURCE_BUFFER)
-
-GQuark
-gedit_document_error_quark (void)
-{
- static GQuark quark = 0;
-
- if (G_UNLIKELY (quark == 0))
- quark = g_quark_from_static_string ("gedit_io_load_error");
-
- return quark;
-}
-
-static GHashTable *allocated_untitled_numbers = NULL;
-
-static gint
-get_untitled_number (void)
-{
- gint i = 1;
-
- if (allocated_untitled_numbers == NULL)
- allocated_untitled_numbers = g_hash_table_new (NULL, NULL);
-
- g_return_val_if_fail (allocated_untitled_numbers != NULL, -1);
-
- while (TRUE)
- {
- if (g_hash_table_lookup (allocated_untitled_numbers, GINT_TO_POINTER (i)) == NULL)
- {
- g_hash_table_insert (allocated_untitled_numbers,
- GINT_TO_POINTER (i),
- GINT_TO_POINTER (i));
-
- return i;
- }
-
- ++i;
- }
-}
-
-static void
-release_untitled_number (gint n)
-{
- g_return_if_fail (allocated_untitled_numbers != NULL);
-
- g_hash_table_remove (allocated_untitled_numbers, GINT_TO_POINTER (n));
-}
-
-static void
-gedit_document_dispose (GObject *object)
-{
- GeditDocument *doc = GEDIT_DOCUMENT (object);
-
- gedit_debug (DEBUG_DOCUMENT);
-
- /* Metadata must be saved here and not in finalize
- * because the language is gone by the time finalize runs.
- * beside if some plugin prevents proper finalization by
- * holding a ref to the doc, we still save the metadata */
- if ((!doc->priv->dispose_has_run) && (doc->priv->uri != NULL))
- {
- GtkTextIter iter;
- gchar *position;
- const gchar *language = NULL;
-
- if (doc->priv->language_set_by_user)
- {
- GtkSourceLanguage *lang;
-
- lang = gedit_document_get_language (doc);
-
- if (lang == NULL)
- language = "_NORMAL_";
- else
- language = gtk_source_language_get_id (lang);
- }
-
- gtk_text_buffer_get_iter_at_mark (
- GTK_TEXT_BUFFER (doc),
- &iter,
- gtk_text_buffer_get_insert (GTK_TEXT_BUFFER (doc)));
-
- position = g_strdup_printf ("%d",
- gtk_text_iter_get_offset (&iter));
-
- if (language == NULL)
- gedit_document_set_metadata (doc, GEDIT_METADATA_ATTRIBUTE_POSITION,
- position, NULL);
- else
- gedit_document_set_metadata (doc, GEDIT_METADATA_ATTRIBUTE_POSITION,
- position, GEDIT_METADATA_ATTRIBUTE_LANGUAGE,
- language, NULL);
- g_free (position);
- }
-
- if (doc->priv->loader)
- {
- g_object_unref (doc->priv->loader);
- doc->priv->loader = NULL;
- }
-
- if (doc->priv->metadata_info != NULL)
- {
- g_object_unref (doc->priv->metadata_info);
- doc->priv->metadata_info = NULL;
- }
-
- doc->priv->dispose_has_run = TRUE;
-
- G_OBJECT_CLASS (gedit_document_parent_class)->dispose (object);
-}
-
-static void
-gedit_document_finalize (GObject *object)
-{
- GeditDocument *doc = GEDIT_DOCUMENT (object);
-
- gedit_debug (DEBUG_DOCUMENT);
-
- if (doc->priv->untitled_number > 0)
- {
- g_return_if_fail (doc->priv->uri == NULL);
- release_untitled_number (doc->priv->untitled_number);
- }
-
- g_free (doc->priv->uri);
- g_free (doc->priv->content_type);
- g_free (doc->priv->search_text);
-
- if (doc->priv->to_search_region != NULL)
- {
- /* we can't delete marks if we're finalizing the buffer */
- gedit_text_region_destroy (doc->priv->to_search_region, FALSE);
- }
-
- G_OBJECT_CLASS (gedit_document_parent_class)->finalize (object);
-}
-
-static void
-gedit_document_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- GeditDocument *doc = GEDIT_DOCUMENT (object);
-
- switch (prop_id)
- {
- case PROP_URI:
- g_value_set_string (value, doc->priv->uri);
- break;
- case PROP_SHORTNAME:
- g_value_take_string (value, gedit_document_get_short_name_for_display (doc));
- break;
- case PROP_CONTENT_TYPE:
- g_value_take_string (value, gedit_document_get_content_type (doc));
- break;
- case PROP_MIME_TYPE:
- g_value_take_string (value, gedit_document_get_mime_type (doc));
- break;
- case PROP_READ_ONLY:
- g_value_set_boolean (value, doc->priv->readonly);
- break;
- case PROP_ENCODING:
- g_value_set_boxed (value, doc->priv->encoding);
- break;
- case PROP_CAN_SEARCH_AGAIN:
- g_value_set_boolean (value, gedit_document_get_can_search_again (doc));
- break;
- case PROP_ENABLE_SEARCH_HIGHLIGHTING:
- g_value_set_boolean (value, gedit_document_get_enable_search_highlighting (doc));
- break;
- case PROP_NEWLINE_TYPE:
- g_value_set_enum (value, doc->priv->newline_type);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gedit_document_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- GeditDocument *doc = GEDIT_DOCUMENT (object);
-
- switch (prop_id)
- {
- case PROP_ENABLE_SEARCH_HIGHLIGHTING:
- gedit_document_set_enable_search_highlighting (doc,
- g_value_get_boolean (value));
- break;
- case PROP_NEWLINE_TYPE:
- gedit_document_set_newline_type (doc,
- g_value_get_enum (value));
- break;
- case PROP_SHORTNAME:
- gedit_document_set_short_name_for_display (doc,
- g_value_get_string (value));
- break;
- case PROP_CONTENT_TYPE:
- gedit_document_set_content_type (doc,
- g_value_get_string (value));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-emit_cursor_moved (GeditDocument *doc)
-{
- if (!doc->priv->stop_cursor_moved_emission)
- {
- g_signal_emit (doc,
- document_signals[CURSOR_MOVED],
- 0);
- }
-}
-
-static void
-gedit_document_mark_set (GtkTextBuffer *buffer,
- const GtkTextIter *iter,
- GtkTextMark *mark)
-{
- GeditDocument *doc = GEDIT_DOCUMENT (buffer);
-
- if (GTK_TEXT_BUFFER_CLASS (gedit_document_parent_class)->mark_set)
- GTK_TEXT_BUFFER_CLASS (gedit_document_parent_class)->mark_set (buffer,
- iter,
- mark);
-
- if (mark == gtk_text_buffer_get_insert (buffer))
- {
- emit_cursor_moved (doc);
- }
-}
-
-static void
-gedit_document_changed (GtkTextBuffer *buffer)
-{
- emit_cursor_moved (GEDIT_DOCUMENT (buffer));
-
- GTK_TEXT_BUFFER_CLASS (gedit_document_parent_class)->changed (buffer);
-}
-
-static void
-gedit_document_class_init (GeditDocumentClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- GtkTextBufferClass *buf_class = GTK_TEXT_BUFFER_CLASS (klass);
-
- object_class->dispose = gedit_document_dispose;
- object_class->finalize = gedit_document_finalize;
- object_class->get_property = gedit_document_get_property;
- object_class->set_property = gedit_document_set_property;
-
- buf_class->mark_set = gedit_document_mark_set;
- buf_class->changed = gedit_document_changed;
-
- klass->load = gedit_document_load_real;
- klass->save = gedit_document_save_real;
-
- g_object_class_install_property (object_class, PROP_URI,
- g_param_spec_string ("uri",
- "URI",
- "The document's URI",
- NULL,
- G_PARAM_READABLE |
- G_PARAM_STATIC_STRINGS));
-
- g_object_class_install_property (object_class, PROP_SHORTNAME,
- g_param_spec_string ("shortname",
- "Short Name",
- "The document's short name",
- NULL,
- G_PARAM_READWRITE |
- G_PARAM_STATIC_STRINGS));
-
- g_object_class_install_property (object_class, PROP_CONTENT_TYPE,
- g_param_spec_string ("content-type",
- "Content Type",
- "The document's Content Type",
- NULL,
- G_PARAM_READWRITE |
- G_PARAM_STATIC_STRINGS));
-
- g_object_class_install_property (object_class, PROP_MIME_TYPE,
- g_param_spec_string ("mime-type",
- "MIME Type",
- "The document's MIME Type",
- "text/plain",
- G_PARAM_READABLE |
- G_PARAM_STATIC_STRINGS));
-
- g_object_class_install_property (object_class, PROP_READ_ONLY,
- g_param_spec_boolean ("read-only",
- "Read Only",
- "Whether the document is read only or not",
- FALSE,
- G_PARAM_READABLE |
- G_PARAM_STATIC_STRINGS));
-
- g_object_class_install_property (object_class, PROP_ENCODING,
- g_param_spec_boxed ("encoding",
- "Encoding",
- "The GeditEncoding used for the document",
- GEDIT_TYPE_ENCODING,
- G_PARAM_READABLE |
- G_PARAM_STATIC_STRINGS));
-
- g_object_class_install_property (object_class, PROP_CAN_SEARCH_AGAIN,
- g_param_spec_boolean ("can-search-again",
- "Can search again",
- "Wheter it's possible to search again in the document",
- FALSE,
- G_PARAM_READABLE |
- G_PARAM_STATIC_STRINGS));
-
- g_object_class_install_property (object_class, PROP_ENABLE_SEARCH_HIGHLIGHTING,
- g_param_spec_boolean ("enable-search-highlighting",
- "Enable Search Highlighting",
- "Whether all the occurences of the searched string must be highlighted",
- FALSE,
- G_PARAM_READWRITE |
- G_PARAM_STATIC_STRINGS));
-
- /**
- * GeditDocument:newline-type:
- *
- * The :newline-type property determines what is considered
- * as a line ending when saving the document
- */
- g_object_class_install_property (object_class, PROP_NEWLINE_TYPE,
- g_param_spec_enum ("newline-type",
- "Newline type",
- "The accepted types of line ending",
- GEDIT_TYPE_DOCUMENT_NEWLINE_TYPE,
- GEDIT_DOCUMENT_NEWLINE_TYPE_LF,
- G_PARAM_READWRITE |
- G_PARAM_STATIC_NAME |
- G_PARAM_STATIC_BLURB));
-
- /* This signal is used to update the cursor position is the statusbar,
- * it's emitted either when the insert mark is moved explicitely or
- * when the buffer changes (insert/delete).
- * We prevent the emission of the signal during replace_all to
- * improve performance.
- */
- document_signals[CURSOR_MOVED] =
- g_signal_new ("cursor-moved",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GeditDocumentClass, cursor_moved),
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE,
- 0);
-
- /**
- * GeditDocument::load:
- * @document: the #GeditDocument.
- * @uri: the uri where to load the document from.
- * @encoding: the #GeditEncoding to encode the document.
- * @line_pos: the line to show.
- * @create: whether the document should be created if it doesn't exist.
- *
- * The "load" signal is emitted when a document is loaded.
- *
- * Since: 2.22
- */
- document_signals[LOAD] =
- g_signal_new ("load",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GeditDocumentClass, load),
- NULL, NULL,
- gedit_marshal_VOID__STRING_BOXED_INT_BOOLEAN,
- G_TYPE_NONE,
- 4,
- G_TYPE_STRING,
- /* we rely on the fact that the GeditEncoding pointer stays
- * the same forever */
- GEDIT_TYPE_ENCODING | G_SIGNAL_TYPE_STATIC_SCOPE,
- G_TYPE_INT,
- G_TYPE_BOOLEAN);
-
-
- document_signals[LOADING] =
- g_signal_new ("loading",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GeditDocumentClass, loading),
- NULL, NULL,
- gedit_marshal_VOID__UINT64_UINT64,
- G_TYPE_NONE,
- 2,
- G_TYPE_UINT64,
- G_TYPE_UINT64);
-
- document_signals[LOADED] =
- g_signal_new ("loaded",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GeditDocumentClass, loaded),
- NULL, NULL,
- g_cclosure_marshal_VOID__POINTER,
- G_TYPE_NONE,
- 1,
- G_TYPE_POINTER);
-
- /**
- * GeditDocument::save:
- * @document: the #GeditDocument.
- * @uri: the uri where the document is about to be saved.
- * @encoding: the #GeditEncoding used to save the document.
- * @flags: the #GeditDocumentSaveFlags for the save operation.
- *
- * The "save" signal is emitted when the document is saved.
- *
- * Since: 2.20
- */
- document_signals[SAVE] =
- g_signal_new ("save",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GeditDocumentClass, save),
- NULL, NULL,
- gedit_marshal_VOID__STRING_BOXED_FLAGS,
- G_TYPE_NONE,
- 3,
- G_TYPE_STRING,
- /* we rely on the fact that the GeditEncoding pointer stays
- * the same forever */
- GEDIT_TYPE_ENCODING | G_SIGNAL_TYPE_STATIC_SCOPE,
- GEDIT_TYPE_DOCUMENT_SAVE_FLAGS);
-
- document_signals[SAVING] =
- g_signal_new ("saving",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GeditDocumentClass, saving),
- NULL, NULL,
- gedit_marshal_VOID__UINT64_UINT64,
- G_TYPE_NONE,
- 2,
- G_TYPE_UINT64,
- G_TYPE_UINT64);
-
- document_signals[SAVED] =
- g_signal_new ("saved",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GeditDocumentClass, saved),
- NULL, NULL,
- g_cclosure_marshal_VOID__POINTER,
- G_TYPE_NONE,
- 1,
- G_TYPE_POINTER);
-
- document_signals[SEARCH_HIGHLIGHT_UPDATED] =
- g_signal_new ("search_highlight_updated",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GeditDocumentClass, search_highlight_updated),
- NULL, NULL,
- gedit_marshal_VOID__BOXED_BOXED,
- G_TYPE_NONE,
- 2,
- GTK_TYPE_TEXT_ITER | G_SIGNAL_TYPE_STATIC_SCOPE,
- GTK_TYPE_TEXT_ITER | G_SIGNAL_TYPE_STATIC_SCOPE);
-
- g_type_class_add_private (object_class, sizeof(GeditDocumentPrivate));
-}
-
-static void
-set_language (GeditDocument *doc,
- GtkSourceLanguage *lang,
- gboolean set_by_user)
-{
- GtkSourceLanguage *old_lang;
-
- gedit_debug (DEBUG_DOCUMENT);
-
- old_lang = gtk_source_buffer_get_language (GTK_SOURCE_BUFFER (doc));
-
- if (old_lang == lang)
- return;
-
- gtk_source_buffer_set_language (GTK_SOURCE_BUFFER (doc), lang);
-
- if (lang != NULL)
- gtk_source_buffer_set_highlight_syntax (GTK_SOURCE_BUFFER (doc),
- gedit_prefs_manager_get_enable_syntax_highlighting ());
- else
- gtk_source_buffer_set_highlight_syntax (GTK_SOURCE_BUFFER (doc),
- FALSE);
-
- if (set_by_user && (doc->priv->uri != NULL))
- {
- gedit_document_set_metadata (doc, GEDIT_METADATA_ATTRIBUTE_LANGUAGE,
- (lang == NULL) ? "_NORMAL_" : gtk_source_language_get_id (lang),
- NULL);
- }
-
- doc->priv->language_set_by_user = set_by_user;
-}
-
-static void
-set_encoding (GeditDocument *doc,
- const GeditEncoding *encoding,
- gboolean set_by_user)
-{
- g_return_if_fail (encoding != NULL);
-
- gedit_debug (DEBUG_DOCUMENT);
-
- if (doc->priv->encoding == encoding)
- return;
-
- doc->priv->encoding = encoding;
-
- if (set_by_user)
- {
- const gchar *charset;
-
- charset = gedit_encoding_get_charset (encoding);
-
- gedit_document_set_metadata (doc, GEDIT_METADATA_ATTRIBUTE_ENCODING,
- charset, NULL);
- }
-
- g_object_notify (G_OBJECT (doc), "encoding");
-}
-
-static GtkSourceStyleScheme *
-get_default_style_scheme (void)
-{
- gchar *scheme_id;
- GtkSourceStyleScheme *def_style;
- GtkSourceStyleSchemeManager *manager;
-
- manager = gedit_get_style_scheme_manager ();
- scheme_id = gedit_prefs_manager_get_source_style_scheme ();
- def_style = gtk_source_style_scheme_manager_get_scheme (manager,
- scheme_id);
-
- if (def_style == NULL)
- {
- g_warning ("Default style scheme '%s' cannot be found, falling back to 'classic' style scheme ", scheme_id);
-
- def_style = gtk_source_style_scheme_manager_get_scheme (manager, "classic");
- if (def_style == NULL)
- {
- g_warning ("Style scheme 'classic' cannot be found, check your GtkSourceView installation.");
- }
- }
-
- g_free (scheme_id);
-
- return def_style;
-}
-
-static void
-on_uri_changed (GeditDocument *doc,
- GParamSpec *pspec,
- gpointer useless)
-{
-#ifdef ENABLE_GVFS_METADATA
- GFile *location;
-
- location = gedit_document_get_location (doc);
-
- /* load metadata for this uri: we load sync since metadata is
- * always local so it should be fast and we need the information
- * right after the uri was set.
- */
- if (location != NULL)
- {
- GError *error = NULL;
-
- if (doc->priv->metadata_info != NULL)
- g_object_unref (doc->priv->metadata_info);
-
- doc->priv->metadata_info = g_file_query_info (location,
- METADATA_QUERY,
- G_FILE_QUERY_INFO_NONE,
- NULL,
- &error);
-
- if (error != NULL)
- {
- if (error->code != G_FILE_ERROR_ISDIR &&
- error->code != G_FILE_ERROR_NOTDIR &&
- error->code != G_FILE_ERROR_NOENT)
- {
- g_warning ("%s", error->message);
- }
-
- g_error_free (error);
- }
-
- g_object_unref (location);
- }
-#endif
-}
-
-static GtkSourceLanguage *
-guess_language (GeditDocument *doc,
- const gchar *content_type)
-{
- gchar *data;
- GtkSourceLanguage *language = NULL;
-
- data = gedit_document_get_metadata (doc, GEDIT_METADATA_ATTRIBUTE_LANGUAGE);
-
- if (data != NULL)
- {
- gedit_debug_message (DEBUG_DOCUMENT, "Language from metadata: %s", data);
-
- if (strcmp (data, "_NORMAL_") != 0)
- {
- language = gtk_source_language_manager_get_language (
- gedit_get_language_manager (),
- data);
- }
-
- g_free (data);
- }
- else
- {
- GFile *file;
- gchar *basename = NULL;
-
- file = gedit_document_get_location (doc);
- gedit_debug_message (DEBUG_DOCUMENT, "Sniffing Language");
-
- if (file)
- {
- basename = g_file_get_basename (file);
- }
- else if (doc->priv->short_name != NULL)
- {
- basename = g_strdup (doc->priv->short_name);
- }
-
- language = gtk_source_language_manager_guess_language (
- gedit_get_language_manager (),
- basename,
- content_type);
-
- g_free (basename);
-
- if (file != NULL)
- {
- g_object_unref (file);
- }
- }
-
- return language;
-}
-
-static void
-on_content_type_changed (GeditDocument *doc,
- GParamSpec *pspec,
- gpointer useless)
-{
- if (!doc->priv->language_set_by_user)
- {
- GtkSourceLanguage *language;
-
- language = guess_language (doc, doc->priv->content_type);
-
- gedit_debug_message (DEBUG_DOCUMENT, "Language: %s",
- language != NULL ? gtk_source_language_get_name (language) : "None");
-
- set_language (doc, language, FALSE);
- }
-}
-
-static gchar *
-get_default_content_type (void)
-{
- return g_content_type_from_mime_type ("text/plain");
-}
-
-static void
-gedit_document_init (GeditDocument *doc)
-{
- GtkSourceStyleScheme *style_scheme;
-
- gedit_debug (DEBUG_DOCUMENT);
-
- doc->priv = GEDIT_DOCUMENT_GET_PRIVATE (doc);
-
- doc->priv->uri = NULL;
- doc->priv->untitled_number = get_untitled_number ();
-
- doc->priv->metadata_info = NULL;
-
- doc->priv->content_type = get_default_content_type ();
-
- doc->priv->readonly = FALSE;
-
- doc->priv->stop_cursor_moved_emission = FALSE;
-
- doc->priv->last_save_was_manually = TRUE;
- doc->priv->language_set_by_user = FALSE;
-
- doc->priv->dispose_has_run = FALSE;
-
- doc->priv->mtime.tv_sec = 0;
- doc->priv->mtime.tv_usec = 0;
-
- g_get_current_time (&doc->priv->time_of_last_save_or_load);
-
- doc->priv->encoding = gedit_encoding_get_utf8 ();
-
- doc->priv->newline_type = GEDIT_DOCUMENT_NEWLINE_TYPE_DEFAULT;
-
- gtk_source_buffer_set_max_undo_levels (GTK_SOURCE_BUFFER (doc),
- gedit_prefs_manager_get_undo_actions_limit ());
-
- gtk_source_buffer_set_highlight_matching_brackets (GTK_SOURCE_BUFFER (doc),
- gedit_prefs_manager_get_bracket_matching ());
-
- gedit_document_set_enable_search_highlighting (doc,
- gedit_prefs_manager_get_enable_search_highlighting ());
-
- style_scheme = get_default_style_scheme ();
- if (style_scheme != NULL)
- gtk_source_buffer_set_style_scheme (GTK_SOURCE_BUFFER (doc),
- style_scheme);
-
- g_signal_connect_after (doc,
- "insert-text",
- G_CALLBACK (insert_text_cb),
- NULL);
-
- g_signal_connect_after (doc,
- "delete-range",
- G_CALLBACK (delete_range_cb),
- NULL);
-
- g_signal_connect (doc,
- "notify::content-type",
- G_CALLBACK (on_content_type_changed),
- NULL);
-
- g_signal_connect (doc,
- "notify::uri",
- G_CALLBACK (on_uri_changed),
- NULL);
-}
-
-GeditDocument *
-gedit_document_new (void)
-{
- gedit_debug (DEBUG_DOCUMENT);
-
- return GEDIT_DOCUMENT (g_object_new (GEDIT_TYPE_DOCUMENT, NULL));
-}
-
-static void
-set_content_type_no_guess (GeditDocument *doc,
- const gchar *content_type)
-{
- gedit_debug (DEBUG_DOCUMENT);
-
- if (doc->priv->content_type != NULL && content_type != NULL &&
- (0 == strcmp (doc->priv->content_type, content_type)))
- return;
-
- g_free (doc->priv->content_type);
-
- if (content_type == NULL || g_content_type_is_unknown (content_type))
- doc->priv->content_type = get_default_content_type ();
- else
- doc->priv->content_type = g_strdup (content_type);
-
- g_object_notify (G_OBJECT (doc), "content-type");
-}
-
-static void
-set_content_type (GeditDocument *doc,
- const gchar *content_type)
-{
- gedit_debug (DEBUG_DOCUMENT);
-
- if (content_type == NULL)
- {
- GFile *file;
- gchar *guessed_type = NULL;
-
- /* If content type is null, we guess from the filename */
- file = gedit_document_get_location (doc);
- if (file != NULL)
- {
- gchar *basename;
-
- basename = g_file_get_basename (file);
- guessed_type = g_content_type_guess (basename, NULL, 0, NULL);
-
- g_free (basename);
- g_object_unref (file);
- }
-
- set_content_type_no_guess (doc, guessed_type);
-
- g_free (guessed_type);
- }
- else
- {
- set_content_type_no_guess (doc, content_type);
- }
-}
-
-void
-gedit_document_set_content_type (GeditDocument *doc,
- const gchar *content_type)
-{
- g_return_if_fail (GEDIT_IS_DOCUMENT (doc));
-
- set_content_type (doc, content_type);
-}
-
-static void
-set_uri (GeditDocument *doc,
- const gchar *uri)
-{
- gedit_debug (DEBUG_DOCUMENT);
-
- g_return_if_fail ((uri == NULL) || gedit_utils_is_valid_uri (uri));
-
- if (uri != NULL)
- {
- if (doc->priv->uri == uri)
- return;
-
- g_free (doc->priv->uri);
- doc->priv->uri = g_strdup (uri);
-
- if (doc->priv->untitled_number > 0)
- {
- release_untitled_number (doc->priv->untitled_number);
- doc->priv->untitled_number = 0;
- }
- }
-
- g_object_notify (G_OBJECT (doc), "uri");
-
- if (doc->priv->short_name == NULL)
- {
- g_object_notify (G_OBJECT (doc), "shortname");
- }
-}
-
-GFile *
-gedit_document_get_location (GeditDocument *doc)
-{
- g_return_val_if_fail (GEDIT_IS_DOCUMENT (doc), NULL);
-
- return doc->priv->uri == NULL ? NULL : g_file_new_for_uri (doc->priv->uri);
-}
-
-gchar *
-gedit_document_get_uri (GeditDocument *doc)
-{
- g_return_val_if_fail (GEDIT_IS_DOCUMENT (doc), NULL);
-
- return g_strdup (doc->priv->uri);
-}
-
-void
-gedit_document_set_uri (GeditDocument *doc,
- const gchar *uri)
-{
- g_return_if_fail (GEDIT_IS_DOCUMENT (doc));
- g_return_if_fail (uri != NULL);
-
- set_uri (doc, uri);
- set_content_type (doc, NULL);
-}
-
-/* Never returns NULL */
-gchar *
-gedit_document_get_uri_for_display (GeditDocument *doc)
-{
- g_return_val_if_fail (GEDIT_IS_DOCUMENT (doc), g_strdup (""));
-
- if (doc->priv->uri == NULL)
- return g_strdup_printf (_("Unsaved Document %d"),
- doc->priv->untitled_number);
- else
- return gedit_utils_uri_for_display (doc->priv->uri);
-}
-
-/* Never returns NULL */
-gchar *
-gedit_document_get_short_name_for_display (GeditDocument *doc)
-{
- g_return_val_if_fail (GEDIT_IS_DOCUMENT (doc), g_strdup (""));
-
- if (doc->priv->short_name != NULL)
- return g_strdup (doc->priv->short_name);
- else if (doc->priv->uri == NULL)
- return g_strdup_printf (_("Unsaved Document %d"),
- doc->priv->untitled_number);
- else
- return gedit_utils_basename_for_display (doc->priv->uri);
-}
-
-void
-gedit_document_set_short_name_for_display (GeditDocument *doc,
- const gchar *short_name)
-{
- g_return_if_fail (GEDIT_IS_DOCUMENT (doc));
-
- g_free (doc->priv->short_name);
- doc->priv->short_name = g_strdup (short_name);
-
- g_object_notify (G_OBJECT (doc), "shortname");
-}
-
-gchar *
-gedit_document_get_content_type (GeditDocument *doc)
-{
- g_return_val_if_fail (GEDIT_IS_DOCUMENT (doc), NULL);
-
- return g_strdup (doc->priv->content_type);
-}
-
-/* Never returns NULL */
-gchar *
-gedit_document_get_mime_type (GeditDocument *doc)
-{
- gchar *mime_type = NULL;
-
- g_return_val_if_fail (GEDIT_IS_DOCUMENT (doc), g_strdup ("text/plain"));
-
- if ((doc->priv->content_type != NULL) &&
- (!g_content_type_is_unknown (doc->priv->content_type)))
- {
- mime_type = g_content_type_get_mime_type (doc->priv->content_type);
- }
-
- return mime_type != NULL ? mime_type : g_strdup ("text/plain");
-}
-
-/* Note: do not emit the notify::read-only signal */
-static gboolean
-set_readonly (GeditDocument *doc,
- gboolean readonly)
-{
- gedit_debug (DEBUG_DOCUMENT);
-
- readonly = (readonly != FALSE);
-
- if (doc->priv->readonly == readonly)
- return FALSE;
-
- doc->priv->readonly = readonly;
-
- return TRUE;
-}
-
-/**
- * gedit_document_set_readonly:
- * @doc: a #GeditDocument
- * @readonly: %TRUE to se the document as read-only
- *
- * If @readonly is %TRUE sets @doc as read-only.
- */
-void
-_gedit_document_set_readonly (GeditDocument *doc,
- gboolean readonly)
-{
- gedit_debug (DEBUG_DOCUMENT);
-
- g_return_if_fail (GEDIT_IS_DOCUMENT (doc));
-
- if (set_readonly (doc, readonly))
- {
- g_object_notify (G_OBJECT (doc), "read-only");
- }
-}
-
-gboolean
-gedit_document_get_readonly (GeditDocument *doc)
-{
- g_return_val_if_fail (GEDIT_IS_DOCUMENT (doc), TRUE);
-
- return doc->priv->readonly;
-}
-
-gboolean
-_gedit_document_check_externally_modified (GeditDocument *doc)
-{
- GFile *gfile;
- GFileInfo *info;
-
- g_return_val_if_fail (GEDIT_IS_DOCUMENT (doc), FALSE);
-
- if (doc->priv->uri == NULL)
- {
- return FALSE;
- }
-
- gfile = g_file_new_for_uri (doc->priv->uri);
- info = g_file_query_info (gfile,
- G_FILE_ATTRIBUTE_TIME_MODIFIED "," \
- G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE,
- G_FILE_QUERY_INFO_NONE,
- NULL, NULL);
- g_object_unref (gfile);
-
- if (info != NULL)
- {
- /* While at it also check if permissions changed */
- if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE))
- {
- gboolean read_only;
-
- read_only = !g_file_info_get_attribute_boolean (info,
- G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE);
-
- _gedit_document_set_readonly (doc, read_only);
- }
-
- if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_TIME_MODIFIED))
- {
- GTimeVal timeval;
-
- g_file_info_get_modification_time (info, &timeval);
- g_object_unref (info);
-
- return (timeval.tv_sec > doc->priv->mtime.tv_sec) ||
- (timeval.tv_sec == doc->priv->mtime.tv_sec &&
- timeval.tv_usec > doc->priv->mtime.tv_usec);
- }
- }
-
- return FALSE;
-}
-
-static void
-reset_temp_loading_data (GeditDocument *doc)
-{
- /* the loader has been used, throw it away */
- g_object_unref (doc->priv->loader);
- doc->priv->loader = NULL;
-
- doc->priv->requested_encoding = NULL;
- doc->priv->requested_line_pos = 0;
-}
-
-static void
-document_loader_loaded (GeditDocumentLoader *loader,
- const GError *error,
- GeditDocument *doc)
-{
- /* load was successful */
- if (error == NULL ||
- (error->domain == GEDIT_DOCUMENT_ERROR &&
- error->code == GEDIT_DOCUMENT_ERROR_CONVERSION_FALLBACK))
- {
- GtkTextIter iter;
- GFileInfo *info;
- const gchar *content_type = NULL;
- gboolean read_only = FALSE;
- GTimeVal mtime = {0, 0};
-
- info = gedit_document_loader_get_info (loader);
-
- if (info)
- {
- if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE))
- content_type = g_file_info_get_attribute_string (info,
- G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE);
-
- if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_TIME_MODIFIED))
- g_file_info_get_modification_time (info, &mtime);
-
- if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE))
- read_only = !g_file_info_get_attribute_boolean (info,
- G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE);
- }
-
- doc->priv->mtime = mtime;
-
- set_readonly (doc, read_only);
-
- g_get_current_time (&doc->priv->time_of_last_save_or_load);
-
- set_encoding (doc,
- gedit_document_loader_get_encoding (loader),
- (doc->priv->requested_encoding != NULL));
-
- set_content_type (doc, content_type);
-
- gedit_document_set_newline_type (doc,
- gedit_document_loader_get_newline_type (loader));
-
- /* move the cursor at the requested line if any */
- if (doc->priv->requested_line_pos > 0)
- {
- /* line_pos - 1 because get_iter_at_line counts from 0 */
- gtk_text_buffer_get_iter_at_line (GTK_TEXT_BUFFER (doc),
- &iter,
- doc->priv->requested_line_pos - 1);
- }
- /* else, if enabled, to the position stored in the metadata */
- else if (gedit_prefs_manager_get_restore_cursor_position ())
- {
- gchar *pos;
- gint offset;
-
- pos = gedit_document_get_metadata (doc, GEDIT_METADATA_ATTRIBUTE_POSITION);
-
- offset = pos ? atoi (pos) : 0;
- g_free (pos);
-
- gtk_text_buffer_get_iter_at_offset (GTK_TEXT_BUFFER (doc),
- &iter,
- MAX (offset, 0));
-
- /* make sure it's a valid position, if the file
- * changed we may have ended up in the middle of
- * a utf8 character cluster */
- if (!gtk_text_iter_is_cursor_position (&iter))
- {
- gtk_text_buffer_get_start_iter (GTK_TEXT_BUFFER (doc),
- &iter);
- }
- }
- /* otherwise to the top */
- else
- {
- gtk_text_buffer_get_start_iter (GTK_TEXT_BUFFER (doc),
- &iter);
- }
-
- gtk_text_buffer_place_cursor (GTK_TEXT_BUFFER (doc), &iter);
- }
-
- /* special case creating a named new doc */
- else if (doc->priv->create &&
- (error->domain == G_IO_ERROR && error->code == G_IO_ERROR_NOT_FOUND) &&
- (gedit_utils_uri_has_file_scheme (doc->priv->uri)))
- {
- reset_temp_loading_data (doc);
-
- g_signal_emit (doc,
- document_signals[LOADED],
- 0,
- NULL);
-
- return;
- }
-
- g_signal_emit (doc,
- document_signals[LOADED],
- 0,
- error);
-
- reset_temp_loading_data (doc);
-}
-
-static void
-document_loader_loading (GeditDocumentLoader *loader,
- gboolean completed,
- const GError *error,
- GeditDocument *doc)
-{
- if (completed)
- {
- document_loader_loaded (loader, error, doc);
- }
- else
- {
- goffset size = 0;
- goffset read;
- GFileInfo *info;
-
- info = gedit_document_loader_get_info (loader);
-
- if (info && g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_STANDARD_SIZE))
- size = g_file_info_get_attribute_uint64 (info,
- G_FILE_ATTRIBUTE_STANDARD_SIZE);
-
- read = gedit_document_loader_get_bytes_read (loader);
-
- g_signal_emit (doc,
- document_signals[LOADING],
- 0,
- read,
- size);
- }
-}
-
-static void
-gedit_document_load_real (GeditDocument *doc,
- const gchar *uri,
- const GeditEncoding *encoding,
- gint line_pos,
- gboolean create)
-{
- g_return_if_fail (doc->priv->loader == NULL);
-
- gedit_debug_message (DEBUG_DOCUMENT, "load_real: uri = %s", uri);
-
- /* create a loader. It will be destroyed when loading is completed */
- doc->priv->loader = gedit_document_loader_new (doc, uri, encoding);
-
- g_signal_connect (doc->priv->loader,
- "loading",
- G_CALLBACK (document_loader_loading),
- doc);
-
- doc->priv->create = create;
- doc->priv->requested_encoding = encoding;
- doc->priv->requested_line_pos = line_pos;
-
- set_uri (doc, uri);
- set_content_type (doc, NULL);
-
- gedit_document_loader_load (doc->priv->loader);
-}
-
-/**
- * gedit_document_load:
- * @doc: the #GeditDocument.
- * @uri: the uri where to load the document from.
- * @encoding: the #GeditEncoding to encode the document.
- * @line_pos: the line to show.
- * @create: whether the document should be created if it doesn't exist.
- *
- * Load a document. This results in the "load" signal to be emitted.
- */
-void
-gedit_document_load (GeditDocument *doc,
- const gchar *uri,
- const GeditEncoding *encoding,
- gint line_pos,
- gboolean create)
-{
- g_return_if_fail (GEDIT_IS_DOCUMENT (doc));
- g_return_if_fail (uri != NULL);
- g_return_if_fail (gedit_utils_is_valid_uri (uri));
-
- g_signal_emit (doc, document_signals[LOAD], 0, uri, encoding, line_pos, create);
-}
-
-/**
- * gedit_document_load_cancel:
- * @doc: the #GeditDocument.
- *
- * Cancel load of a document.
- */
-gboolean
-gedit_document_load_cancel (GeditDocument *doc)
-{
- g_return_val_if_fail (GEDIT_IS_DOCUMENT (doc), FALSE);
-
- if (doc->priv->loader == NULL)
- return FALSE;
-
- return gedit_document_loader_cancel (doc->priv->loader);
-}
-
-static void
-document_saver_saving (GeditDocumentSaver *saver,
- gboolean completed,
- const GError *error,
- GeditDocument *doc)
-{
- gedit_debug (DEBUG_DOCUMENT);
-
- if (completed)
- {
- /* save was successful */
- if (error == NULL)
- {
- const gchar *uri;
- const gchar *content_type = NULL;
- GTimeVal mtime = {0, 0};
- GFileInfo *info;
-
- uri = gedit_document_saver_get_uri (saver);
- set_uri (doc, uri);
-
- info = gedit_document_saver_get_info (saver);
-
- if (info != NULL)
- {
- if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE))
- content_type = g_file_info_get_attribute_string (info,
- G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE);
-
- if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_TIME_MODIFIED))
- g_file_info_get_modification_time (info, &mtime);
- }
-
- set_content_type (doc, content_type);
- doc->priv->mtime = mtime;
-
- g_get_current_time (&doc->priv->time_of_last_save_or_load);
-
- _gedit_document_set_readonly (doc, FALSE);
-
- gtk_text_buffer_set_modified (GTK_TEXT_BUFFER (doc),
- FALSE);
-
- set_encoding (doc,
- doc->priv->requested_encoding,
- TRUE);
- }
-
- g_signal_emit (doc,
- document_signals[SAVED],
- 0,
- error);
-
- /* the saver has been used, throw it away */
- g_object_unref (doc->priv->saver);
- doc->priv->saver = NULL;
- }
- else
- {
- goffset size = 0;
- goffset written = 0;
-
- size = gedit_document_saver_get_file_size (saver);
- written = gedit_document_saver_get_bytes_written (saver);
-
- gedit_debug_message (DEBUG_DOCUMENT, "save progress: %" G_GINT64_FORMAT " of %" G_GINT64_FORMAT, written, size);
-
- g_signal_emit (doc,
- document_signals[SAVING],
- 0,
- written,
- size);
- }
-}
-
-static void
-gedit_document_save_real (GeditDocument *doc,
- const gchar *uri,
- const GeditEncoding *encoding,
- GeditDocumentSaveFlags flags)
-{
- g_return_if_fail (doc->priv->saver == NULL);
-
- /* create a saver, it will be destroyed once saving is complete */
- doc->priv->saver = gedit_document_saver_new (doc, uri, encoding,
- doc->priv->newline_type,
- flags);
-
- g_signal_connect (doc->priv->saver,
- "saving",
- G_CALLBACK (document_saver_saving),
- doc);
-
- doc->priv->requested_encoding = encoding;
-
- gedit_document_saver_save (doc->priv->saver,
- &doc->priv->mtime);
-}
-
-/**
- * gedit_document_save:
- * @doc: the #GeditDocument.
- * @flags: optionnal #GeditDocumentSaveFlags.
- *
- * Save the document to its previous location. This results in the "save"
- * signal to be emitted.
- */
-void
-gedit_document_save (GeditDocument *doc,
- GeditDocumentSaveFlags flags)
-{
- g_return_if_fail (GEDIT_IS_DOCUMENT (doc));
- g_return_if_fail (doc->priv->uri != NULL);
-
- g_signal_emit (doc,
- document_signals[SAVE],
- 0,
- doc->priv->uri,
- doc->priv->encoding,
- flags);
-}
-
-/**
- * gedit_document_save_as:
- * @doc: the #GeditDocument.
- * @uri: the uri where to save the document.
- * @encoding: the #GeditEncoding to encode the document.
- * @flags: optionnal #GeditDocumentSaveFlags.
- *
- * Save the document to a new location. This results in the "save" signal
- * to be emitted.
- */
-void
-gedit_document_save_as (GeditDocument *doc,
- const gchar *uri,
- const GeditEncoding *encoding,
- GeditDocumentSaveFlags flags)
-{
- g_return_if_fail (GEDIT_IS_DOCUMENT (doc));
- g_return_if_fail (uri != NULL);
- g_return_if_fail (encoding != NULL);
-
- /* priv->mtime refers to the the old uri (if any). Thus, it should be
- * ignored when saving as. */
- g_signal_emit (doc,
- document_signals[SAVE],
- 0,
- uri,
- encoding,
- flags | GEDIT_DOCUMENT_SAVE_IGNORE_MTIME);
-}
-
-gboolean
-gedit_document_insert_file (GeditDocument *doc,
- GtkTextIter *iter,
- const gchar *uri,
- const GeditEncoding *encoding)
-{
- g_return_val_if_fail (GEDIT_IS_DOCUMENT (doc), FALSE);
- g_return_val_if_fail (iter != NULL, FALSE);
- g_return_val_if_fail (gtk_text_iter_get_buffer (iter) ==
- GTK_TEXT_BUFFER (doc), FALSE);
-
- /* TODO */
-
- return FALSE;
-}
-
-gboolean
-gedit_document_is_untouched (GeditDocument *doc)
-{
- g_return_val_if_fail (GEDIT_IS_DOCUMENT (doc), TRUE);
-
- return (doc->priv->uri == NULL) &&
- (!gtk_text_buffer_get_modified (GTK_TEXT_BUFFER (doc)));
-}
-
-gboolean
-gedit_document_is_untitled (GeditDocument *doc)
-{
- g_return_val_if_fail (GEDIT_IS_DOCUMENT (doc), TRUE);
-
- return (doc->priv->uri == NULL);
-}
-
-gboolean
-gedit_document_is_local (GeditDocument *doc)
-{
- g_return_val_if_fail (GEDIT_IS_DOCUMENT (doc), FALSE);
-
- if (doc->priv->uri == NULL)
- {
- return FALSE;
- }
-
- return gedit_utils_uri_has_file_scheme (doc->priv->uri);
-}
-
-gboolean
-gedit_document_get_deleted (GeditDocument *doc)
-{
- g_return_val_if_fail (GEDIT_IS_DOCUMENT (doc), FALSE);
-
- return doc->priv->uri && !gedit_utils_uri_exists (doc->priv->uri);
-}
-
-/*
- * If @line is bigger than the lines of the document, the cursor is moved
- * to the last line and FALSE is returned.
- */
-gboolean
-gedit_document_goto_line (GeditDocument *doc,
- gint line)
-{
- gboolean ret = TRUE;
- guint line_count;
- GtkTextIter iter;
-
- gedit_debug (DEBUG_DOCUMENT);
-
- g_return_val_if_fail (GEDIT_IS_DOCUMENT (doc), FALSE);
- g_return_val_if_fail (line >= -1, FALSE);
-
- line_count = gtk_text_buffer_get_line_count (GTK_TEXT_BUFFER (doc));
-
- if (line >= line_count)
- {
- ret = FALSE;
- gtk_text_buffer_get_end_iter (GTK_TEXT_BUFFER (doc),
- &iter);
- }
- else
- {
- gtk_text_buffer_get_iter_at_line (GTK_TEXT_BUFFER (doc),
- &iter,
- line);
- }
-
- gtk_text_buffer_place_cursor (GTK_TEXT_BUFFER (doc), &iter);
-
- return ret;
-}
-
-gboolean
-gedit_document_goto_line_offset (GeditDocument *doc,
- gint line,
- gint line_offset)
-{
- gboolean ret = TRUE;
- guint offset_count;
- GtkTextIter iter;
-
- g_return_val_if_fail (GEDIT_IS_DOCUMENT (doc), FALSE);
- g_return_val_if_fail (line >= -1, FALSE);
- g_return_val_if_fail (line_offset >= -1, FALSE);
-
- gtk_text_buffer_get_iter_at_line (GTK_TEXT_BUFFER (doc),
- &iter,
- line);
-
- offset_count = gtk_text_iter_get_chars_in_line (&iter);
- if (line_offset > offset_count)
- {
- ret = FALSE;
- }
- else
- {
- gtk_text_iter_set_line_offset (&iter, line_offset);
- }
-
- gtk_text_buffer_place_cursor (GTK_TEXT_BUFFER (doc), &iter);
-
- return ret;
-}
-
-static gint
-compute_num_of_lines (const gchar *text)
-{
- const gchar *p;
- gint len;
- gint n = 1;
-
- g_return_val_if_fail (text != NULL, 0);
-
- len = strlen (text);
- p = text;
-
- while (len > 0)
- {
- gint del, par;
-
- pango_find_paragraph_boundary (p, len, &del, &par);
-
- if (del == par) /* not found */
- break;
-
- p += par;
- len -= par;
- ++n;
- }
-
- return n;
-}
-
-void
-gedit_document_set_search_text (GeditDocument *doc,
- const gchar *text,
- guint flags)
-{
- gchar *converted_text;
- gboolean notify = FALSE;
- gboolean update_to_search_region = FALSE;
-
- g_return_if_fail (GEDIT_IS_DOCUMENT (doc));
- g_return_if_fail ((text == NULL) || (doc->priv->search_text != text));
- g_return_if_fail ((text == NULL) || g_utf8_validate (text, -1, NULL));
-
- gedit_debug_message (DEBUG_DOCUMENT, "text = %s", text);
-
- if (text != NULL)
- {
- if (*text != '\0')
- {
- converted_text = gedit_utils_unescape_search_text (text);
- notify = !gedit_document_get_can_search_again (doc);
- }
- else
- {
- converted_text = g_strdup("");
- notify = gedit_document_get_can_search_again (doc);
- }
-
- g_free (doc->priv->search_text);
-
- doc->priv->search_text = converted_text;
- doc->priv->num_of_lines_search_text = compute_num_of_lines (doc->priv->search_text);
- update_to_search_region = TRUE;
- }
-
- if (!GEDIT_SEARCH_IS_DONT_SET_FLAGS (flags))
- {
- if (doc->priv->search_flags != flags)
- update_to_search_region = TRUE;
-
- doc->priv->search_flags = flags;
-
- }
-
- if (update_to_search_region)
- {
- GtkTextIter begin;
- GtkTextIter end;
-
- gtk_text_buffer_get_bounds (GTK_TEXT_BUFFER (doc),
- &begin,
- &end);
-
- to_search_region_range (doc,
- &begin,
- &end);
- }
-
- if (notify)
- g_object_notify (G_OBJECT (doc), "can-search-again");
-}
-
-gchar *
-gedit_document_get_search_text (GeditDocument *doc,
- guint *flags)
-{
- g_return_val_if_fail (GEDIT_IS_DOCUMENT (doc), NULL);
-
- if (flags != NULL)
- *flags = doc->priv->search_flags;
-
- return gedit_utils_escape_search_text (doc->priv->search_text);
-}
-
-gboolean
-gedit_document_get_can_search_again (GeditDocument *doc)
-{
- g_return_val_if_fail (GEDIT_IS_DOCUMENT (doc), FALSE);
-
- return ((doc->priv->search_text != NULL) &&
- (*doc->priv->search_text != '\0'));
-}
-
-gboolean
-gedit_document_search_forward (GeditDocument *doc,
- const GtkTextIter *start,
- const GtkTextIter *end,
- GtkTextIter *match_start,
- GtkTextIter *match_end)
-{
- GtkTextIter iter;
- GtkSourceSearchFlags search_flags;
- gboolean found = FALSE;
- GtkTextIter m_start;
- GtkTextIter m_end;
-
- g_return_val_if_fail (GEDIT_IS_DOCUMENT (doc), FALSE);
- g_return_val_if_fail ((start == NULL) ||
- (gtk_text_iter_get_buffer (start) == GTK_TEXT_BUFFER (doc)), FALSE);
- g_return_val_if_fail ((end == NULL) ||
- (gtk_text_iter_get_buffer (end) == GTK_TEXT_BUFFER (doc)), FALSE);
-
- if (doc->priv->search_text == NULL)
- {
- gedit_debug_message (DEBUG_DOCUMENT, "doc->priv->search_text == NULL\n");
- return FALSE;
- }
- else
- gedit_debug_message (DEBUG_DOCUMENT, "doc->priv->search_text == \"%s\"\n", doc->priv->search_text);
-
- if (start == NULL)
- gtk_text_buffer_get_start_iter (GTK_TEXT_BUFFER (doc), &iter);
- else
- iter = *start;
-
- search_flags = GTK_SOURCE_SEARCH_VISIBLE_ONLY | GTK_SOURCE_SEARCH_TEXT_ONLY;
-
- if (!GEDIT_SEARCH_IS_CASE_SENSITIVE (doc->priv->search_flags))
- {
- search_flags = search_flags | GTK_SOURCE_SEARCH_CASE_INSENSITIVE;
- }
-
- while (!found)
- {
- found = gtk_source_iter_forward_search (&iter,
- doc->priv->search_text,
- search_flags,
- &m_start,
- &m_end,
- end);
-
- if (found && GEDIT_SEARCH_IS_ENTIRE_WORD (doc->priv->search_flags))
- {
- found = gtk_text_iter_starts_word (&m_start) &&
- gtk_text_iter_ends_word (&m_end);
-
- if (!found)
- iter = m_end;
- }
- else
- break;
- }
-
- if (found && (match_start != NULL))
- *match_start = m_start;
-
- if (found && (match_end != NULL))
- *match_end = m_end;
-
- return found;
-}
-
-gboolean
-gedit_document_search_backward (GeditDocument *doc,
- const GtkTextIter *start,
- const GtkTextIter *end,
- GtkTextIter *match_start,
- GtkTextIter *match_end)
-{
- GtkTextIter iter;
- GtkSourceSearchFlags search_flags;
- gboolean found = FALSE;
- GtkTextIter m_start;
- GtkTextIter m_end;
-
- g_return_val_if_fail (GEDIT_IS_DOCUMENT (doc), FALSE);
- g_return_val_if_fail ((start == NULL) ||
- (gtk_text_iter_get_buffer (start) == GTK_TEXT_BUFFER (doc)), FALSE);
- g_return_val_if_fail ((end == NULL) ||
- (gtk_text_iter_get_buffer (end) == GTK_TEXT_BUFFER (doc)), FALSE);
-
- if (doc->priv->search_text == NULL)
- {
- gedit_debug_message (DEBUG_DOCUMENT, "doc->priv->search_text == NULL\n");
- return FALSE;
- }
- else
- gedit_debug_message (DEBUG_DOCUMENT, "doc->priv->search_text == \"%s\"\n", doc->priv->search_text);
-
- if (end == NULL)
- gtk_text_buffer_get_end_iter (GTK_TEXT_BUFFER (doc), &iter);
- else
- iter = *end;
-
- search_flags = GTK_SOURCE_SEARCH_VISIBLE_ONLY | GTK_SOURCE_SEARCH_TEXT_ONLY;
-
- if (!GEDIT_SEARCH_IS_CASE_SENSITIVE (doc->priv->search_flags))
- {
- search_flags = search_flags | GTK_SOURCE_SEARCH_CASE_INSENSITIVE;
- }
-
- while (!found)
- {
- found = gtk_source_iter_backward_search (&iter,
- doc->priv->search_text,
- search_flags,
- &m_start,
- &m_end,
- start);
-
- if (found && GEDIT_SEARCH_IS_ENTIRE_WORD (doc->priv->search_flags))
- {
- found = gtk_text_iter_starts_word (&m_start) &&
- gtk_text_iter_ends_word (&m_end);
-
- if (!found)
- iter = m_start;
- }
- else
- break;
- }
-
- if (found && (match_start != NULL))
- *match_start = m_start;
-
- if (found && (match_end != NULL))
- *match_end = m_end;
-
- return found;
-}
-
-gint
-gedit_document_replace_all (GeditDocument *doc,
- const gchar *find,
- const gchar *replace,
- guint flags)
-{
- GtkTextIter iter;
- GtkTextIter m_start;
- GtkTextIter m_end;
- GtkSourceSearchFlags search_flags = 0;
- gboolean found = TRUE;
- gint cont = 0;
- gchar *search_text;
- gchar *replace_text;
- gint replace_text_len;
- GtkTextBuffer *buffer;
- gboolean brackets_highlighting;
- gboolean search_highliting;
-
- g_return_val_if_fail (GEDIT_IS_DOCUMENT (doc), 0);
- g_return_val_if_fail (replace != NULL, 0);
- g_return_val_if_fail ((find != NULL) || (doc->priv->search_text != NULL), 0);
-
- buffer = GTK_TEXT_BUFFER (doc);
-
- if (find == NULL)
- search_text = g_strdup (doc->priv->search_text);
- else
- search_text = gedit_utils_unescape_search_text (find);
-
- replace_text = gedit_utils_unescape_search_text (replace);
-
- gtk_text_buffer_get_start_iter (buffer, &iter);
-
- search_flags = GTK_SOURCE_SEARCH_VISIBLE_ONLY | GTK_SOURCE_SEARCH_TEXT_ONLY;
-
- if (!GEDIT_SEARCH_IS_CASE_SENSITIVE (flags))
- {
- search_flags = search_flags | GTK_SOURCE_SEARCH_CASE_INSENSITIVE;
- }
-
- replace_text_len = strlen (replace_text);
-
- /* disable cursor_moved emission until the end of the
- * replace_all so that we don't spend all the time
- * updating the position in the statusbar
- */
- doc->priv->stop_cursor_moved_emission = TRUE;
-
- /* also avoid spending time matching brackets */
- brackets_highlighting = gtk_source_buffer_get_highlight_matching_brackets (GTK_SOURCE_BUFFER (buffer));
- gtk_source_buffer_set_highlight_matching_brackets (GTK_SOURCE_BUFFER (buffer), FALSE);
-
- /* and do search highliting later */
- search_highliting = gedit_document_get_enable_search_highlighting (doc);
- gedit_document_set_enable_search_highlighting (doc, FALSE);
-
- gtk_text_buffer_begin_user_action (buffer);
-
- do
- {
- found = gtk_source_iter_forward_search (&iter,
- search_text,
- search_flags,
- &m_start,
- &m_end,
- NULL);
-
- if (found && GEDIT_SEARCH_IS_ENTIRE_WORD (flags))
- {
- gboolean word;
-
- word = gtk_text_iter_starts_word (&m_start) &&
- gtk_text_iter_ends_word (&m_end);
-
- if (!word)
- {
- iter = m_end;
- continue;
- }
- }
-
- if (found)
- {
- ++cont;
-
- gtk_text_buffer_delete (buffer,
- &m_start,
- &m_end);
- gtk_text_buffer_insert (buffer,
- &m_start,
- replace_text,
- replace_text_len);
-
- iter = m_start;
- }
-
- } while (found);
-
- gtk_text_buffer_end_user_action (buffer);
-
- /* re-enable cursor_moved emission and notify
- * the current position
- */
- doc->priv->stop_cursor_moved_emission = FALSE;
- emit_cursor_moved (doc);
-
- gtk_source_buffer_set_highlight_matching_brackets (GTK_SOURCE_BUFFER (buffer),
- brackets_highlighting);
- gedit_document_set_enable_search_highlighting (doc, search_highliting);
-
- g_free (search_text);
- g_free (replace_text);
-
- return cont;
-}
-
-void
-gedit_document_set_language (GeditDocument *doc,
- GtkSourceLanguage *lang)
-{
- g_return_if_fail (GEDIT_IS_DOCUMENT (doc));
-
- set_language (doc, lang, TRUE);
-}
-
-GtkSourceLanguage *
-gedit_document_get_language (GeditDocument *doc)
-{
- g_return_val_if_fail (GEDIT_IS_DOCUMENT (doc), NULL);
-
- return gtk_source_buffer_get_language (GTK_SOURCE_BUFFER (doc));
-}
-
-const GeditEncoding *
-gedit_document_get_encoding (GeditDocument *doc)
-{
- g_return_val_if_fail (GEDIT_IS_DOCUMENT (doc), NULL);
-
- return doc->priv->encoding;
-}
-
-glong
-_gedit_document_get_seconds_since_last_save_or_load (GeditDocument *doc)
-{
- GTimeVal current_time;
-
- gedit_debug (DEBUG_DOCUMENT);
-
- g_return_val_if_fail (GEDIT_IS_DOCUMENT (doc), -1);
-
- g_get_current_time (&current_time);
-
- return (current_time.tv_sec - doc->priv->time_of_last_save_or_load.tv_sec);
-}
-
-static void
-get_search_match_colors (GeditDocument *doc,
- gboolean *foreground_set,
- GdkColor *foreground,
- gboolean *background_set,
- GdkColor *background)
-{
- GtkSourceStyleScheme *style_scheme;
- GtkSourceStyle *style;
- gchar *bg;
- gchar *fg;
-
- style_scheme = gtk_source_buffer_get_style_scheme (GTK_SOURCE_BUFFER (doc));
- if (style_scheme == NULL)
- goto fallback;
-
- style = gtk_source_style_scheme_get_style (style_scheme,
- "search-match");
- if (style == NULL)
- goto fallback;
-
- g_object_get (style,
- "foreground-set", foreground_set,
- "foreground", &fg,
- "background-set", background_set,
- "background", &bg,
- NULL);
-
- if (*foreground_set)
- {
- if (fg == NULL ||
- !gdk_color_parse (fg, foreground))
- {
- *foreground_set = FALSE;
- }
- }
-
- if (*background_set)
- {
- if (bg == NULL ||
- !gdk_color_parse (bg, background))
- {
- *background_set = FALSE;
- }
- }
-
- g_free (fg);
- g_free (bg);
-
- return;
-
- fallback:
- gedit_debug_message (DEBUG_DOCUMENT,
- "Falling back to hard-coded colors "
- "for the \"found\" text tag.");
-
- gdk_color_parse ("#FFFF78", background);
- *background_set = TRUE;
- *foreground_set = FALSE;
-
- return;
-}
-
-static void
-sync_found_tag (GeditDocument *doc,
- GParamSpec *pspec,
- gpointer data)
-{
- GdkColor fg;
- GdkColor bg;
- gboolean fg_set;
- gboolean bg_set;
-
- gedit_debug (DEBUG_DOCUMENT);
-
- g_return_if_fail (GTK_TEXT_TAG (doc->priv->found_tag));
-
- get_search_match_colors (doc,
- &fg_set, &fg,
- &bg_set, &bg);
-
- g_object_set (doc->priv->found_tag,
- "foreground-gdk", fg_set ? &fg : NULL,
- NULL);
- g_object_set (doc->priv->found_tag,
- "background-gdk", bg_set ? &bg : NULL,
- NULL);
-}
-
-static void
-text_tag_set_highest_priority (GtkTextTag *tag,
- GtkTextBuffer *buffer)
-{
- GtkTextTagTable *table;
- gint n;
-
- table = gtk_text_buffer_get_tag_table (buffer);
- n = gtk_text_tag_table_get_size (table);
- gtk_text_tag_set_priority (tag, n - 1);
-}
-
-static void
-search_region (GeditDocument *doc,
- GtkTextIter *start,
- GtkTextIter *end)
-{
- GtkTextIter iter;
- GtkTextIter m_start;
- GtkTextIter m_end;
- GtkSourceSearchFlags search_flags = 0;
- gboolean found = TRUE;
-
- GtkTextBuffer *buffer;
-
- gedit_debug (DEBUG_DOCUMENT);
-
- buffer = GTK_TEXT_BUFFER (doc);
-
- if (doc->priv->found_tag == NULL)
- {
- doc->priv->found_tag = gtk_text_buffer_create_tag (GTK_TEXT_BUFFER (doc),
- "found",
- NULL);
-
- sync_found_tag (doc, NULL, NULL);
-
- g_signal_connect (doc,
- "notify::style-scheme",
- G_CALLBACK (sync_found_tag),
- NULL);
- }
-
- /* make sure the 'found' tag has the priority over
- * syntax highlighting tags */
- text_tag_set_highest_priority (doc->priv->found_tag,
- GTK_TEXT_BUFFER (doc));
-
-
- if (doc->priv->search_text == NULL)
- return;
-
- g_return_if_fail (doc->priv->num_of_lines_search_text > 0);
-
- gtk_text_iter_backward_lines (start, doc->priv->num_of_lines_search_text);
- gtk_text_iter_forward_lines (end, doc->priv->num_of_lines_search_text);
-
- if (gtk_text_iter_has_tag (start, doc->priv->found_tag) &&
- !gtk_text_iter_begins_tag (start, doc->priv->found_tag))
- gtk_text_iter_backward_to_tag_toggle (start, doc->priv->found_tag);
-
- if (gtk_text_iter_has_tag (end, doc->priv->found_tag) &&
- !gtk_text_iter_ends_tag (end, doc->priv->found_tag))
- gtk_text_iter_forward_to_tag_toggle (end, doc->priv->found_tag);
-
- /*
- g_print ("[%u (%u), %u (%u)]\n", gtk_text_iter_get_line (start), gtk_text_iter_get_offset (start),
- gtk_text_iter_get_line (end), gtk_text_iter_get_offset (end));
- */
-
- gtk_text_buffer_remove_tag (buffer,
- doc->priv->found_tag,
- start,
- end);
-
- if (*doc->priv->search_text == '\0')
- return;
-
- iter = *start;
-
- search_flags = GTK_SOURCE_SEARCH_VISIBLE_ONLY | GTK_SOURCE_SEARCH_TEXT_ONLY;
-
- if (!GEDIT_SEARCH_IS_CASE_SENSITIVE (doc->priv->search_flags))
- {
- search_flags = search_flags | GTK_SOURCE_SEARCH_CASE_INSENSITIVE;
- }
-
- do
- {
- if ((end != NULL) && gtk_text_iter_is_end (end))
- end = NULL;
-
- found = gtk_source_iter_forward_search (&iter,
- doc->priv->search_text,
- search_flags,
- &m_start,
- &m_end,
- end);
-
- iter = m_end;
-
- if (found && GEDIT_SEARCH_IS_ENTIRE_WORD (doc->priv->search_flags))
- {
- gboolean word;
-
- word = gtk_text_iter_starts_word (&m_start) &&
- gtk_text_iter_ends_word (&m_end);
-
- if (!word)
- continue;
- }
-
- if (found)
- {
- gtk_text_buffer_apply_tag (buffer,
- doc->priv->found_tag,
- &m_start,
- &m_end);
- }
-
- } while (found);
-}
-
-static void
-to_search_region_range (GeditDocument *doc,
- GtkTextIter *start,
- GtkTextIter *end)
-{
- gedit_debug (DEBUG_DOCUMENT);
-
- if (doc->priv->to_search_region == NULL)
- return;
-
- gtk_text_iter_set_line_offset (start, 0);
- gtk_text_iter_forward_to_line_end (end);
-
- /*
- g_print ("+ [%u (%u), %u (%u)]\n", gtk_text_iter_get_line (start), gtk_text_iter_get_offset (start),
- gtk_text_iter_get_line (end), gtk_text_iter_get_offset (end));
- */
-
- /* Add the region to the refresh region */
- gedit_text_region_add (doc->priv->to_search_region, start, end);
-
- /* Notify views of the updated highlight region */
- gtk_text_iter_backward_lines (start, doc->priv->num_of_lines_search_text);
- gtk_text_iter_forward_lines (end, doc->priv->num_of_lines_search_text);
-
- g_signal_emit (doc, document_signals [SEARCH_HIGHLIGHT_UPDATED], 0, start, end);
-}
-
-void
-_gedit_document_search_region (GeditDocument *doc,
- const GtkTextIter *start,
- const GtkTextIter *end)
-{
- GeditTextRegion *region;
-
- gedit_debug (DEBUG_DOCUMENT);
-
- g_return_if_fail (GEDIT_IS_DOCUMENT (doc));
- g_return_if_fail (start != NULL);
- g_return_if_fail (end != NULL);
-
- if (doc->priv->to_search_region == NULL)
- return;
-
- /*
- g_print ("U [%u (%u), %u (%u)]\n", gtk_text_iter_get_line (start), gtk_text_iter_get_offset (start),
- gtk_text_iter_get_line (end), gtk_text_iter_get_offset (end));
- */
-
- /* get the subregions not yet highlighted */
- region = gedit_text_region_intersect (doc->priv->to_search_region,
- start,
- end);
- if (region)
- {
- gint i;
- GtkTextIter start_search;
- GtkTextIter end_search;
-
- i = gedit_text_region_subregions (region);
- gedit_text_region_nth_subregion (region,
- 0,
- &start_search,
- NULL);
-
- gedit_text_region_nth_subregion (region,
- i - 1,
- NULL,
- &end_search);
-
- gedit_text_region_destroy (region, TRUE);
-
- gtk_text_iter_order (&start_search, &end_search);
-
- search_region (doc, &start_search, &end_search);
-
- /* remove the just highlighted region */
- gedit_text_region_subtract (doc->priv->to_search_region,
- start,
- end);
- }
-}
-
-static void
-insert_text_cb (GeditDocument *doc,
- GtkTextIter *pos,
- const gchar *text,
- gint length)
-{
- GtkTextIter start;
- GtkTextIter end;
-
- gedit_debug (DEBUG_DOCUMENT);
-
- start = end = *pos;
-
- /*
- * pos is invalidated when
- * insertion occurs (because the buffer contents change), but the
- * default signal handler revalidates it to point to the end of the
- * inserted text
- */
- gtk_text_iter_backward_chars (&start,
- g_utf8_strlen (text, length));
-
- to_search_region_range (doc, &start, &end);
-}
-
-static void
-delete_range_cb (GeditDocument *doc,
- GtkTextIter *start,
- GtkTextIter *end)
-{
- GtkTextIter d_start;
- GtkTextIter d_end;
-
- gedit_debug (DEBUG_DOCUMENT);
-
- d_start = *start;
- d_end = *end;
-
- to_search_region_range (doc, &d_start, &d_end);
-}
-
-void
-gedit_document_set_enable_search_highlighting (GeditDocument *doc,
- gboolean enable)
-{
- g_return_if_fail (GEDIT_IS_DOCUMENT (doc));
-
- enable = enable != FALSE;
-
- if ((doc->priv->to_search_region != NULL) == enable)
- return;
-
- if (doc->priv->to_search_region != NULL)
- {
- /* Disable search highlighting */
- if (doc->priv->found_tag != NULL)
- {
- /* If needed remove the found_tag */
- GtkTextIter begin;
- GtkTextIter end;
-
- gtk_text_buffer_get_bounds (GTK_TEXT_BUFFER (doc),
- &begin,
- &end);
-
- gtk_text_buffer_remove_tag (GTK_TEXT_BUFFER (doc),
- doc->priv->found_tag,
- &begin,
- &end);
- }
-
- gedit_text_region_destroy (doc->priv->to_search_region,
- TRUE);
- doc->priv->to_search_region = NULL;
- }
- else
- {
- doc->priv->to_search_region = gedit_text_region_new (GTK_TEXT_BUFFER (doc));
- if (gedit_document_get_can_search_again (doc))
- {
- /* If search_text is not empty, highligth all its occurrences */
- GtkTextIter begin;
- GtkTextIter end;
-
- gtk_text_buffer_get_bounds (GTK_TEXT_BUFFER (doc),
- &begin,
- &end);
-
- to_search_region_range (doc,
- &begin,
- &end);
- }
- }
-}
-
-gboolean
-gedit_document_get_enable_search_highlighting (GeditDocument *doc)
-{
- g_return_val_if_fail (GEDIT_IS_DOCUMENT (doc), FALSE);
-
- return (doc->priv->to_search_region != NULL);
-}
-
-void
-gedit_document_set_newline_type (GeditDocument *doc,
- GeditDocumentNewlineType newline_type)
-{
- g_return_if_fail (GEDIT_IS_DOCUMENT (doc));
-
- if (doc->priv->newline_type != newline_type)
- {
- doc->priv->newline_type = newline_type;
-
- g_object_notify (G_OBJECT (doc), "newline-type");
- }
-}
-
-GeditDocumentNewlineType
-gedit_document_get_newline_type (GeditDocument *doc)
-{
- g_return_val_if_fail (GEDIT_IS_DOCUMENT (doc), 0);
-
- return doc->priv->newline_type;
-}
-
-void
-_gedit_document_set_mount_operation_factory (GeditDocument *doc,
- GeditMountOperationFactory callback,
- gpointer userdata)
-{
- g_return_if_fail (GEDIT_IS_DOCUMENT (doc));
-
- doc->priv->mount_operation_factory = callback;
- doc->priv->mount_operation_userdata = userdata;
-}
-
-GMountOperation *
-_gedit_document_create_mount_operation (GeditDocument *doc)
-{
- g_return_val_if_fail (GEDIT_IS_DOCUMENT (doc), NULL);
-
- if (doc->priv->mount_operation_factory == NULL)
- return g_mount_operation_new ();
- else
- return doc->priv->mount_operation_factory (doc,
- doc->priv->mount_operation_userdata);
-}
-
-#ifndef ENABLE_GVFS_METADATA
-gchar *
-gedit_document_get_metadata (GeditDocument *doc,
- const gchar *key)
-{
- gchar *value = NULL;
-
- g_return_val_if_fail (GEDIT_IS_DOCUMENT (doc), NULL);
- g_return_val_if_fail (key != NULL, NULL);
-
- if (!gedit_document_is_untitled (doc))
- {
- value = gedit_metadata_manager_get (doc->priv->uri, key);
- }
-
- return value;
-}
-
-void
-gedit_document_set_metadata (GeditDocument *doc,
- const gchar *first_key,
- ...)
-{
- const gchar *key;
- const gchar *value;
- va_list var_args;
-
- g_return_if_fail (GEDIT_IS_DOCUMENT (doc));
- g_return_if_fail (first_key != NULL);
-
- if (gedit_document_is_untitled (doc))
- {
- /* Can't set metadata for untitled documents */
- return;
- }
-
- va_start (var_args, first_key);
-
- for (key = first_key; key; key = va_arg (var_args, const gchar *))
- {
- value = va_arg (var_args, const gchar *);
-
- gedit_metadata_manager_set (doc->priv->uri,
- key,
- value);
- }
-
- va_end (var_args);
-}
-
-#else
-
-/**
- * gedit_document_get_metadata:
- * @doc: a #GeditDocument
- * @key: name of the key
- *
- * Gets the metadata assigned to @key.
- *
- * Returns: the value assigned to @key.
- */
-gchar *
-gedit_document_get_metadata (GeditDocument *doc,
- const gchar *key)
-{
- gchar *value = NULL;
-
- g_return_val_if_fail (GEDIT_IS_DOCUMENT (doc), NULL);
- g_return_val_if_fail (key != NULL, NULL);
-
- if (doc->priv->metadata_info && g_file_info_has_attribute (doc->priv->metadata_info,
- key))
- {
- value = g_strdup (g_file_info_get_attribute_string (doc->priv->metadata_info,
- key));
- }
-
- return value;
-}
-
-static void
-set_attributes_cb (GObject *source,
- GAsyncResult *res,
- gpointer useless)
-{
- g_file_set_attributes_finish (G_FILE (source),
- res,
- NULL,
- NULL);
-}
-
-/**
- * gedit_document_set_metadata:
- * @doc: a #GeditDocument
- * @first_key: name of the first key to set
- * @...: value for the first key, followed optionally by more key/value pairs,
- * followed by %NULL.
- *
- * Sets metadata on a document.
- */
-void
-gedit_document_set_metadata (GeditDocument *doc,
- const gchar *first_key,
- ...)
-{
- const gchar *key;
- const gchar *value;
- va_list var_args;
- GFileInfo *info;
- GFile *location;
-
- g_return_if_fail (GEDIT_IS_DOCUMENT (doc));
- g_return_if_fail (first_key != NULL);
-
- info = g_file_info_new ();
-
- va_start (var_args, first_key);
-
- for (key = first_key; key; key = va_arg (var_args, const gchar *))
- {
- value = va_arg (var_args, const gchar *);
-
- if (value != NULL)
- {
- g_file_info_set_attribute_string (info,
- key, value);
- }
- else
- {
- /* Unset the key */
- g_file_info_set_attribute (info, key,
- G_FILE_ATTRIBUTE_TYPE_INVALID,
- NULL);
- }
- }
-
- va_end (var_args);
-
- if (doc->priv->metadata_info != NULL)
- g_file_info_copy_into (info, doc->priv->metadata_info);
-
- location = gedit_document_get_location (doc);
-
- if (location != NULL)
- {
- g_file_set_attributes_async (location,
- info,
- G_FILE_QUERY_INFO_NONE,
- G_PRIORITY_DEFAULT,
- NULL,
- set_attributes_cb,
- NULL);
-
- g_object_unref (location);
- }
-
- g_object_unref (info);
-}
-#endif
diff --git a/gedit/gedit-document.h b/gedit/gedit-document.h
deleted file mode 100755
index cf966b15..00000000
--- a/gedit/gedit-document.h
+++ /dev/null
@@ -1,338 +0,0 @@
-/*
- * gedit-document.h
- * This file is part of gedit
- *
- * Copyright (C) 1998, 1999 Alex Roberts, Evan Lawrence
- * Copyright (C) 2000, 2001 Chema Celorio, Paolo Maggi
- * Copyright (C) 2002-2005 Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 1998-2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifndef __GEDIT_DOCUMENT_H__
-#define __GEDIT_DOCUMENT_H__
-
-#include <gio/gio.h>
-#include <gtk/gtk.h>
-#include <gtksourceview/gtksourcebuffer.h>
-
-#include <gedit/gedit-encodings.h>
-
-G_BEGIN_DECLS
-
-/*
- * Type checking and casting macros
- */
-#define GEDIT_TYPE_DOCUMENT (gedit_document_get_type())
-#define GEDIT_DOCUMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GEDIT_TYPE_DOCUMENT, GeditDocument))
-#define GEDIT_DOCUMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GEDIT_TYPE_DOCUMENT, GeditDocumentClass))
-#define GEDIT_IS_DOCUMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GEDIT_TYPE_DOCUMENT))
-#define GEDIT_IS_DOCUMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEDIT_TYPE_DOCUMENT))
-#define GEDIT_DOCUMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GEDIT_TYPE_DOCUMENT, GeditDocumentClass))
-
-#ifdef G_OS_WIN32
-#define GEDIT_METADATA_ATTRIBUTE_POSITION "position"
-#define GEDIT_METADATA_ATTRIBUTE_ENCODING "encoding"
-#define GEDIT_METADATA_ATTRIBUTE_LANGUAGE "language"
-#else
-#define GEDIT_METADATA_ATTRIBUTE_POSITION "metadata::gedit-position"
-#define GEDIT_METADATA_ATTRIBUTE_ENCODING "metadata::gedit-encoding"
-#define GEDIT_METADATA_ATTRIBUTE_LANGUAGE "metadata::gedit-language"
-#endif
-
-typedef enum
-{
- GEDIT_DOCUMENT_NEWLINE_TYPE_LF,
- GEDIT_DOCUMENT_NEWLINE_TYPE_CR,
- GEDIT_DOCUMENT_NEWLINE_TYPE_CR_LF
-} GeditDocumentNewlineType;
-
-#ifdef G_OS_WIN32
-#define GEDIT_DOCUMENT_NEWLINE_TYPE_DEFAULT GEDIT_DOCUMENT_NEWLINE_TYPE_CR_LF
-#else
-#define GEDIT_DOCUMENT_NEWLINE_TYPE_DEFAULT GEDIT_DOCUMENT_NEWLINE_TYPE_LF
-#endif
-
-typedef enum
-{
- GEDIT_SEARCH_DONT_SET_FLAGS = 1 << 0,
- GEDIT_SEARCH_ENTIRE_WORD = 1 << 1,
- GEDIT_SEARCH_CASE_SENSITIVE = 1 << 2
-
-} GeditSearchFlags;
-
-/**
- * GeditDocumentSaveFlags:
- * @GEDIT_DOCUMENT_SAVE_IGNORE_MTIME: save file despite external modifications.
- * @GEDIT_DOCUMENT_SAVE_IGNORE_BACKUP: write the file directly without attempting to backup.
- * @GEDIT_DOCUMENT_SAVE_PRESERVE_BACKUP: preserve previous backup file, needed to support autosaving.
- */
-typedef enum
-{
- GEDIT_DOCUMENT_SAVE_IGNORE_MTIME = 1 << 0,
- GEDIT_DOCUMENT_SAVE_IGNORE_BACKUP = 1 << 1,
- GEDIT_DOCUMENT_SAVE_PRESERVE_BACKUP = 1 << 2
-} GeditDocumentSaveFlags;
-
-/* Private structure type */
-typedef struct _GeditDocumentPrivate GeditDocumentPrivate;
-
-/*
- * Main object structure
- */
-typedef struct _GeditDocument GeditDocument;
-
-struct _GeditDocument
-{
- GtkSourceBuffer buffer;
-
- /*< private > */
- GeditDocumentPrivate *priv;
-};
-
-/*
- * Class definition
- */
-typedef struct _GeditDocumentClass GeditDocumentClass;
-
-struct _GeditDocumentClass
-{
- GtkSourceBufferClass parent_class;
-
- /* Signals */ // CHECK: ancora da rivedere
-
- void (* cursor_moved) (GeditDocument *document);
-
- /* Document load */
- void (* load) (GeditDocument *document,
- const gchar *uri,
- const GeditEncoding *encoding,
- gint line_pos,
- gboolean create);
-
- void (* loading) (GeditDocument *document,
- goffset size,
- goffset total_size);
-
- void (* loaded) (GeditDocument *document,
- const GError *error);
-
- /* Document save */
- void (* save) (GeditDocument *document,
- const gchar *uri,
- const GeditEncoding *encoding,
- GeditDocumentSaveFlags flags);
-
- void (* saving) (GeditDocument *document,
- goffset size,
- goffset total_size);
-
- void (* saved) (GeditDocument *document,
- const GError *error);
-
- void (* search_highlight_updated)
- (GeditDocument *document,
- GtkTextIter *start,
- GtkTextIter *end);
-};
-
-
-#define GEDIT_DOCUMENT_ERROR gedit_document_error_quark ()
-
-enum
-{
- GEDIT_DOCUMENT_ERROR_EXTERNALLY_MODIFIED,
- GEDIT_DOCUMENT_ERROR_CANT_CREATE_BACKUP,
- GEDIT_DOCUMENT_ERROR_TOO_BIG,
- GEDIT_DOCUMENT_ERROR_ENCODING_AUTO_DETECTION_FAILED,
- GEDIT_DOCUMENT_ERROR_CONVERSION_FALLBACK,
- GEDIT_DOCUMENT_NUM_ERRORS
-};
-
-GQuark gedit_document_error_quark (void);
-
-GType gedit_document_get_type (void) G_GNUC_CONST;
-
-GeditDocument *gedit_document_new (void);
-
-GFile *gedit_document_get_location (GeditDocument *doc);
-
-gchar *gedit_document_get_uri (GeditDocument *doc);
-void gedit_document_set_uri (GeditDocument *doc,
- const gchar *uri);
-
-gchar *gedit_document_get_uri_for_display
- (GeditDocument *doc);
-gchar *gedit_document_get_short_name_for_display
- (GeditDocument *doc);
-
-void gedit_document_set_short_name_for_display
- (GeditDocument *doc,
- const gchar *name);
-
-gchar *gedit_document_get_content_type
- (GeditDocument *doc);
-
-void gedit_document_set_content_type
- (GeditDocument *doc,
- const gchar *content_type);
-
-gchar *gedit_document_get_mime_type (GeditDocument *doc);
-
-gboolean gedit_document_get_readonly (GeditDocument *doc);
-
-void gedit_document_load (GeditDocument *doc,
- const gchar *uri,
- const GeditEncoding *encoding,
- gint line_pos,
- gboolean create);
-
-gboolean gedit_document_insert_file (GeditDocument *doc,
- GtkTextIter *iter,
- const gchar *uri,
- const GeditEncoding *encoding);
-
-gboolean gedit_document_load_cancel (GeditDocument *doc);
-
-void gedit_document_save (GeditDocument *doc,
- GeditDocumentSaveFlags flags);
-
-void gedit_document_save_as (GeditDocument *doc,
- const gchar *uri,
- const GeditEncoding *encoding,
- GeditDocumentSaveFlags flags);
-
-gboolean gedit_document_is_untouched (GeditDocument *doc);
-gboolean gedit_document_is_untitled (GeditDocument *doc);
-
-gboolean gedit_document_is_local (GeditDocument *doc);
-
-gboolean gedit_document_get_deleted (GeditDocument *doc);
-
-gboolean gedit_document_goto_line (GeditDocument *doc,
- gint line);
-
-gboolean gedit_document_goto_line_offset(GeditDocument *doc,
- gint line,
- gint line_offset);
-
-void gedit_document_set_search_text (GeditDocument *doc,
- const gchar *text,
- guint flags);
-
-gchar *gedit_document_get_search_text (GeditDocument *doc,
- guint *flags);
-
-gboolean gedit_document_get_can_search_again
- (GeditDocument *doc);
-
-gboolean gedit_document_search_forward (GeditDocument *doc,
- const GtkTextIter *start,
- const GtkTextIter *end,
- GtkTextIter *match_start,
- GtkTextIter *match_end);
-
-gboolean gedit_document_search_backward (GeditDocument *doc,
- const GtkTextIter *start,
- const GtkTextIter *end,
- GtkTextIter *match_start,
- GtkTextIter *match_end);
-
-gint gedit_document_replace_all (GeditDocument *doc,
- const gchar *find,
- const gchar *replace,
- guint flags);
-
-void gedit_document_set_language (GeditDocument *doc,
- GtkSourceLanguage *lang);
-GtkSourceLanguage
- *gedit_document_get_language (GeditDocument *doc);
-
-const GeditEncoding
- *gedit_document_get_encoding (GeditDocument *doc);
-
-void gedit_document_set_enable_search_highlighting
- (GeditDocument *doc,
- gboolean enable);
-
-gboolean gedit_document_get_enable_search_highlighting
- (GeditDocument *doc);
-
-void gedit_document_set_newline_type (GeditDocument *doc,
- GeditDocumentNewlineType newline_type);
-
-GeditDocumentNewlineType
- gedit_document_get_newline_type (GeditDocument *doc);
-
-gchar *gedit_document_get_metadata (GeditDocument *doc,
- const gchar *key);
-
-void gedit_document_set_metadata (GeditDocument *doc,
- const gchar *first_key,
- ...);
-
-/*
- * Non exported functions
- */
-void _gedit_document_set_readonly (GeditDocument *doc,
- gboolean readonly);
-
-glong _gedit_document_get_seconds_since_last_save_or_load
- (GeditDocument *doc);
-
-/* Note: this is a sync stat: use only on local files */
-gboolean _gedit_document_check_externally_modified
- (GeditDocument *doc);
-
-void _gedit_document_search_region (GeditDocument *doc,
- const GtkTextIter *start,
- const GtkTextIter *end);
-
-/* Search macros */
-#define GEDIT_SEARCH_IS_DONT_SET_FLAGS(sflags) ((sflags & GEDIT_SEARCH_DONT_SET_FLAGS) != 0)
-#define GEDIT_SEARCH_SET_DONT_SET_FLAGS(sflags,state) ((state == TRUE) ? \
-(sflags |= GEDIT_SEARCH_DONT_SET_FLAGS) : (sflags &= ~GEDIT_SEARCH_DONT_SET_FLAGS))
-
-#define GEDIT_SEARCH_IS_ENTIRE_WORD(sflags) ((sflags & GEDIT_SEARCH_ENTIRE_WORD) != 0)
-#define GEDIT_SEARCH_SET_ENTIRE_WORD(sflags,state) ((state == TRUE) ? \
-(sflags |= GEDIT_SEARCH_ENTIRE_WORD) : (sflags &= ~GEDIT_SEARCH_ENTIRE_WORD))
-
-#define GEDIT_SEARCH_IS_CASE_SENSITIVE(sflags) ((sflags & GEDIT_SEARCH_CASE_SENSITIVE) != 0)
-#define GEDIT_SEARCH_SET_CASE_SENSITIVE(sflags,state) ((state == TRUE) ? \
-(sflags |= GEDIT_SEARCH_CASE_SENSITIVE) : (sflags &= ~GEDIT_SEARCH_CASE_SENSITIVE))
-
-typedef GMountOperation *(*GeditMountOperationFactory)(GeditDocument *doc,
- gpointer userdata);
-
-void _gedit_document_set_mount_operation_factory
- (GeditDocument *doc,
- GeditMountOperationFactory callback,
- gpointer userdata);
-GMountOperation
- *_gedit_document_create_mount_operation
- (GeditDocument *doc);
-
-G_END_DECLS
-
-#endif /* __GEDIT_DOCUMENT_H__ */
diff --git a/gedit/gedit-documents-panel.c b/gedit/gedit-documents-panel.c
deleted file mode 100755
index 911654b2..00000000
--- a/gedit/gedit-documents-panel.c
+++ /dev/null
@@ -1,828 +0,0 @@
-/*
- * gedit-documents-panel.c
- * This file is part of gedit
- *
- * Copyright (C) 2005 - Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "gedit-documents-panel.h"
-#include "gedit-utils.h"
-#include "gedit-notebook.h"
-
-#include <glib/gi18n.h>
-
-#define GEDIT_DOCUMENTS_PANEL_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), \
- GEDIT_TYPE_DOCUMENTS_PANEL, \
- GeditDocumentsPanelPrivate))
-
-struct _GeditDocumentsPanelPrivate
-{
- GeditWindow *window;
-
- GtkWidget *treeview;
- GtkTreeModel *model;
-
- guint adding_tab : 1;
- guint is_reodering : 1;
-};
-
-G_DEFINE_TYPE(GeditDocumentsPanel, gedit_documents_panel, GTK_TYPE_VBOX)
-
-enum
-{
- PROP_0,
- PROP_WINDOW
-};
-
-enum
-{
- PIXBUF_COLUMN,
- NAME_COLUMN,
- TAB_COLUMN,
- N_COLUMNS
-};
-
-#define MAX_DOC_NAME_LENGTH 60
-
-static gchar *
-tab_get_name (GeditTab *tab)
-{
- GeditDocument *doc;
- gchar *name;
- gchar *docname;
- gchar *tab_name;
-
- g_return_val_if_fail (GEDIT_IS_TAB (tab), NULL);
-
- doc = gedit_tab_get_document (tab);
-
- name = gedit_document_get_short_name_for_display (doc);
-
- /* Truncate the name so it doesn't get insanely wide. */
- docname = gedit_utils_str_middle_truncate (name, MAX_DOC_NAME_LENGTH);
-
- if (gtk_text_buffer_get_modified (GTK_TEXT_BUFFER (doc)))
- {
- if (gedit_document_get_readonly (doc))
- {
- tab_name = g_markup_printf_escaped ("<i>%s</i> [<i>%s</i>]",
- docname,
- _("Read-Only"));
- }
- else
- {
- tab_name = g_markup_printf_escaped ("<i>%s</i>",
- docname);
- }
- }
- else
- {
- if (gedit_document_get_readonly (doc))
- {
- tab_name = g_markup_printf_escaped ("%s [<i>%s</i>]",
- docname,
- _("Read-Only"));
- }
- else
- {
- tab_name = g_markup_escape_text (docname, -1);
- }
- }
-
- g_free (docname);
- g_free (name);
-
- return tab_name;
-}
-
-static void
-get_iter_from_tab (GeditDocumentsPanel *panel, GeditTab *tab, GtkTreeIter *iter)
-{
- gint num;
- GtkWidget *nb;
- GtkTreePath *path;
-
- nb = _gedit_window_get_notebook (panel->priv->window);
- num = gtk_notebook_page_num (GTK_NOTEBOOK (nb),
- GTK_WIDGET (tab));
-
- path = gtk_tree_path_new_from_indices (num, -1);
- gtk_tree_model_get_iter (panel->priv->model,
- iter,
- path);
- gtk_tree_path_free (path);
-}
-
-static void
-window_active_tab_changed (GeditWindow *window,
- GeditTab *tab,
- GeditDocumentsPanel *panel)
-{
- g_return_if_fail (tab != NULL);
-
- if (!_gedit_window_is_removing_tabs (window))
- {
- GtkTreeIter iter;
- GtkTreeSelection *selection;
-
- get_iter_from_tab (panel, tab, &iter);
-
- if (gtk_list_store_iter_is_valid (GTK_LIST_STORE (panel->priv->model),
- &iter))
- {
- selection = gtk_tree_view_get_selection (
- GTK_TREE_VIEW (panel->priv->treeview));
-
- gtk_tree_selection_select_iter (selection, &iter);
- }
- }
-}
-
-static void
-refresh_list (GeditDocumentsPanel *panel)
-{
- /* TODO: refresh the list only if the panel is visible */
-
- GList *tabs;
- GList *l;
- GtkWidget *nb;
- GtkListStore *list_store;
- GeditTab *active_tab;
-
- /* g_debug ("refresh_list"); */
-
- list_store = GTK_LIST_STORE (panel->priv->model);
-
- gtk_list_store_clear (list_store);
-
- active_tab = gedit_window_get_active_tab (panel->priv->window);
-
- nb = _gedit_window_get_notebook (panel->priv->window);
-
- tabs = gtk_container_get_children (GTK_CONTAINER (nb));
- l = tabs;
-
- panel->priv->adding_tab = TRUE;
-
- while (l != NULL)
- {
- GdkPixbuf *pixbuf;
- gchar *name;
- GtkTreeIter iter;
-
- name = tab_get_name (GEDIT_TAB (l->data));
- pixbuf = _gedit_tab_get_icon (GEDIT_TAB (l->data));
-
- /* Add a new row to the model */
- gtk_list_store_append (list_store, &iter);
- gtk_list_store_set (list_store,
- &iter,
- PIXBUF_COLUMN, pixbuf,
- NAME_COLUMN, name,
- TAB_COLUMN, l->data,
- -1);
-
- g_free (name);
- if (pixbuf != NULL)
- g_object_unref (pixbuf);
-
- if (l->data == active_tab)
- {
- GtkTreeSelection *selection;
-
- selection = gtk_tree_view_get_selection (
- GTK_TREE_VIEW (panel->priv->treeview));
-
- gtk_tree_selection_select_iter (selection, &iter);
- }
-
- l = g_list_next (l);
- }
-
- panel->priv->adding_tab = FALSE;
-
- g_list_free (tabs);
-}
-
-static void
-sync_name_and_icon (GeditTab *tab,
- GParamSpec *pspec,
- GeditDocumentsPanel *panel)
-{
- GdkPixbuf *pixbuf;
- gchar *name;
- GtkTreeIter iter;
-
- get_iter_from_tab (panel, tab, &iter);
-
- name = tab_get_name (tab);
- pixbuf = _gedit_tab_get_icon (tab);
-
- gtk_list_store_set (GTK_LIST_STORE (panel->priv->model),
- &iter,
- PIXBUF_COLUMN, pixbuf,
- NAME_COLUMN, name,
- TAB_COLUMN, tab,
- -1);
-
- g_free (name);
- if (pixbuf != NULL)
- g_object_unref (pixbuf);
-}
-
-static void
-window_tab_removed (GeditWindow *window,
- GeditTab *tab,
- GeditDocumentsPanel *panel)
-{
- g_signal_handlers_disconnect_by_func (tab,
- G_CALLBACK (sync_name_and_icon),
- panel);
-
- if (_gedit_window_is_removing_tabs (window))
- gtk_list_store_clear (GTK_LIST_STORE (panel->priv->model));
- else
- refresh_list (panel);
-}
-
-static void
-window_tab_added (GeditWindow *window,
- GeditTab *tab,
- GeditDocumentsPanel *panel)
-{
- GtkTreeIter iter;
- GtkTreeIter sibling;
- GdkPixbuf *pixbuf;
- gchar *name;
-
- g_signal_connect (tab,
- "notify::name",
- G_CALLBACK (sync_name_and_icon),
- panel);
-
- g_signal_connect (tab,
- "notify::state",
- G_CALLBACK (sync_name_and_icon),
- panel);
-
- get_iter_from_tab (panel, tab, &sibling);
-
- panel->priv->adding_tab = TRUE;
-
- if (gtk_list_store_iter_is_valid (GTK_LIST_STORE (panel->priv->model),
- &sibling))
- {
- gtk_list_store_insert_after (GTK_LIST_STORE (panel->priv->model),
- &iter,
- &sibling);
- }
- else
- {
- GeditTab *active_tab;
-
- gtk_list_store_append (GTK_LIST_STORE (panel->priv->model),
- &iter);
-
- active_tab = gedit_window_get_active_tab (panel->priv->window);
-
- if (tab == active_tab)
- {
- GtkTreeSelection *selection;
-
- selection = gtk_tree_view_get_selection (
- GTK_TREE_VIEW (panel->priv->treeview));
-
- gtk_tree_selection_select_iter (selection, &iter);
- }
- }
-
- name = tab_get_name (tab);
- pixbuf = _gedit_tab_get_icon (tab);
-
- gtk_list_store_set (GTK_LIST_STORE (panel->priv->model),
- &iter,
- PIXBUF_COLUMN, pixbuf,
- NAME_COLUMN, name,
- TAB_COLUMN, tab,
- -1);
-
- g_free (name);
- if (pixbuf != NULL)
- g_object_unref (pixbuf);
-
- panel->priv->adding_tab = FALSE;
-}
-
-static void
-window_tabs_reordered (GeditWindow *window,
- GeditDocumentsPanel *panel)
-{
- if (panel->priv->is_reodering)
- return;
-
- refresh_list (panel);
-}
-
-static void
-set_window (GeditDocumentsPanel *panel,
- GeditWindow *window)
-{
- g_return_if_fail (panel->priv->window == NULL);
- g_return_if_fail (GEDIT_IS_WINDOW (window));
-
- panel->priv->window = g_object_ref (window);
-
- g_signal_connect (window,
- "tab_added",
- G_CALLBACK (window_tab_added),
- panel);
- g_signal_connect (window,
- "tab_removed",
- G_CALLBACK (window_tab_removed),
- panel);
- g_signal_connect (window,
- "tabs_reordered",
- G_CALLBACK (window_tabs_reordered),
- panel);
- g_signal_connect (window,
- "active_tab_changed",
- G_CALLBACK (window_active_tab_changed),
- panel);
-}
-
-static void
-treeview_cursor_changed (GtkTreeView *view,
- GeditDocumentsPanel *panel)
-{
- GtkTreeIter iter;
- GtkTreeSelection *selection;
- gpointer tab;
-
- selection = gtk_tree_view_get_selection (
- GTK_TREE_VIEW (panel->priv->treeview));
-
- if (gtk_tree_selection_get_selected (selection, NULL, &iter))
- {
- gtk_tree_model_get (panel->priv->model,
- &iter,
- TAB_COLUMN,
- &tab,
- -1);
-
- if (gedit_window_get_active_tab (panel->priv->window) != tab)
- {
- gedit_window_set_active_tab (panel->priv->window,
- GEDIT_TAB (tab));
- }
- }
-}
-
-static void
-gedit_documents_panel_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- GeditDocumentsPanel *panel = GEDIT_DOCUMENTS_PANEL (object);
-
- switch (prop_id)
- {
- case PROP_WINDOW:
- set_window (panel, g_value_get_object (value));
- break;
-
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gedit_documents_panel_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- GeditDocumentsPanel *panel = GEDIT_DOCUMENTS_PANEL (object);
-
- switch (prop_id)
- {
- case PROP_WINDOW:
- g_value_set_object (value,
- GEDIT_DOCUMENTS_PANEL_GET_PRIVATE (panel)->window);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gedit_documents_panel_finalize (GObject *object)
-{
- /* GeditDocumentsPanel *tab = GEDIT_DOCUMENTS_PANEL (object); */
-
- /* TODO: disconnect signal with window */
-
- G_OBJECT_CLASS (gedit_documents_panel_parent_class)->finalize (object);
-}
-
-static void
-gedit_documents_panel_dispose (GObject *object)
-{
- GeditDocumentsPanel *panel = GEDIT_DOCUMENTS_PANEL (object);
-
- if (panel->priv->window != NULL)
- {
- g_object_unref (panel->priv->window);
- panel->priv->window = NULL;
- }
-
- G_OBJECT_CLASS (gedit_documents_panel_parent_class)->dispose (object);
-}
-
-static void
-gedit_documents_panel_class_init (GeditDocumentsPanelClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->finalize = gedit_documents_panel_finalize;
- object_class->dispose = gedit_documents_panel_dispose;
- object_class->get_property = gedit_documents_panel_get_property;
- object_class->set_property = gedit_documents_panel_set_property;
-
- g_object_class_install_property (object_class,
- PROP_WINDOW,
- g_param_spec_object ("window",
- "Window",
- "The GeditWindow this GeditDocumentsPanel is associated with",
- GEDIT_TYPE_WINDOW,
- G_PARAM_READWRITE |
- G_PARAM_CONSTRUCT_ONLY |
- G_PARAM_STATIC_STRINGS));
-
- g_type_class_add_private (object_class, sizeof (GeditDocumentsPanelPrivate));
-}
-
-static GtkTreePath *
-get_current_path (GeditDocumentsPanel *panel)
-{
- gint num;
- GtkWidget *nb;
- GtkTreePath *path;
-
- nb = _gedit_window_get_notebook (panel->priv->window);
- num = gtk_notebook_get_current_page (GTK_NOTEBOOK (nb));
-
- path = gtk_tree_path_new_from_indices (num, -1);
-
- return path;
-}
-
-static void
-menu_position (GtkMenu *menu,
- gint *x,
- gint *y,
- gboolean *push_in,
- GeditDocumentsPanel *panel)
-{
- GtkTreePath *path;
- GdkRectangle rect;
- gint wx, wy;
- GtkRequisition requisition;
- GtkWidget *w;
-
- w = panel->priv->treeview;
-
- path = get_current_path (panel);
-
- gtk_tree_view_get_cell_area (GTK_TREE_VIEW (w),
- path,
- NULL,
- &rect);
-
- wx = rect.x;
- wy = rect.y;
-
- gdk_window_get_origin (w->window, x, y);
-
- gtk_widget_size_request (GTK_WIDGET (menu), &requisition);
-
- if (gtk_widget_get_direction (w) == GTK_TEXT_DIR_RTL)
- {
- *x += w->allocation.x + w->allocation.width - requisition.width - 10;
- }
- else
- {
- *x += w->allocation.x + 10;
- }
-
- wy = MAX (*y + 5, *y + wy + 5);
- wy = MIN (wy, *y + w->allocation.height - requisition.height - 5);
-
- *y = wy;
-
- *push_in = TRUE;
-}
-
-static gboolean
-show_popup_menu (GeditDocumentsPanel *panel,
- GdkEventButton *event)
-{
- GtkWidget *menu;
-
- menu = gtk_ui_manager_get_widget (gedit_window_get_ui_manager (panel->priv->window),
- "/NotebookPopup");
- g_return_val_if_fail (menu != NULL, FALSE);
-
- if (event != NULL)
- {
- gtk_menu_popup (GTK_MENU (menu),
- NULL,
- NULL,
- NULL,
- NULL,
- event->button,
- event->time);
- }
- else
- {
- gtk_menu_popup (GTK_MENU (menu),
- NULL,
- NULL,
- (GtkMenuPositionFunc) menu_position,
- panel,
- 0,
- gtk_get_current_event_time ());
-
- gtk_menu_shell_select_first (GTK_MENU_SHELL (menu), FALSE);
- }
-
- return TRUE;
-}
-
-static gboolean
-panel_button_press_event (GtkTreeView *treeview,
- GdkEventButton *event,
- GeditDocumentsPanel *panel)
-{
- if ((GDK_BUTTON_PRESS == event->type) && (3 == event->button))
- {
- GtkTreePath* path = NULL;
-
- if (event->window == gtk_tree_view_get_bin_window (treeview))
- {
- /* Change the cursor position */
- if (gtk_tree_view_get_path_at_pos (treeview,
- event->x,
- event->y,
- &path,
- NULL,
- NULL,
- NULL))
- {
-
- gtk_tree_view_set_cursor (treeview,
- path,
- NULL,
- FALSE);
-
- gtk_tree_path_free (path);
-
- /* A row exists at mouse position */
- return show_popup_menu (panel, event);
- }
- }
- }
-
- return FALSE;
-}
-
-static gboolean
-panel_popup_menu (GtkWidget *treeview,
- GeditDocumentsPanel *panel)
-{
- /* Only respond if the treeview is the actual focus */
- if (gtk_window_get_focus (GTK_WINDOW (panel->priv->window)) == treeview)
- {
- return show_popup_menu (panel, NULL);
- }
-
- return FALSE;
-}
-
-static gboolean
-treeview_query_tooltip (GtkWidget *widget,
- gint x,
- gint y,
- gboolean keyboard_tip,
- GtkTooltip *tooltip,
- gpointer data)
-{
- GtkTreeIter iter;
- GtkTreeView *tree_view = GTK_TREE_VIEW (widget);
- GtkTreeModel *model = gtk_tree_view_get_model (tree_view);
- GtkTreePath *path = NULL;
- gpointer *tab;
- gchar *tip;
-
- if (keyboard_tip)
- {
- gtk_tree_view_get_cursor (tree_view, &path, NULL);
-
- if (path == NULL)
- {
- return FALSE;
- }
- }
- else
- {
- gint bin_x, bin_y;
-
- gtk_tree_view_convert_widget_to_bin_window_coords (tree_view,
- x, y,
- &bin_x, &bin_y);
-
- if (!gtk_tree_view_get_path_at_pos (tree_view,
- bin_x, bin_y,
- &path,
- NULL, NULL, NULL))
- {
- return FALSE;
- }
- }
-
- gtk_tree_model_get_iter (model, &iter, path);
- gtk_tree_model_get (model,
- &iter,
- TAB_COLUMN,
- &tab,
- -1);
-
- tip = _gedit_tab_get_tooltips (GEDIT_TAB (tab));
- gtk_tooltip_set_markup (tooltip, tip);
-
- g_free (tip);
- gtk_tree_path_free (path);
-
- return TRUE;
-}
-
-static void
-treeview_row_inserted (GtkTreeModel *tree_model,
- GtkTreePath *path,
- GtkTreeIter *iter,
- GeditDocumentsPanel *panel)
-{
- GeditTab *tab;
- gint *indeces;
- GtkWidget *nb;
- gint old_position;
- gint new_position;
-
- if (panel->priv->adding_tab)
- return;
-
- tab = gedit_window_get_active_tab (panel->priv->window);
- g_return_if_fail (tab != NULL);
-
- panel->priv->is_reodering = TRUE;
-
- indeces = gtk_tree_path_get_indices (path);
-
- /* g_debug ("New Index: %d (path: %s)", indeces[0], gtk_tree_path_to_string (path));*/
-
- nb = _gedit_window_get_notebook (panel->priv->window);
-
- new_position = indeces[0];
- old_position = gtk_notebook_page_num (GTK_NOTEBOOK (nb),
- GTK_WIDGET (tab));
- if (new_position > old_position)
- new_position = MAX (0, new_position - 1);
-
- gedit_notebook_reorder_tab (GEDIT_NOTEBOOK (nb),
- tab,
- new_position);
-
- panel->priv->is_reodering = FALSE;
-}
-
-static void
-gedit_documents_panel_init (GeditDocumentsPanel *panel)
-{
- GtkWidget *sw;
- GtkTreeViewColumn *column;
- GtkCellRenderer *cell;
- GtkTreeSelection *selection;
-
- panel->priv = GEDIT_DOCUMENTS_PANEL_GET_PRIVATE (panel);
-
- panel->priv->adding_tab = FALSE;
- panel->priv->is_reodering = FALSE;
-
- /* Create the scrolled window */
- sw = gtk_scrolled_window_new (NULL, NULL);
- g_return_if_fail (sw != NULL);
-
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
- GTK_POLICY_AUTOMATIC,
- GTK_POLICY_AUTOMATIC);
- gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw),
- GTK_SHADOW_IN);
- gtk_widget_show (sw);
- gtk_box_pack_start (GTK_BOX (panel), sw, TRUE, TRUE, 0);
-
- /* Create the empty model */
- panel->priv->model = GTK_TREE_MODEL (gtk_list_store_new (N_COLUMNS,
- GDK_TYPE_PIXBUF,
- G_TYPE_STRING,
- G_TYPE_POINTER));
-
- /* Create the treeview */
- panel->priv->treeview = gtk_tree_view_new_with_model (panel->priv->model);
- g_object_unref (G_OBJECT (panel->priv->model));
- gtk_container_add (GTK_CONTAINER (sw), panel->priv->treeview);
- gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (panel->priv->treeview), FALSE);
- gtk_tree_view_set_reorderable (GTK_TREE_VIEW (panel->priv->treeview), TRUE);
-
- g_object_set (panel->priv->treeview, "has-tooltip", TRUE, NULL);
-
- gtk_widget_show (panel->priv->treeview);
-
- column = gtk_tree_view_column_new ();
- gtk_tree_view_column_set_title (column, _("Documents"));
-
- cell = gtk_cell_renderer_pixbuf_new ();
- gtk_tree_view_column_pack_start (column, cell, FALSE);
- gtk_tree_view_column_add_attribute (column, cell, "pixbuf", PIXBUF_COLUMN);
- cell = gtk_cell_renderer_text_new ();
- gtk_tree_view_column_pack_start (column, cell, TRUE);
- gtk_tree_view_column_add_attribute (column, cell, "markup", NAME_COLUMN);
-
- gtk_tree_view_append_column (GTK_TREE_VIEW (panel->priv->treeview),
- column);
-
- selection = gtk_tree_view_get_selection (
- GTK_TREE_VIEW (panel->priv->treeview));
-
- gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
-
- g_signal_connect (panel->priv->treeview,
- "cursor_changed",
- G_CALLBACK (treeview_cursor_changed),
- panel);
- g_signal_connect (panel->priv->treeview,
- "button-press-event",
- G_CALLBACK (panel_button_press_event),
- panel);
- g_signal_connect (panel->priv->treeview,
- "popup-menu",
- G_CALLBACK (panel_popup_menu),
- panel);
- g_signal_connect (panel->priv->treeview,
- "query-tooltip",
- G_CALLBACK (treeview_query_tooltip),
- NULL);
-
- g_signal_connect (panel->priv->model,
- "row-inserted",
- G_CALLBACK (treeview_row_inserted),
- panel);
-}
-
-GtkWidget *
-gedit_documents_panel_new (GeditWindow *window)
-{
- g_return_val_if_fail (GEDIT_IS_WINDOW (window), NULL);
-
- return GTK_WIDGET (g_object_new (GEDIT_TYPE_DOCUMENTS_PANEL,
- "window", window,
- NULL));
-}
diff --git a/gedit/gedit-documents-panel.h b/gedit/gedit-documents-panel.h
deleted file mode 100755
index b6191bf8..00000000
--- a/gedit/gedit-documents-panel.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * gedit-documents-panel.h
- * This file is part of gedit
- *
- * Copyright (C) 2005 - Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifndef __GEDIT_DOCUMENTS_PANEL_H__
-#define __GEDIT_DOCUMENTS_PANEL_H__
-
-#include <gtk/gtk.h>
-
-#include <gedit/gedit-window.h>
-
-G_BEGIN_DECLS
-
-/*
- * Type checking and casting macros
- */
-#define GEDIT_TYPE_DOCUMENTS_PANEL (gedit_documents_panel_get_type())
-#define GEDIT_DOCUMENTS_PANEL(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GEDIT_TYPE_DOCUMENTS_PANEL, GeditDocumentsPanel))
-#define GEDIT_DOCUMENTS_PANEL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GEDIT_TYPE_DOCUMENTS_PANEL, GeditDocumentsPanelClass))
-#define GEDIT_IS_DOCUMENTS_PANEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GEDIT_TYPE_DOCUMENTS_PANEL))
-#define GEDIT_IS_DOCUMENTS_PANEL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEDIT_TYPE_DOCUMENTS_PANEL))
-#define GEDIT_DOCUMENTS_PANEL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GEDIT_TYPE_DOCUMENTS_PANEL, GeditDocumentsPanelClass))
-
-/* Private structure type */
-typedef struct _GeditDocumentsPanelPrivate GeditDocumentsPanelPrivate;
-
-/*
- * Main object structure
- */
-typedef struct _GeditDocumentsPanel GeditDocumentsPanel;
-
-struct _GeditDocumentsPanel
-{
- GtkVBox vbox;
-
- /*< private > */
- GeditDocumentsPanelPrivate *priv;
-};
-
-/*
- * Class definition
- */
-typedef struct _GeditDocumentsPanelClass GeditDocumentsPanelClass;
-
-struct _GeditDocumentsPanelClass
-{
- GtkVBoxClass parent_class;
-};
-
-/*
- * Public methods
- */
-GType gedit_documents_panel_get_type (void) G_GNUC_CONST;
-
-GtkWidget *gedit_documents_panel_new (GeditWindow *window);
-
-G_END_DECLS
-
-#endif /* __GEDIT_DOCUMENTS_PANEL_H__ */
diff --git a/gedit/gedit-encodings-combo-box.c b/gedit/gedit-encodings-combo-box.c
deleted file mode 100755
index 1626bb97..00000000
--- a/gedit/gedit-encodings-combo-box.c
+++ /dev/null
@@ -1,468 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * gedit-encodings-combo-box.c
- * This file is part of gedit
- *
- * Copyright (C) 2003-2005 - Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2003-2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id: gedit-encodings-combo-box.c 6112 2008-01-23 08:26:24Z sfre $
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <glib/gi18n.h>
-#include <gtk/gtk.h>
-
-#include <gedit/gedit-encodings-combo-box.h>
-#include <gedit/gedit-prefs-manager.h>
-#include <gedit/dialogs/gedit-encodings-dialog.h>
-
-#define ENCODING_KEY "Enconding"
-
-#define GEDIT_ENCODINGS_COMBO_BOX_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), \
- GEDIT_TYPE_ENCODINGS_COMBO_BOX, \
- GeditEncodingsComboBoxPrivate))
-
-struct _GeditEncodingsComboBoxPrivate
-{
- GtkListStore *store;
- glong changed_id;
-
- guint activated_item;
-
- guint save_mode : 1;
-};
-
-enum
-{
- NAME_COLUMN,
- ENCODING_COLUMN,
- ADD_COLUMN,
- N_COLUMNS
-};
-
-/* Properties */
-enum
-{
- PROP_0,
- PROP_SAVE_MODE
-};
-
-
-G_DEFINE_TYPE(GeditEncodingsComboBox, gedit_encodings_combo_box, GTK_TYPE_COMBO_BOX)
-
-static void update_menu (GeditEncodingsComboBox *combo_box);
-
-static void
-gedit_encodings_combo_box_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- GeditEncodingsComboBox *combo;
-
- combo = GEDIT_ENCODINGS_COMBO_BOX (object);
-
- switch (prop_id)
- {
- case PROP_SAVE_MODE:
- combo->priv->save_mode = g_value_get_boolean (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gedit_encodings_combo_box_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- GeditEncodingsComboBox *combo;
-
- combo = GEDIT_ENCODINGS_COMBO_BOX (object);
-
- switch (prop_id)
- {
- case PROP_SAVE_MODE:
- g_value_set_boolean (value, combo->priv->save_mode);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gedit_encodings_combo_box_dispose (GObject *object)
-{
- GeditEncodingsComboBox *combo = GEDIT_ENCODINGS_COMBO_BOX (object);
-
- if (combo->priv->store != NULL)
- {
- g_object_unref (combo->priv->store);
- combo->priv->store = NULL;
- }
-
- G_OBJECT_CLASS (gedit_encodings_combo_box_parent_class)->dispose (object);
-}
-
-static void
-gedit_encodings_combo_box_class_init (GeditEncodingsComboBoxClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->set_property = gedit_encodings_combo_box_set_property;
- object_class->get_property = gedit_encodings_combo_box_get_property;
- object_class->dispose = gedit_encodings_combo_box_dispose;
-
- g_object_class_install_property (object_class,
- PROP_SAVE_MODE,
- g_param_spec_boolean ("save-mode",
- "Save Mode",
- "Save Mode",
- FALSE,
- G_PARAM_READWRITE |
- G_PARAM_CONSTRUCT |
- G_PARAM_STATIC_STRINGS));
-
- g_type_class_add_private (object_class, sizeof (GeditEncodingsComboBoxPrivate));
-}
-
-static void
-dialog_response_cb (GtkDialog *dialog,
- gint response_id,
- GeditEncodingsComboBox *menu)
-{
- if (response_id == GTK_RESPONSE_OK)
- {
- update_menu (menu);
- }
-
- gtk_widget_destroy (GTK_WIDGET (dialog));
-}
-
-static void
-add_or_remove (GeditEncodingsComboBox *menu,
- GtkTreeModel *model)
-{
- GtkTreeIter iter;
- gboolean add_item = FALSE;
-
- if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX (menu), &iter))
- {
- gtk_tree_model_get (model, &iter,
- ADD_COLUMN, &add_item,
- -1);
- }
-
- if (!add_item)
- {
- menu->priv->activated_item = gtk_combo_box_get_active (GTK_COMBO_BOX (menu));
- }
- else
- {
- GtkWidget *dialog;
-
- GtkWidget *toplevel = gtk_widget_get_toplevel (GTK_WIDGET (menu));
-
-#if !GTK_CHECK_VERSION (2, 18, 0)
- if (!GTK_WIDGET_TOPLEVEL (toplevel))
-#else
- if (!gtk_widget_is_toplevel (toplevel))
-#endif
- toplevel = NULL;
-
- g_signal_handler_block (menu, menu->priv->changed_id);
- gtk_combo_box_set_active (GTK_COMBO_BOX (menu),
- menu->priv->activated_item);
- g_signal_handler_unblock (menu, menu->priv->changed_id);
-
- dialog = gedit_encodings_dialog_new();
-
- if (toplevel != NULL)
- {
- GtkWindowGroup *wg;
-
- gtk_window_set_transient_for (GTK_WINDOW (dialog),
- GTK_WINDOW (toplevel));
-
- wg = GTK_WINDOW (toplevel)->group;
- if (wg == NULL)
- {
- wg = gtk_window_group_new ();
- gtk_window_group_add_window (wg,
- GTK_WINDOW (toplevel));
- }
-
- gtk_window_group_add_window (wg,
- GTK_WINDOW (dialog));
- }
-
- gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
-
- g_signal_connect (dialog,
- "response",
- G_CALLBACK (dialog_response_cb),
- menu);
-
- gtk_widget_show (dialog);
- }
-}
-
-static gboolean
-separator_func (GtkTreeModel *model, GtkTreeIter *iter, gpointer data)
-{
- gchar *str;
- gboolean ret;
-
- gtk_tree_model_get (model, iter, NAME_COLUMN, &str, -1);
- ret = (str == NULL || *str == '\0');
- g_free (str);
-
- return ret;
-}
-
-static void
-update_menu (GeditEncodingsComboBox *menu)
-{
- GtkListStore *store;
- GtkTreeIter iter;
- GSList *encodings, *l;
- gchar *str;
- const GeditEncoding *utf8_encoding;
- const GeditEncoding *current_encoding;
-
- store = menu->priv->store;
-
- /* Unset the previous model */
- g_signal_handler_block (menu, menu->priv->changed_id);
- gtk_list_store_clear (store);
- gtk_combo_box_set_model (GTK_COMBO_BOX (menu),
- NULL);
-
- utf8_encoding = gedit_encoding_get_utf8 ();
- current_encoding = gedit_encoding_get_current ();
-
- if (!menu->priv->save_mode)
- {
- gtk_list_store_append (store, &iter);
- gtk_list_store_set (store, &iter,
- NAME_COLUMN, _("Automatically Detected"),
- ENCODING_COLUMN, NULL,
- ADD_COLUMN, FALSE,
- -1);
-
- gtk_list_store_append (store, &iter);
- gtk_list_store_set (store, &iter,
- NAME_COLUMN, "",
- ENCODING_COLUMN, NULL,
- ADD_COLUMN, FALSE,
- -1);
- }
-
- if (current_encoding != utf8_encoding)
- str = gedit_encoding_to_string (utf8_encoding);
- else
- str = g_strdup_printf (_("Current Locale (%s)"),
- gedit_encoding_get_charset (utf8_encoding));
-
- gtk_list_store_append (store, &iter);
- gtk_list_store_set (store, &iter,
- NAME_COLUMN, str,
- ENCODING_COLUMN, utf8_encoding,
- ADD_COLUMN, FALSE,
- -1);
-
- g_free (str);
-
- if ((utf8_encoding != current_encoding) &&
- (current_encoding != NULL))
- {
- str = g_strdup_printf (_("Current Locale (%s)"),
- gedit_encoding_get_charset (current_encoding));
-
- gtk_list_store_append (store, &iter);
- gtk_list_store_set (store, &iter,
- NAME_COLUMN, str,
- ENCODING_COLUMN, current_encoding,
- ADD_COLUMN, FALSE,
- -1);
-
- g_free (str);
- }
-
- encodings = gedit_prefs_manager_get_shown_in_menu_encodings ();
-
- for (l = encodings; l != NULL; l = g_slist_next (l))
- {
- const GeditEncoding *enc = (const GeditEncoding *)l->data;
-
- if ((enc != current_encoding) &&
- (enc != utf8_encoding) &&
- (enc != NULL))
- {
- str = gedit_encoding_to_string (enc);
-
- gtk_list_store_append (store, &iter);
- gtk_list_store_set (store, &iter,
- NAME_COLUMN, str,
- ENCODING_COLUMN, enc,
- ADD_COLUMN, FALSE,
- -1);
-
- g_free (str);
- }
- }
-
- g_slist_free (encodings);
-
- if (gedit_prefs_manager_shown_in_menu_encodings_can_set ())
- {
- gtk_list_store_append (store, &iter);
- /* separator */
- gtk_list_store_set (store, &iter,
- NAME_COLUMN, "",
- ENCODING_COLUMN, NULL,
- ADD_COLUMN, FALSE,
- -1);
-
- gtk_list_store_append (store, &iter);
- gtk_list_store_set (store, &iter,
- NAME_COLUMN, _("Add or Remove..."),
- ENCODING_COLUMN, NULL,
- ADD_COLUMN, TRUE,
- -1);
- }
-
- /* set the model back */
- gtk_combo_box_set_model (GTK_COMBO_BOX (menu),
- GTK_TREE_MODEL (menu->priv->store));
- gtk_combo_box_set_active (GTK_COMBO_BOX (menu), 0);
-
- g_signal_handler_unblock (menu, menu->priv->changed_id);
-}
-
-static void
-gedit_encodings_combo_box_init (GeditEncodingsComboBox *menu)
-{
- GtkCellRenderer *text_renderer;
-
- menu->priv = GEDIT_ENCODINGS_COMBO_BOX_GET_PRIVATE (menu);
-
- menu->priv->store = gtk_list_store_new (N_COLUMNS,
- G_TYPE_STRING,
- G_TYPE_POINTER,
- G_TYPE_BOOLEAN);
-
- /* Setup up the cells */
- text_renderer = gtk_cell_renderer_text_new ();
- gtk_cell_layout_pack_end (GTK_CELL_LAYOUT (menu),
- text_renderer, TRUE);
-
- gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (menu),
- text_renderer,
- "text",
- NAME_COLUMN,
- NULL);
-
- gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (menu),
- separator_func, NULL,
- NULL);
-
- menu->priv->changed_id = g_signal_connect (menu, "changed",
- G_CALLBACK (add_or_remove),
- menu->priv->store);
-
- update_menu (menu);
-}
-
-GtkWidget *
-gedit_encodings_combo_box_new (gboolean save_mode)
-{
- return g_object_new (GEDIT_TYPE_ENCODINGS_COMBO_BOX,
- "save_mode", save_mode,
- NULL);
-}
-
-const GeditEncoding *
-gedit_encodings_combo_box_get_selected_encoding (GeditEncodingsComboBox *menu)
-{
- GtkTreeIter iter;
-
- g_return_val_if_fail (GEDIT_IS_ENCODINGS_COMBO_BOX (menu), NULL);
-
- if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX (menu), &iter))
- {
- const GeditEncoding *ret;
- GtkTreeModel *model;
-
- model = gtk_combo_box_get_model (GTK_COMBO_BOX (menu));
-
- gtk_tree_model_get (model, &iter,
- ENCODING_COLUMN, &ret,
- -1);
-
- return ret;
- }
-
- return NULL;
-}
-
-void
-gedit_encodings_combo_box_set_selected_encoding (GeditEncodingsComboBox *menu,
- const GeditEncoding *encoding)
-{
- GtkTreeIter iter;
- GtkTreeModel *model;
- gboolean b;
- g_return_if_fail (GEDIT_IS_ENCODINGS_COMBO_BOX (menu));
- g_return_if_fail (GTK_IS_COMBO_BOX (menu));
-
- model = gtk_combo_box_get_model (GTK_COMBO_BOX (menu));
- b = gtk_tree_model_get_iter_first (model, &iter);
-
- while (b)
- {
- const GeditEncoding *enc;
-
- gtk_tree_model_get (model, &iter,
- ENCODING_COLUMN, &enc,
- -1);
-
- if (enc == encoding)
- {
- gtk_combo_box_set_active_iter (GTK_COMBO_BOX (menu),
- &iter);
-
- return;
- }
-
- b = gtk_tree_model_iter_next (model, &iter);
- }
-}
diff --git a/gedit/gedit-encodings-combo-box.h b/gedit/gedit-encodings-combo-box.h
deleted file mode 100755
index 586f8007..00000000
--- a/gedit/gedit-encodings-combo-box.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * gedit-encodings-combo-box.h
- * This file is part of gedit
- *
- * Copyright (C) 2003-2005 - Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2003-2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id: gedit-encodings-option-menu.h 4429 2005-12-12 17:28:04Z pborelli $
- */
-
-#ifndef __GEDIT_ENCODINGS_COMBO_BOX_H__
-#define __GEDIT_ENCODINGS_COMBO_BOX_H__
-
-#include <gtk/gtkoptionmenu.h>
-#include <gedit/gedit-encodings.h>
-
-G_BEGIN_DECLS
-
-#define GEDIT_TYPE_ENCODINGS_COMBO_BOX (gedit_encodings_combo_box_get_type ())
-#define GEDIT_ENCODINGS_COMBO_BOX(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEDIT_TYPE_ENCODINGS_COMBO_BOX, GeditEncodingsComboBox))
-#define GEDIT_ENCODINGS_COMBO_BOX_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEDIT_TYPE_ENCODINGS_COMBO_BOX, GeditEncodingsComboBoxClass))
-#define GEDIT_IS_ENCODINGS_COMBO_BOX(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEDIT_TYPE_ENCODINGS_COMBO_BOX))
-#define GEDIT_IS_ENCODINGS_COMBO_BOX_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEDIT_TYPE_ENCODINGS_COMBO_BOX))
-#define GEDIT_ENCODINGS_COMBO_BOX_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEDIT_TYPE_ENCODINGS_COMBO_BOX, GeditEncodingsComboBoxClass))
-
-
-typedef struct _GeditEncodingsComboBox GeditEncodingsComboBox;
-typedef struct _GeditEncodingsComboBoxClass GeditEncodingsComboBoxClass;
-
-typedef struct _GeditEncodingsComboBoxPrivate GeditEncodingsComboBoxPrivate;
-
-struct _GeditEncodingsComboBox
-{
- GtkComboBox parent;
-
- GeditEncodingsComboBoxPrivate *priv;
-};
-
-struct _GeditEncodingsComboBoxClass
-{
- GtkComboBoxClass parent_class;
-};
-
-GType gedit_encodings_combo_box_get_type (void) G_GNUC_CONST;
-
-/* Constructor */
-GtkWidget *gedit_encodings_combo_box_new (gboolean save_mode);
-
-const GeditEncoding *gedit_encodings_combo_box_get_selected_encoding (GeditEncodingsComboBox *menu);
-void gedit_encodings_combo_box_set_selected_encoding (GeditEncodingsComboBox *menu,
- const GeditEncoding *encoding);
-
-G_END_DECLS
-
-#endif /* __GEDIT_ENCODINGS_COMBO_BOX_H__ */
-
-
diff --git a/gedit/gedit-encodings.c b/gedit/gedit-encodings.c
deleted file mode 100755
index cf97bf56..00000000
--- a/gedit/gedit-encodings.c
+++ /dev/null
@@ -1,473 +0,0 @@
-/*
- * gedit-encodings.c
- * This file is part of gedit
- *
- * Copyright (C) 2002-2005 Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2002-2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <string.h>
-
-#include <glib/gi18n.h>
-
-#include "gedit-encodings.h"
-
-
-struct _GeditEncoding
-{
- gint index;
- const gchar *charset;
- const gchar *name;
-};
-
-/*
- * The original versions of the following tables are taken from profterm
- *
- * Copyright (C) 2002 Red Hat, Inc.
- */
-
-typedef enum
-{
-
- GEDIT_ENCODING_ISO_8859_1,
- GEDIT_ENCODING_ISO_8859_2,
- GEDIT_ENCODING_ISO_8859_3,
- GEDIT_ENCODING_ISO_8859_4,
- GEDIT_ENCODING_ISO_8859_5,
- GEDIT_ENCODING_ISO_8859_6,
- GEDIT_ENCODING_ISO_8859_7,
- GEDIT_ENCODING_ISO_8859_8,
- GEDIT_ENCODING_ISO_8859_9,
- GEDIT_ENCODING_ISO_8859_10,
- GEDIT_ENCODING_ISO_8859_13,
- GEDIT_ENCODING_ISO_8859_14,
- GEDIT_ENCODING_ISO_8859_15,
- GEDIT_ENCODING_ISO_8859_16,
-
- GEDIT_ENCODING_UTF_7,
- GEDIT_ENCODING_UTF_16,
- GEDIT_ENCODING_UTF_16_BE,
- GEDIT_ENCODING_UTF_16_LE,
- GEDIT_ENCODING_UTF_32,
- GEDIT_ENCODING_UCS_2,
- GEDIT_ENCODING_UCS_4,
-
- GEDIT_ENCODING_ARMSCII_8,
- GEDIT_ENCODING_BIG5,
- GEDIT_ENCODING_BIG5_HKSCS,
- GEDIT_ENCODING_CP_866,
-
- GEDIT_ENCODING_EUC_JP,
- GEDIT_ENCODING_EUC_JP_MS,
- GEDIT_ENCODING_CP932,
- GEDIT_ENCODING_EUC_KR,
- GEDIT_ENCODING_EUC_TW,
-
- GEDIT_ENCODING_GB18030,
- GEDIT_ENCODING_GB2312,
- GEDIT_ENCODING_GBK,
- GEDIT_ENCODING_GEOSTD8,
-
- GEDIT_ENCODING_IBM_850,
- GEDIT_ENCODING_IBM_852,
- GEDIT_ENCODING_IBM_855,
- GEDIT_ENCODING_IBM_857,
- GEDIT_ENCODING_IBM_862,
- GEDIT_ENCODING_IBM_864,
-
- GEDIT_ENCODING_ISO_2022_JP,
- GEDIT_ENCODING_ISO_2022_KR,
- GEDIT_ENCODING_ISO_IR_111,
- GEDIT_ENCODING_JOHAB,
- GEDIT_ENCODING_KOI8_R,
- GEDIT_ENCODING_KOI8__R,
- GEDIT_ENCODING_KOI8_U,
-
- GEDIT_ENCODING_SHIFT_JIS,
- GEDIT_ENCODING_TCVN,
- GEDIT_ENCODING_TIS_620,
- GEDIT_ENCODING_UHC,
- GEDIT_ENCODING_VISCII,
-
- GEDIT_ENCODING_WINDOWS_1250,
- GEDIT_ENCODING_WINDOWS_1251,
- GEDIT_ENCODING_WINDOWS_1252,
- GEDIT_ENCODING_WINDOWS_1253,
- GEDIT_ENCODING_WINDOWS_1254,
- GEDIT_ENCODING_WINDOWS_1255,
- GEDIT_ENCODING_WINDOWS_1256,
- GEDIT_ENCODING_WINDOWS_1257,
- GEDIT_ENCODING_WINDOWS_1258,
-
- GEDIT_ENCODING_LAST,
-
- GEDIT_ENCODING_UTF_8,
- GEDIT_ENCODING_UNKNOWN
-
-} GeditEncodingIndex;
-
-static const GeditEncoding utf8_encoding = {
- GEDIT_ENCODING_UTF_8,
- "UTF-8",
- N_("Unicode")
-};
-
-/* initialized in gedit_encoding_lazy_init() */
-static GeditEncoding unknown_encoding = {
- GEDIT_ENCODING_UNKNOWN,
- NULL,
- NULL
-};
-
-static const GeditEncoding encodings [] = {
-
- { GEDIT_ENCODING_ISO_8859_1,
- "ISO-8859-1", N_("Western") },
- { GEDIT_ENCODING_ISO_8859_2,
- "ISO-8859-2", N_("Central European") },
- { GEDIT_ENCODING_ISO_8859_3,
- "ISO-8859-3", N_("South European") },
- { GEDIT_ENCODING_ISO_8859_4,
- "ISO-8859-4", N_("Baltic") },
- { GEDIT_ENCODING_ISO_8859_5,
- "ISO-8859-5", N_("Cyrillic") },
- { GEDIT_ENCODING_ISO_8859_6,
- "ISO-8859-6", N_("Arabic") },
- { GEDIT_ENCODING_ISO_8859_7,
- "ISO-8859-7", N_("Greek") },
- { GEDIT_ENCODING_ISO_8859_8,
- "ISO-8859-8", N_("Hebrew Visual") },
- { GEDIT_ENCODING_ISO_8859_9,
- "ISO-8859-9", N_("Turkish") },
- { GEDIT_ENCODING_ISO_8859_10,
- "ISO-8859-10", N_("Nordic") },
- { GEDIT_ENCODING_ISO_8859_13,
- "ISO-8859-13", N_("Baltic") },
- { GEDIT_ENCODING_ISO_8859_14,
- "ISO-8859-14", N_("Celtic") },
- { GEDIT_ENCODING_ISO_8859_15,
- "ISO-8859-15", N_("Western") },
- { GEDIT_ENCODING_ISO_8859_16,
- "ISO-8859-16", N_("Romanian") },
-
- { GEDIT_ENCODING_UTF_7,
- "UTF-7", N_("Unicode") },
- { GEDIT_ENCODING_UTF_16,
- "UTF-16", N_("Unicode") },
- { GEDIT_ENCODING_UTF_16_BE,
- "UTF-16BE", N_("Unicode") },
- { GEDIT_ENCODING_UTF_16_LE,
- "UTF-16LE", N_("Unicode") },
- { GEDIT_ENCODING_UTF_32,
- "UTF-32", N_("Unicode") },
- { GEDIT_ENCODING_UCS_2,
- "UCS-2", N_("Unicode") },
- { GEDIT_ENCODING_UCS_4,
- "UCS-4", N_("Unicode") },
-
- { GEDIT_ENCODING_ARMSCII_8,
- "ARMSCII-8", N_("Armenian") },
- { GEDIT_ENCODING_BIG5,
- "BIG5", N_("Chinese Traditional") },
- { GEDIT_ENCODING_BIG5_HKSCS,
- "BIG5-HKSCS", N_("Chinese Traditional") },
- { GEDIT_ENCODING_CP_866,
- "CP866", N_("Cyrillic/Russian") },
-
- { GEDIT_ENCODING_EUC_JP,
- "EUC-JP", N_("Japanese") },
- { GEDIT_ENCODING_EUC_JP_MS,
- "EUC-JP-MS", N_("Japanese") },
- { GEDIT_ENCODING_CP932,
- "CP932", N_("Japanese") },
-
- { GEDIT_ENCODING_EUC_KR,
- "EUC-KR", N_("Korean") },
- { GEDIT_ENCODING_EUC_TW,
- "EUC-TW", N_("Chinese Traditional") },
-
- { GEDIT_ENCODING_GB18030,
- "GB18030", N_("Chinese Simplified") },
- { GEDIT_ENCODING_GB2312,
- "GB2312", N_("Chinese Simplified") },
- { GEDIT_ENCODING_GBK,
- "GBK", N_("Chinese Simplified") },
- { GEDIT_ENCODING_GEOSTD8,
- "GEORGIAN-ACADEMY", N_("Georgian") }, /* FIXME GEOSTD8 ? */
-
- { GEDIT_ENCODING_IBM_850,
- "IBM850", N_("Western") },
- { GEDIT_ENCODING_IBM_852,
- "IBM852", N_("Central European") },
- { GEDIT_ENCODING_IBM_855,
- "IBM855", N_("Cyrillic") },
- { GEDIT_ENCODING_IBM_857,
- "IBM857", N_("Turkish") },
- { GEDIT_ENCODING_IBM_862,
- "IBM862", N_("Hebrew") },
- { GEDIT_ENCODING_IBM_864,
- "IBM864", N_("Arabic") },
-
- { GEDIT_ENCODING_ISO_2022_JP,
- "ISO-2022-JP", N_("Japanese") },
- { GEDIT_ENCODING_ISO_2022_KR,
- "ISO-2022-KR", N_("Korean") },
- { GEDIT_ENCODING_ISO_IR_111,
- "ISO-IR-111", N_("Cyrillic") },
- { GEDIT_ENCODING_JOHAB,
- "JOHAB", N_("Korean") },
- { GEDIT_ENCODING_KOI8_R,
- "KOI8R", N_("Cyrillic") },
- { GEDIT_ENCODING_KOI8__R,
- "KOI8-R", N_("Cyrillic") },
- { GEDIT_ENCODING_KOI8_U,
- "KOI8U", N_("Cyrillic/Ukrainian") },
-
- { GEDIT_ENCODING_SHIFT_JIS,
- "SHIFT_JIS", N_("Japanese") },
- { GEDIT_ENCODING_TCVN,
- "TCVN", N_("Vietnamese") },
- { GEDIT_ENCODING_TIS_620,
- "TIS-620", N_("Thai") },
- { GEDIT_ENCODING_UHC,
- "UHC", N_("Korean") },
- { GEDIT_ENCODING_VISCII,
- "VISCII", N_("Vietnamese") },
-
- { GEDIT_ENCODING_WINDOWS_1250,
- "WINDOWS-1250", N_("Central European") },
- { GEDIT_ENCODING_WINDOWS_1251,
- "WINDOWS-1251", N_("Cyrillic") },
- { GEDIT_ENCODING_WINDOWS_1252,
- "WINDOWS-1252", N_("Western") },
- { GEDIT_ENCODING_WINDOWS_1253,
- "WINDOWS-1253", N_("Greek") },
- { GEDIT_ENCODING_WINDOWS_1254,
- "WINDOWS-1254", N_("Turkish") },
- { GEDIT_ENCODING_WINDOWS_1255,
- "WINDOWS-1255", N_("Hebrew") },
- { GEDIT_ENCODING_WINDOWS_1256,
- "WINDOWS-1256", N_("Arabic") },
- { GEDIT_ENCODING_WINDOWS_1257,
- "WINDOWS-1257", N_("Baltic") },
- { GEDIT_ENCODING_WINDOWS_1258,
- "WINDOWS-1258", N_("Vietnamese") }
-};
-
-static void
-gedit_encoding_lazy_init (void)
-{
- static gboolean initialized = FALSE;
- const gchar *locale_charset;
-
- if (initialized)
- return;
-
- if (g_get_charset (&locale_charset) == FALSE)
- {
- unknown_encoding.charset = g_strdup (locale_charset);
- }
-
- initialized = TRUE;
-}
-
-const GeditEncoding *
-gedit_encoding_get_from_charset (const gchar *charset)
-{
- gint i;
-
- g_return_val_if_fail (charset != NULL, NULL);
-
- gedit_encoding_lazy_init ();
-
- if (charset == NULL)
- return NULL;
-
- if (g_ascii_strcasecmp (charset, "UTF-8") == 0)
- return gedit_encoding_get_utf8 ();
-
- i = 0;
- while (i < GEDIT_ENCODING_LAST)
- {
- if (g_ascii_strcasecmp (charset, encodings[i].charset) == 0)
- return &encodings[i];
-
- ++i;
- }
-
- if (unknown_encoding.charset != NULL)
- {
- if (g_ascii_strcasecmp (charset, unknown_encoding.charset) == 0)
- return &unknown_encoding;
- }
-
- return NULL;
-}
-
-const GeditEncoding *
-gedit_encoding_get_from_index (gint idx)
-{
- g_return_val_if_fail (idx >= 0, NULL);
-
- if (idx >= GEDIT_ENCODING_LAST)
- return NULL;
-
- gedit_encoding_lazy_init ();
-
- return &encodings[idx];
-}
-
-const GeditEncoding *
-gedit_encoding_get_utf8 (void)
-{
- gedit_encoding_lazy_init ();
-
- return &utf8_encoding;
-}
-
-const GeditEncoding *
-gedit_encoding_get_current (void)
-{
- static gboolean initialized = FALSE;
- static const GeditEncoding *locale_encoding = NULL;
-
- const gchar *locale_charset;
-
- gedit_encoding_lazy_init ();
-
- if (initialized != FALSE)
- return locale_encoding;
-
- if (g_get_charset (&locale_charset) == FALSE)
- {
- g_return_val_if_fail (locale_charset != NULL, &utf8_encoding);
-
- locale_encoding = gedit_encoding_get_from_charset (locale_charset);
- }
- else
- {
- locale_encoding = &utf8_encoding;
- }
-
- if (locale_encoding == NULL)
- {
- locale_encoding = &unknown_encoding;
- }
-
- g_return_val_if_fail (locale_encoding != NULL, NULL);
-
- initialized = TRUE;
-
- return locale_encoding;
-}
-
-gchar *
-gedit_encoding_to_string (const GeditEncoding* enc)
-{
- g_return_val_if_fail (enc != NULL, NULL);
-
- gedit_encoding_lazy_init ();
-
- g_return_val_if_fail (enc->charset != NULL, NULL);
-
- if (enc->name != NULL)
- {
- return g_strdup_printf ("%s (%s)", _(enc->name), enc->charset);
- }
- else
- {
- if (g_ascii_strcasecmp (enc->charset, "ANSI_X3.4-1968") == 0)
- return g_strdup_printf ("US-ASCII (%s)", enc->charset);
- else
- return g_strdup (enc->charset);
- }
-}
-
-const gchar *
-gedit_encoding_get_charset (const GeditEncoding* enc)
-{
- g_return_val_if_fail (enc != NULL, NULL);
-
- gedit_encoding_lazy_init ();
-
- g_return_val_if_fail (enc->charset != NULL, NULL);
-
- return enc->charset;
-}
-
-const gchar *
-gedit_encoding_get_name (const GeditEncoding* enc)
-{
- g_return_val_if_fail (enc != NULL, NULL);
-
- gedit_encoding_lazy_init ();
-
- return (enc->name == NULL) ? _("Unknown") : _(enc->name);
-}
-
-/* These are to make language bindings happy. Since Encodings are
- * const, copy() just returns the same pointer and fres() doesn't
- * do nothing */
-
-GeditEncoding *
-gedit_encoding_copy (const GeditEncoding *enc)
-{
- g_return_val_if_fail (enc != NULL, NULL);
-
- return (GeditEncoding *) enc;
-}
-
-void
-gedit_encoding_free (GeditEncoding *enc)
-{
- g_return_if_fail (enc != NULL);
-}
-
-/**
- * gedit_encoding_get_type:
- *
- * Retrieves the GType object which is associated with the
- * #GeditEncoding class.
- *
- * Return value: the GType associated with #GeditEncoding.
- **/
-GType
-gedit_encoding_get_type (void)
-{
- static GType our_type = 0;
-
- if (!our_type)
- our_type = g_boxed_type_register_static (
- "GeditEncoding",
- (GBoxedCopyFunc) gedit_encoding_copy,
- (GBoxedFreeFunc) gedit_encoding_free);
-
- return our_type;
-}
-
diff --git a/gedit/gedit-encodings.h b/gedit/gedit-encodings.h
deleted file mode 100755
index 7e0aa8d2..00000000
--- a/gedit/gedit-encodings.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * gedit-encodings.h
- * This file is part of gedit
- *
- * Copyright (C) 2002-2005 Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2002-2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifndef __GEDIT_ENCODINGS_H__
-#define __GEDIT_ENCODINGS_H__
-
-#include <glib.h>
-#include <glib-object.h>
-
-G_BEGIN_DECLS
-
-typedef struct _GeditEncoding GeditEncoding;
-
-#define GEDIT_TYPE_ENCODING (gedit_encoding_get_type ())
-
-GType gedit_encoding_get_type (void) G_GNUC_CONST;
-
-const GeditEncoding *gedit_encoding_get_from_charset (const gchar *charset);
-const GeditEncoding *gedit_encoding_get_from_index (gint index);
-
-gchar *gedit_encoding_to_string (const GeditEncoding *enc);
-
-const gchar *gedit_encoding_get_name (const GeditEncoding *enc);
-const gchar *gedit_encoding_get_charset (const GeditEncoding *enc);
-
-const GeditEncoding *gedit_encoding_get_utf8 (void);
-const GeditEncoding *gedit_encoding_get_current (void);
-
-/* These should not be used, they are just to make python bindings happy */
-GeditEncoding *gedit_encoding_copy (const GeditEncoding *enc);
-void gedit_encoding_free (GeditEncoding *enc);
-
-G_END_DECLS
-
-#endif /* __GEDIT_ENCODINGS_H__ */
diff --git a/gedit/gedit-enum-types.c.template b/gedit/gedit-enum-types.c.template
deleted file mode 100755
index 7a67ac79..00000000
--- a/gedit/gedit-enum-types.c.template
+++ /dev/null
@@ -1,39 +0,0 @@
-/*** BEGIN file-header ***/
-#include "gedit-enum-types.h"
-
-/*** END file-header ***/
-
-/*** BEGIN file-production ***/
-/* enumerations from "@filename@" */
-#include "@filename@"
-
-/*** END file-production ***/
-
-/*** BEGIN value-header ***/
-GType
-@enum_name@_get_type (void)
-{
- static GType the_type = 0;
-
- if (the_type == 0)
- {
- static const G@Type@Value values[] = {
-/*** END value-header ***/
-
-/*** BEGIN value-production ***/
- { @VALUENAME@,
- "@VALUENAME@",
- "@valuenick@" },
-/*** END value-production ***/
-
-/*** BEGIN value-tail ***/
- { 0, NULL, NULL }
- };
- the_type = g_@type@_register_static (
- g_intern_static_string ("@EnumName@"),
- values);
- }
- return the_type;
-}
-
-/*** END value-tail ***/
diff --git a/gedit/gedit-enum-types.h.template b/gedit/gedit-enum-types.h.template
deleted file mode 100755
index 78f39ce8..00000000
--- a/gedit/gedit-enum-types.h.template
+++ /dev/null
@@ -1,27 +0,0 @@
-/*** BEGIN file-header ***/
-#ifndef __GEDIT_ENUM_TYPES_H__
-#define __GEDIT_ENUM_TYPES_H__
-
-#include <glib-object.h>
-
-G_BEGIN_DECLS
-
-/*** END file-header ***/
-
-/*** BEGIN file-production ***/
-/* Enumerations from "@filename@" */
-
-/*** END file-production ***/
-
-/*** BEGIN enumeration-production ***/
-#define GEDIT_TYPE_@ENUMSHORT@ (@enum_name@_get_type())
-GType @enum_name@_get_type (void) G_GNUC_CONST;
-
-/*** END enumeration-production ***/
-
-/*** BEGIN file-tail ***/
-G_END_DECLS
-
-#endif /* __GEDIT_ENUM_TYPES_H__ */
-/*** END file-tail ***/
-
diff --git a/gedit/gedit-file-chooser-dialog.c b/gedit/gedit-file-chooser-dialog.c
deleted file mode 100755
index 94858338..00000000
--- a/gedit/gedit-file-chooser-dialog.c
+++ /dev/null
@@ -1,560 +0,0 @@
-/*
- * gedit-file-chooser-dialog.c
- * This file is part of gedit
- *
- * Copyright (C) 2005-2007 - Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2005-2007. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-/* TODO: Override set_extra_widget */
-/* TODO: add encoding property */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <string.h>
-
-#include <glib/gi18n.h>
-#include <gtk/gtk.h>
-
-#include "gedit-file-chooser-dialog.h"
-#include "gedit-encodings-combo-box.h"
-#include "gedit-language-manager.h"
-#include "gedit-prefs-manager-app.h"
-#include "gedit-debug.h"
-#include "gedit-enum-types.h"
-
-#define GEDIT_FILE_CHOOSER_DIALOG_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), GEDIT_TYPE_FILE_CHOOSER_DIALOG, GeditFileChooserDialogPrivate))
-
-#define ALL_FILES _("All Files")
-#define ALL_TEXT_FILES _("All Text Files")
-
-struct _GeditFileChooserDialogPrivate
-{
- GtkWidget *option_menu;
- GtkWidget *extra_widget;
-
- GtkWidget *newline_label;
- GtkWidget *newline_combo;
- GtkListStore *newline_store;
-};
-
-G_DEFINE_TYPE(GeditFileChooserDialog, gedit_file_chooser_dialog, GTK_TYPE_FILE_CHOOSER_DIALOG)
-
-static void
-gedit_file_chooser_dialog_class_init (GeditFileChooserDialogClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- g_type_class_add_private (object_class, sizeof(GeditFileChooserDialogPrivate));
-}
-
-static void
-create_option_menu (GeditFileChooserDialog *dialog)
-{
- GtkWidget *label;
- GtkWidget *menu;
-
- label = gtk_label_new_with_mnemonic (_("C_haracter Encoding:"));
- gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
-
- menu = gedit_encodings_combo_box_new (
- gtk_file_chooser_get_action (GTK_FILE_CHOOSER (dialog)) == GTK_FILE_CHOOSER_ACTION_SAVE);
-
- gtk_label_set_mnemonic_widget (GTK_LABEL (label), menu);
-
- gtk_box_pack_start (GTK_BOX (dialog->priv->extra_widget),
- label,
- FALSE,
- TRUE,
- 0);
-
- gtk_box_pack_start (GTK_BOX (dialog->priv->extra_widget),
- menu,
- TRUE,
- TRUE,
- 0);
-
- gtk_widget_show (label);
- gtk_widget_show (menu);
-
- dialog->priv->option_menu = menu;
-}
-
-static void
-update_newline_visibility (GeditFileChooserDialog *dialog)
-{
- if (gtk_file_chooser_get_action (GTK_FILE_CHOOSER (dialog)) == GTK_FILE_CHOOSER_ACTION_SAVE)
- {
- gtk_widget_show (dialog->priv->newline_label);
- gtk_widget_show (dialog->priv->newline_combo);
- }
- else
- {
- gtk_widget_hide (dialog->priv->newline_label);
- gtk_widget_hide (dialog->priv->newline_combo);
- }
-}
-
-static void
-newline_combo_append (GtkComboBox *combo,
- GtkListStore *store,
- GtkTreeIter *iter,
- const gchar *label,
- GeditDocumentNewlineType newline_type)
-{
- gtk_list_store_append (store, iter);
- gtk_list_store_set (store, iter, 0, label, 1, newline_type, -1);
-
- if (newline_type == GEDIT_DOCUMENT_NEWLINE_TYPE_DEFAULT)
- {
- gtk_combo_box_set_active_iter (combo, iter);
- }
-}
-
-static void
-create_newline_combo (GeditFileChooserDialog *dialog)
-{
- GtkWidget *label, *combo;
- GtkListStore *store;
- GtkCellRenderer *renderer;
- GtkTreeIter iter;
-
- label = gtk_label_new_with_mnemonic (_("L_ine Ending:"));
- gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
-
- store = gtk_list_store_new (2, G_TYPE_STRING, GEDIT_TYPE_DOCUMENT_NEWLINE_TYPE);
- combo = gtk_combo_box_new_with_model (GTK_TREE_MODEL (store));
- renderer = gtk_cell_renderer_text_new ();
-
- gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo),
- renderer,
- TRUE);
-
- gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (combo),
- renderer,
- "text",
- 0);
-
- newline_combo_append (GTK_COMBO_BOX (combo),
- store,
- &iter,
- _("Unix/Linux"),
- GEDIT_DOCUMENT_NEWLINE_TYPE_LF);
-
- newline_combo_append (GTK_COMBO_BOX (combo),
- store,
- &iter,
- _("Mac OS Classic"),
- GEDIT_DOCUMENT_NEWLINE_TYPE_CR);
-
- newline_combo_append (GTK_COMBO_BOX (combo),
- store,
- &iter,
- _("Windows"),
- GEDIT_DOCUMENT_NEWLINE_TYPE_CR_LF);
-
- gtk_label_set_mnemonic_widget (GTK_LABEL (label), combo);
-
- gtk_box_pack_start (GTK_BOX (dialog->priv->extra_widget),
- label,
- FALSE,
- TRUE,
- 0);
-
- gtk_box_pack_start (GTK_BOX (dialog->priv->extra_widget),
- combo,
- TRUE,
- TRUE,
- 0);
-
- dialog->priv->newline_combo = combo;
- dialog->priv->newline_label = label;
- dialog->priv->newline_store = store;
-
- update_newline_visibility (dialog);
-}
-
-static void
-create_extra_widget (GeditFileChooserDialog *dialog)
-{
- dialog->priv->extra_widget = gtk_hbox_new (FALSE, 6);
-
- gtk_widget_show (dialog->priv->extra_widget);
-
- create_option_menu (dialog);
- create_newline_combo (dialog);
-
- gtk_file_chooser_set_extra_widget (GTK_FILE_CHOOSER (dialog),
- dialog->priv->extra_widget);
-
-}
-
-static void
-action_changed (GeditFileChooserDialog *dialog,
- GParamSpec *pspec,
- gpointer data)
-{
- GtkFileChooserAction action;
-
- action = gtk_file_chooser_get_action (GTK_FILE_CHOOSER (dialog));
-
- switch (action)
- {
- case GTK_FILE_CHOOSER_ACTION_OPEN:
- g_object_set (dialog->priv->option_menu,
- "save_mode", FALSE,
- NULL);
- gtk_widget_show (dialog->priv->option_menu);
- break;
- case GTK_FILE_CHOOSER_ACTION_SAVE:
- g_object_set (dialog->priv->option_menu,
- "save_mode", TRUE,
- NULL);
- gtk_widget_show (dialog->priv->option_menu);
- break;
- default:
- gtk_widget_hide (dialog->priv->option_menu);
- }
-
- update_newline_visibility (dialog);
-}
-
-static void
-filter_changed (GeditFileChooserDialog *dialog,
- GParamSpec *pspec,
- gpointer data)
-{
- GtkFileFilter *filter;
-
- if (!gedit_prefs_manager_active_file_filter_can_set ())
- return;
-
- filter = gtk_file_chooser_get_filter (GTK_FILE_CHOOSER (dialog));
- if (filter != NULL)
- {
- const gchar *name;
- gint id = 0;
-
- name = gtk_file_filter_get_name (filter);
- g_return_if_fail (name != NULL);
-
- if (strcmp (name, ALL_TEXT_FILES) == 0)
- id = 1;
-
- gedit_debug_message (DEBUG_COMMANDS, "Active filter: %s (%d)", name, id);
-
- gedit_prefs_manager_set_active_file_filter (id);
- }
-}
-
-/* FIXME: use globs too - Paolo (Aug. 27, 2007) */
-static gboolean
-all_text_files_filter (const GtkFileFilterInfo *filter_info,
- gpointer data)
-{
- static GSList *known_mime_types = NULL;
- GSList *mime_types;
-
- if (known_mime_types == NULL)
- {
- GtkSourceLanguageManager *lm;
- const gchar * const *languages;
-
- lm = gedit_get_language_manager ();
- languages = gtk_source_language_manager_get_language_ids (lm);
-
- while ((languages != NULL) && (*languages != NULL))
- {
- gchar **mime_types;
- gint i;
- GtkSourceLanguage *lang;
-
- lang = gtk_source_language_manager_get_language (lm, *languages);
- g_return_val_if_fail (GTK_IS_SOURCE_LANGUAGE (lang), FALSE);
- ++languages;
-
- mime_types = gtk_source_language_get_mime_types (lang);
- if (mime_types == NULL)
- continue;
-
- for (i = 0; mime_types[i] != NULL; i++)
- {
- if (!g_content_type_is_a (mime_types[i], "text/plain"))
- {
- gedit_debug_message (DEBUG_COMMANDS,
- "Mime-type %s is not related to text/plain",
- mime_types[i]);
-
- known_mime_types = g_slist_prepend (known_mime_types,
- g_strdup (mime_types[i]));
- }
- }
-
- g_strfreev (mime_types);
- }
-
- /* known_mime_types always has "text/plain" as first item" */
- known_mime_types = g_slist_prepend (known_mime_types, g_strdup ("text/plain"));
- }
-
- /* known mime_types contains "text/plain" and then the list of mime-types unrelated to "text/plain"
- * that gedit recognizes */
-
- if (filter_info->mime_type == NULL)
- return FALSE;
-
- /*
- * The filter is matching:
- * - the mime-types beginning with "text/"
- * - the mime-types inheriting from a known mime-type (note the text/plain is
- * the first known mime-type)
- */
-
- if (strncmp (filter_info->mime_type, "text/", 5) == 0)
- return TRUE;
-
- mime_types = known_mime_types;
- while (mime_types != NULL)
- {
- if (g_content_type_is_a (filter_info->mime_type, (const gchar*)mime_types->data))
- return TRUE;
-
- mime_types = g_slist_next (mime_types);
- }
-
- return FALSE;
-}
-
-static void
-gedit_file_chooser_dialog_init (GeditFileChooserDialog *dialog)
-{
- dialog->priv = GEDIT_FILE_CHOOSER_DIALOG_GET_PRIVATE (dialog);
-}
-
-static GtkWidget *
-gedit_file_chooser_dialog_new_valist (const gchar *title,
- GtkWindow *parent,
- GtkFileChooserAction action,
- const GeditEncoding *encoding,
- const gchar *first_button_text,
- va_list varargs)
-{
- GtkWidget *result;
- const char *button_text = first_button_text;
- gint response_id;
- GtkFileFilter *filter;
- gint active_filter;
-
- g_return_val_if_fail (parent != NULL, NULL);
-
- result = g_object_new (GEDIT_TYPE_FILE_CHOOSER_DIALOG,
- "title", title,
- "file-system-backend", NULL,
- "local-only", FALSE,
- "action", action,
- "select-multiple", action == GTK_FILE_CHOOSER_ACTION_OPEN,
- NULL);
-
- create_extra_widget (GEDIT_FILE_CHOOSER_DIALOG (result));
-
- g_signal_connect (result,
- "notify::action",
- G_CALLBACK (action_changed),
- NULL);
-
- if (encoding != NULL)
- gedit_encodings_combo_box_set_selected_encoding (
- GEDIT_ENCODINGS_COMBO_BOX (GEDIT_FILE_CHOOSER_DIALOG (result)->priv->option_menu),
- encoding);
-
- active_filter = gedit_prefs_manager_get_active_file_filter ();
- gedit_debug_message (DEBUG_COMMANDS, "Active filter: %d", active_filter);
-
- /* Filters */
- filter = gtk_file_filter_new ();
-
- gtk_file_filter_set_name (filter, ALL_FILES);
- gtk_file_filter_add_pattern (filter, "*");
- gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (result), filter);
-
- if (active_filter != 1)
- {
- /* Make this filter the default */
- gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (result), filter);
- }
-
- filter = gtk_file_filter_new ();
- gtk_file_filter_set_name (filter, ALL_TEXT_FILES);
- gtk_file_filter_add_custom (filter,
- GTK_FILE_FILTER_MIME_TYPE,
- all_text_files_filter,
- NULL,
- NULL);
- gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (result), filter);
-
- if (active_filter == 1)
- {
- /* Make this filter the default */
- gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (result), filter);
- }
-
- g_signal_connect (result,
- "notify::filter",
- G_CALLBACK (filter_changed),
- NULL);
-
- gtk_window_set_transient_for (GTK_WINDOW (result), parent);
- gtk_window_set_destroy_with_parent (GTK_WINDOW (result), TRUE);
-
- while (button_text)
- {
- response_id = va_arg (varargs, gint);
-
- gtk_dialog_add_button (GTK_DIALOG (result), button_text, response_id);
- if ((response_id == GTK_RESPONSE_OK) ||
- (response_id == GTK_RESPONSE_ACCEPT) ||
- (response_id == GTK_RESPONSE_YES) ||
- (response_id == GTK_RESPONSE_APPLY))
- gtk_dialog_set_default_response (GTK_DIALOG (result), response_id);
-
- button_text = va_arg (varargs, const gchar *);
- }
-
- return result;
-}
-
-/**
- * gedit_file_chooser_dialog_new:
- * @title: Title of the dialog, or %NULL
- * @parent: Transient parent of the dialog, or %NULL
- * @action: Open or save mode for the dialog
- * @first_button_text: stock ID or text to go in the first button, or %NULL
- * @Varargs: response ID for the first button, then additional (button, id) pairs, ending with %NULL
- *
- * Creates a new #GeditFileChooserDialog. This function is analogous to
- * gtk_dialog_new_with_buttons().
- *
- * Return value: a new #GeditFileChooserDialog
- *
- **/
-GtkWidget *
-gedit_file_chooser_dialog_new (const gchar *title,
- GtkWindow *parent,
- GtkFileChooserAction action,
- const GeditEncoding *encoding,
- const gchar *first_button_text,
- ...)
-{
- GtkWidget *result;
- va_list varargs;
-
- va_start (varargs, first_button_text);
- result = gedit_file_chooser_dialog_new_valist (title, parent, action,
- encoding, first_button_text,
- varargs);
- va_end (varargs);
-
- return result;
-}
-
-void
-gedit_file_chooser_dialog_set_encoding (GeditFileChooserDialog *dialog,
- const GeditEncoding *encoding)
-{
- g_return_if_fail (GEDIT_IS_FILE_CHOOSER_DIALOG (dialog));
- g_return_if_fail (GEDIT_IS_ENCODINGS_COMBO_BOX (dialog->priv->option_menu));
-
- gedit_encodings_combo_box_set_selected_encoding (
- GEDIT_ENCODINGS_COMBO_BOX (dialog->priv->option_menu),
- encoding);
-}
-
-const GeditEncoding *
-gedit_file_chooser_dialog_get_encoding (GeditFileChooserDialog *dialog)
-{
- g_return_val_if_fail (GEDIT_IS_FILE_CHOOSER_DIALOG (dialog), NULL);
- g_return_val_if_fail (GEDIT_IS_ENCODINGS_COMBO_BOX (dialog->priv->option_menu), NULL);
- g_return_val_if_fail ((gtk_file_chooser_get_action (GTK_FILE_CHOOSER (dialog)) == GTK_FILE_CHOOSER_ACTION_OPEN ||
- gtk_file_chooser_get_action (GTK_FILE_CHOOSER (dialog)) == GTK_FILE_CHOOSER_ACTION_SAVE), NULL);
-
- return gedit_encodings_combo_box_get_selected_encoding (
- GEDIT_ENCODINGS_COMBO_BOX (dialog->priv->option_menu));
-}
-
-void
-gedit_file_chooser_dialog_set_newline_type (GeditFileChooserDialog *dialog,
- GeditDocumentNewlineType newline_type)
-{
- GtkTreeIter iter;
- GtkTreeModel *model;
-
- g_return_if_fail (GEDIT_IS_FILE_CHOOSER_DIALOG (dialog));
- g_return_if_fail (gtk_file_chooser_get_action (GTK_FILE_CHOOSER (dialog)) == GTK_FILE_CHOOSER_ACTION_SAVE);
-
- model = GTK_TREE_MODEL (dialog->priv->newline_store);
-
- if (!gtk_tree_model_get_iter_first (model, &iter))
- {
- return;
- }
-
- do
- {
- GeditDocumentNewlineType nt;
-
- gtk_tree_model_get (model, &iter, 1, &nt, -1);
-
- if (newline_type == nt)
- {
- gtk_combo_box_set_active_iter (GTK_COMBO_BOX (dialog->priv->newline_combo),
- &iter);
- break;
- }
- } while (gtk_tree_model_iter_next (model, &iter));
-}
-
-GeditDocumentNewlineType
-gedit_file_chooser_dialog_get_newline_type (GeditFileChooserDialog *dialog)
-{
- GtkTreeIter iter;
- GeditDocumentNewlineType newline_type;
-
- g_return_val_if_fail (GEDIT_IS_FILE_CHOOSER_DIALOG (dialog), GEDIT_DOCUMENT_NEWLINE_TYPE_DEFAULT);
- g_return_val_if_fail (gtk_file_chooser_get_action (GTK_FILE_CHOOSER (dialog)) == GTK_FILE_CHOOSER_ACTION_SAVE,
- GEDIT_DOCUMENT_NEWLINE_TYPE_DEFAULT);
-
- gtk_combo_box_get_active_iter (GTK_COMBO_BOX (dialog->priv->newline_combo),
- &iter);
-
- gtk_tree_model_get (GTK_TREE_MODEL (dialog->priv->newline_store),
- &iter,
- 1,
- &newline_type,
- -1);
-
- return newline_type;
-}
diff --git a/gedit/gedit-file-chooser-dialog.h b/gedit/gedit-file-chooser-dialog.h
deleted file mode 100755
index 090045c5..00000000
--- a/gedit/gedit-file-chooser-dialog.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * gedit-file-chooser-dialog.h
- * This file is part of gedit
- *
- * Copyright (C) 2005 - Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifndef __GEDIT_FILE_CHOOSER_DIALOG_H__
-#define __GEDIT_FILE_CHOOSER_DIALOG_H__
-
-#include <gtk/gtk.h>
-
-#include <gedit/gedit-encodings.h>
-#include <gedit/gedit-enum-types.h>
-#include <gedit/gedit-document.h>
-
-G_BEGIN_DECLS
-
-#define GEDIT_TYPE_FILE_CHOOSER_DIALOG (gedit_file_chooser_dialog_get_type ())
-#define GEDIT_FILE_CHOOSER_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEDIT_TYPE_FILE_CHOOSER_DIALOG, GeditFileChooserDialog))
-#define GEDIT_FILE_CHOOSER_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEDIT_TYPE_FILE_CHOOSER_DIALOG, GeditFileChooserDialogClass))
-#define GEDIT_IS_FILE_CHOOSER_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEDIT_TYPE_FILE_CHOOSER_DIALOG))
-#define GEDIT_IS_FILE_CHOOSER_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEDIT_TYPE_FILE_CHOOSER_DIALOG))
-#define GEDIT_FILE_CHOOSER_DIALOG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEDIT_TYPE_FILE_CHOOSER_DIALOG, GeditFileChooserDialogClass))
-
-typedef struct _GeditFileChooserDialog GeditFileChooserDialog;
-typedef struct _GeditFileChooserDialogClass GeditFileChooserDialogClass;
-
-typedef struct _GeditFileChooserDialogPrivate GeditFileChooserDialogPrivate;
-
-struct _GeditFileChooserDialogClass
-{
- GtkFileChooserDialogClass parent_class;
-};
-
-struct _GeditFileChooserDialog
-{
- GtkFileChooserDialog parent_instance;
-
- GeditFileChooserDialogPrivate *priv;
-};
-
-GType gedit_file_chooser_dialog_get_type (void) G_GNUC_CONST;
-
-GtkWidget *gedit_file_chooser_dialog_new (const gchar *title,
- GtkWindow *parent,
- GtkFileChooserAction action,
- const GeditEncoding *encoding,
- const gchar *first_button_text,
- ...);
-
-void gedit_file_chooser_dialog_set_encoding (GeditFileChooserDialog *dialog,
- const GeditEncoding *encoding);
-
-const GeditEncoding
- *gedit_file_chooser_dialog_get_encoding (GeditFileChooserDialog *dialog);
-
-void gedit_file_chooser_dialog_set_newline_type (GeditFileChooserDialog *dialog,
- GeditDocumentNewlineType newline_type);
-
-GeditDocumentNewlineType
- gedit_file_chooser_dialog_get_newline_type (GeditFileChooserDialog *dialog);
-
-G_END_DECLS
-
-#endif /* __GEDIT_FILE_CHOOSER_DIALOG_H__ */
diff --git a/gedit/gedit-gio-document-loader.c b/gedit/gedit-gio-document-loader.c
deleted file mode 100755
index 73cfe113..00000000
--- a/gedit/gedit-gio-document-loader.c
+++ /dev/null
@@ -1,708 +0,0 @@
-/*
- * gedit-gio-document-loader.c
- * This file is part of gedit
- *
- * Copyright (C) 2005 - Paolo Maggi
- * Copyright (C) 2007 - Paolo Maggi, Steve Frécinaux
- * Copyright (C) 2008 - Jesse van den Kieboom
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2005-2008. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <glib/gi18n.h>
-#include <glib/gstdio.h>
-#include <gio/gio.h>
-
-#include "gedit-gio-document-loader.h"
-#include "gedit-document-output-stream.h"
-#include "gedit-smart-charset-converter.h"
-#include "gedit-prefs-manager.h"
-#include "gedit-debug.h"
-#include "gedit-utils.h"
-
-#ifndef ENABLE_GVFS_METADATA
-#include "gedit-metadata-manager.h"
-#endif
-
-typedef struct
-{
- GeditGioDocumentLoader *loader;
- GCancellable *cancellable;
-
- gssize read;
- gboolean tried_mount;
-} AsyncData;
-
-#define READ_CHUNK_SIZE 8192
-#define REMOTE_QUERY_ATTRIBUTES G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE "," \
- G_FILE_ATTRIBUTE_STANDARD_TYPE "," \
- G_FILE_ATTRIBUTE_TIME_MODIFIED "," \
- G_FILE_ATTRIBUTE_STANDARD_SIZE "," \
- G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE "," \
- GEDIT_METADATA_ATTRIBUTE_ENCODING
-
-#define GEDIT_GIO_DOCUMENT_LOADER_GET_PRIVATE(object) \
- (G_TYPE_INSTANCE_GET_PRIVATE ((object), \
- GEDIT_TYPE_GIO_DOCUMENT_LOADER, \
- GeditGioDocumentLoaderPrivate))
-
-static void gedit_gio_document_loader_load (GeditDocumentLoader *loader);
-static gboolean gedit_gio_document_loader_cancel (GeditDocumentLoader *loader);
-static goffset gedit_gio_document_loader_get_bytes_read (GeditDocumentLoader *loader);
-
-static void open_async_read (AsyncData *async);
-
-struct _GeditGioDocumentLoaderPrivate
-{
- /* Info on the current file */
- GFile *gfile;
-
- goffset bytes_read;
-
- /* Handle for remote files */
- GCancellable *cancellable;
- GInputStream *stream;
- GOutputStream *output;
- GeditSmartCharsetConverter *converter;
-
- gchar buffer[READ_CHUNK_SIZE];
-
- GError *error;
-};
-
-G_DEFINE_TYPE(GeditGioDocumentLoader, gedit_gio_document_loader, GEDIT_TYPE_DOCUMENT_LOADER)
-
-static void
-gedit_gio_document_loader_dispose (GObject *object)
-{
- GeditGioDocumentLoaderPrivate *priv;
-
- priv = GEDIT_GIO_DOCUMENT_LOADER (object)->priv;
-
- if (priv->cancellable != NULL)
- {
- g_cancellable_cancel (priv->cancellable);
- g_object_unref (priv->cancellable);
- priv->cancellable = NULL;
- }
-
- if (priv->stream != NULL)
- {
- g_object_unref (priv->stream);
- priv->stream = NULL;
- }
-
- if (priv->output != NULL)
- {
- g_object_unref (priv->output);
- priv->output = NULL;
- }
-
- if (priv->converter != NULL)
- {
- g_object_unref (priv->converter);
- priv->converter = NULL;
- }
-
- if (priv->gfile != NULL)
- {
- g_object_unref (priv->gfile);
- priv->gfile = NULL;
- }
-
- if (priv->error != NULL)
- {
- g_error_free (priv->error);
- priv->error = NULL;
- }
-
- G_OBJECT_CLASS (gedit_gio_document_loader_parent_class)->dispose (object);
-}
-
-static void
-gedit_gio_document_loader_class_init (GeditGioDocumentLoaderClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- GeditDocumentLoaderClass *loader_class = GEDIT_DOCUMENT_LOADER_CLASS (klass);
-
- object_class->dispose = gedit_gio_document_loader_dispose;
-
- loader_class->load = gedit_gio_document_loader_load;
- loader_class->cancel = gedit_gio_document_loader_cancel;
- loader_class->get_bytes_read = gedit_gio_document_loader_get_bytes_read;
-
- g_type_class_add_private (object_class, sizeof(GeditGioDocumentLoaderPrivate));
-}
-
-static void
-gedit_gio_document_loader_init (GeditGioDocumentLoader *gvloader)
-{
- gvloader->priv = GEDIT_GIO_DOCUMENT_LOADER_GET_PRIVATE (gvloader);
-
- gvloader->priv->converter = NULL;
- gvloader->priv->error = NULL;
-}
-
-static AsyncData *
-async_data_new (GeditGioDocumentLoader *gvloader)
-{
- AsyncData *async;
-
- async = g_slice_new (AsyncData);
- async->loader = gvloader;
- async->cancellable = g_object_ref (gvloader->priv->cancellable);
- async->tried_mount = FALSE;
-
- return async;
-}
-
-static void
-async_data_free (AsyncData *async)
-{
- g_object_unref (async->cancellable);
- g_slice_free (AsyncData, async);
-}
-
-static const GeditEncoding *
-get_metadata_encoding (GeditDocumentLoader *loader)
-{
- const GeditEncoding *enc = NULL;
-
-#ifndef ENABLE_GVFS_METADATA
- gchar *charset;
- const gchar *uri;
-
- uri = gedit_document_loader_get_uri (loader);
-
- charset = gedit_metadata_manager_get (uri, "encoding");
-
- if (charset == NULL)
- return NULL;
-
- enc = gedit_encoding_get_from_charset (charset);
-
- g_free (charset);
-#else
- GFileInfo *info;
-
- info = gedit_document_loader_get_info (loader);
-
- /* check if the encoding was set in the metadata */
- if (g_file_info_has_attribute (info, GEDIT_METADATA_ATTRIBUTE_ENCODING))
- {
- const gchar *charset;
-
- charset = g_file_info_get_attribute_string (info,
- GEDIT_METADATA_ATTRIBUTE_ENCODING);
-
- if (charset == NULL)
- return NULL;
-
- enc = gedit_encoding_get_from_charset (charset);
- }
-#endif
-
- return enc;
-}
-
-static void
-remote_load_completed_or_failed (GeditGioDocumentLoader *loader, AsyncData *async)
-{
- gedit_document_loader_loading (GEDIT_DOCUMENT_LOADER (loader),
- TRUE,
- loader->priv->error);
-
- if (async)
- async_data_free (async);
-}
-
-static void
-async_failed (AsyncData *async, GError *error)
-{
- g_propagate_error (&async->loader->priv->error, error);
- remote_load_completed_or_failed (async->loader, async);
-}
-
-static void
-close_input_stream_ready_cb (GInputStream *stream,
- GAsyncResult *res,
- AsyncData *async)
-{
- GError *error = NULL;
-
- gedit_debug (DEBUG_LOADER);
-
- /* check cancelled state manually */
- if (g_cancellable_is_cancelled (async->cancellable))
- {
- async_data_free (async);
- return;
- }
-
- gedit_debug_message (DEBUG_SAVER, "Finished closing input stream");
-
- if (!g_input_stream_close_finish (stream, res, &error))
- {
- gedit_debug_message (DEBUG_SAVER, "Closing input stream error: %s", error->message);
-
- async_failed (async, error);
- return;
- }
-
- gedit_debug_message (DEBUG_SAVER, "Close output stream");
- if (!g_output_stream_close (async->loader->priv->output,
- async->cancellable, &error))
- {
- async_failed (async, error);
- return;
- }
-
- remote_load_completed_or_failed (async->loader, async);
-}
-
-static void
-write_complete (AsyncData *async)
-{
- GeditDocumentLoader *loader;
-
- loader = GEDIT_DOCUMENT_LOADER (async->loader);
-
- if (async->loader->priv->stream)
- g_input_stream_close_async (G_INPUT_STREAM (async->loader->priv->stream),
- G_PRIORITY_HIGH,
- async->cancellable,
- (GAsyncReadyCallback)close_input_stream_ready_cb,
- async);
-}
-
-/* prototype, because they call each other... isn't C lovely */
-static void read_file_chunk (AsyncData *async);
-
-static void
-write_file_chunk (AsyncData *async)
-{
- GeditGioDocumentLoader *gvloader;
- gssize bytes_written;
- GError *error = NULL;
-
- gvloader = async->loader;
-
- /* we use sync methods on doc stream since it is in memory. Using async
- would be racy and we can endup with invalidated iters */
- bytes_written = g_output_stream_write (G_OUTPUT_STREAM (gvloader->priv->output),
- gvloader->priv->buffer,
- async->read,
- async->cancellable,
- &error);
-
- gedit_debug_message (DEBUG_SAVER, "Written: %" G_GSSIZE_FORMAT, bytes_written);
- if (bytes_written == -1)
- {
- gedit_debug_message (DEBUG_SAVER, "Write error: %s", error->message);
- async_failed (async, error);
- return;
- }
-
- /* note that this signal blocks the read... check if it isn't
- * a performance problem
- */
- gedit_document_loader_loading (GEDIT_DOCUMENT_LOADER (gvloader),
- FALSE,
- NULL);
-
- read_file_chunk (async);
-}
-
-static void
-async_read_cb (GInputStream *stream,
- GAsyncResult *res,
- AsyncData *async)
-{
- gedit_debug (DEBUG_LOADER);
- GeditGioDocumentLoader *gvloader;
- GError *error = NULL;
-
- gedit_debug (DEBUG_LOADER);
-
- /* manually check cancelled state */
- if (g_cancellable_is_cancelled (async->cancellable))
- {
- async_data_free (async);
- return;
- }
-
- gvloader = async->loader;
-
- async->read = g_input_stream_read_finish (stream, res, &error);
-
- /* error occurred */
- if (async->read == -1)
- {
- async_failed (async, error);
- return;
- }
-
- /* Check for the extremely unlikely case where the file size overflows. */
- if (gvloader->priv->bytes_read + async->read < gvloader->priv->bytes_read)
- {
- g_set_error (&gvloader->priv->error,
- GEDIT_DOCUMENT_ERROR,
- GEDIT_DOCUMENT_ERROR_TOO_BIG,
- "File too big");
-
- async_failed (async, gvloader->priv->error);
- return;
- }
-
- /* Bump the size. */
- gvloader->priv->bytes_read += async->read;
-
- /* end of the file, we are done! */
- if (async->read == 0)
- {
- GeditDocumentLoader *loader;
-
- loader = GEDIT_DOCUMENT_LOADER (gvloader);
-
- loader->auto_detected_encoding =
- gedit_smart_charset_converter_get_guessed (gvloader->priv->converter);
-
- loader->auto_detected_newline_type =
- gedit_document_output_stream_detect_newline_type (GEDIT_DOCUMENT_OUTPUT_STREAM (gvloader->priv->output));
-
- /* Check if we needed some fallback char, if so, check if there was
- a previous error and if not set a fallback used error */
- /* FIXME Uncomment this when we want to manage conversion fallback */
- /*if ((gedit_smart_charset_converter_get_num_fallbacks (gvloader->priv->converter) != 0) &&
- gvloader->priv->error == NULL)
- {
- g_set_error_literal (&gvloader->priv->error,
- GEDIT_DOCUMENT_ERROR,
- GEDIT_DOCUMENT_ERROR_CONVERSION_FALLBACK,
- "There was a conversion error and it was "
- "needed to use a fallback char");
- }*/
-
- write_complete (async);
-
- return;
- }
-
- write_file_chunk (async);
-}
-
-static void
-read_file_chunk (AsyncData *async)
-{
- GeditGioDocumentLoader *gvloader;
-
- gvloader = async->loader;
-
- g_input_stream_read_async (G_INPUT_STREAM (gvloader->priv->stream),
- gvloader->priv->buffer,
- READ_CHUNK_SIZE,
- G_PRIORITY_HIGH,
- async->cancellable,
- (GAsyncReadyCallback) async_read_cb,
- async);
-}
-
-static GSList *
-get_candidate_encodings (GeditGioDocumentLoader *gvloader)
-{
- const GeditEncoding *metadata;
- GSList *encodings = NULL;
-
- encodings = gedit_prefs_manager_get_auto_detected_encodings ();
-
- metadata = get_metadata_encoding (GEDIT_DOCUMENT_LOADER (gvloader));
- if (metadata != NULL)
- {
- encodings = g_slist_prepend (encodings, (gpointer)metadata);
- }
-
- return encodings;
-}
-
-static void
-finish_query_info (AsyncData *async)
-{
- GeditGioDocumentLoader *gvloader;
- GeditDocumentLoader *loader;
- GInputStream *conv_stream;
- GFileInfo *info;
- GSList *candidate_encodings;
-
- gvloader = async->loader;
- loader = GEDIT_DOCUMENT_LOADER (gvloader);
- info = loader->info;
-
- /* if it's not a regular file, error out... */
- if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_STANDARD_TYPE) &&
- g_file_info_get_file_type (info) != G_FILE_TYPE_REGULAR)
- {
- g_set_error (&gvloader->priv->error,
- G_IO_ERROR,
- G_IO_ERROR_NOT_REGULAR_FILE,
- "Not a regular file");
-
- remote_load_completed_or_failed (gvloader, async);
-
- return;
- }
-
- /* Get the candidate encodings */
- if (loader->encoding == NULL)
- {
- candidate_encodings = get_candidate_encodings (gvloader);
- }
- else
- {
- candidate_encodings = g_slist_prepend (NULL, (gpointer) loader->encoding);
- }
-
- gvloader->priv->converter = gedit_smart_charset_converter_new (candidate_encodings);
- g_slist_free (candidate_encodings);
-
- conv_stream = g_converter_input_stream_new (gvloader->priv->stream,
- G_CONVERTER (gvloader->priv->converter));
- g_object_unref (gvloader->priv->stream);
-
- gvloader->priv->stream = conv_stream;
-
- /* Output stream */
- gvloader->priv->output = gedit_document_output_stream_new (loader->document);
-
- /* start reading */
- read_file_chunk (async);
-}
-
-static void
-query_info_cb (GFile *source,
- GAsyncResult *res,
- AsyncData *async)
-{
- GeditGioDocumentLoader *gvloader;
- GFileInfo *info;
- GError *error = NULL;
-
- gedit_debug (DEBUG_LOADER);
-
- /* manually check the cancelled state */
- if (g_cancellable_is_cancelled (async->cancellable))
- {
- async_data_free (async);
- return;
- }
-
- gvloader = async->loader;
-
- /* finish the info query */
- info = g_file_query_info_finish (gvloader->priv->gfile,
- res,
- &error);
-
- if (info == NULL)
- {
- /* propagate the error and clean up */
- async_failed (async, error);
- return;
- }
-
- GEDIT_DOCUMENT_LOADER (gvloader)->info = info;
-
- finish_query_info (async);
-}
-
-static void
-mount_ready_callback (GFile *file,
- GAsyncResult *res,
- AsyncData *async)
-{
- GError *error = NULL;
- gboolean mounted;
-
- gedit_debug (DEBUG_LOADER);
-
- /* manual check for cancelled state */
- if (g_cancellable_is_cancelled (async->cancellable))
- {
- async_data_free (async);
- return;
- }
-
- mounted = g_file_mount_enclosing_volume_finish (file, res, &error);
-
- if (!mounted)
- {
- async_failed (async, error);
- }
- else
- {
- /* try again to open the file for reading */
- open_async_read (async);
- }
-}
-
-static void
-recover_not_mounted (AsyncData *async)
-{
- GeditDocument *doc;
- GMountOperation *mount_operation;
-
- gedit_debug (DEBUG_LOADER);
-
- doc = gedit_document_loader_get_document (GEDIT_DOCUMENT_LOADER (async->loader));
- mount_operation = _gedit_document_create_mount_operation (doc);
-
- async->tried_mount = TRUE;
- g_file_mount_enclosing_volume (async->loader->priv->gfile,
- G_MOUNT_MOUNT_NONE,
- mount_operation,
- async->cancellable,
- (GAsyncReadyCallback) mount_ready_callback,
- async);
-
- g_object_unref (mount_operation);
-}
-
-static void
-async_read_ready_callback (GObject *source,
- GAsyncResult *res,
- AsyncData *async)
-{
- GError *error = NULL;
- GeditGioDocumentLoader *gvloader;
-
- gedit_debug (DEBUG_LOADER);
-
- /* manual check for cancelled state */
- if (g_cancellable_is_cancelled (async->cancellable))
- {
- async_data_free (async);
- return;
- }
-
- gvloader = async->loader;
-
- gvloader->priv->stream = G_INPUT_STREAM (g_file_read_finish (gvloader->priv->gfile,
- res, &error));
-
- if (!gvloader->priv->stream)
- {
- if (error->code == G_IO_ERROR_NOT_MOUNTED && !async->tried_mount)
- {
- recover_not_mounted (async);
- g_error_free (error);
- return;
- }
-
- /* Propagate error */
- g_propagate_error (&gvloader->priv->error, error);
- gedit_document_loader_loading (GEDIT_DOCUMENT_LOADER (gvloader),
- TRUE,
- gvloader->priv->error);
-
- async_data_free (async);
- return;
- }
-
- /* get the file info: note we cannot use
- * g_file_input_stream_query_info_async since it is not able to get the
- * content type etc, beside it is not supported by gvfs.
- * Using the file instead of the stream is slightly racy, but for
- * loading this is not too bad...
- */
- g_file_query_info_async (gvloader->priv->gfile,
- REMOTE_QUERY_ATTRIBUTES,
- G_FILE_QUERY_INFO_NONE,
- G_PRIORITY_HIGH,
- async->cancellable,
- (GAsyncReadyCallback) query_info_cb,
- async);
-}
-
-static void
-open_async_read (AsyncData *async)
-{
- g_file_read_async (async->loader->priv->gfile,
- G_PRIORITY_HIGH,
- async->cancellable,
- (GAsyncReadyCallback) async_read_ready_callback,
- async);
-}
-
-static void
-gedit_gio_document_loader_load (GeditDocumentLoader *loader)
-{
- GeditGioDocumentLoader *gvloader = GEDIT_GIO_DOCUMENT_LOADER (loader);
- AsyncData *async;
-
- gedit_debug (DEBUG_LOADER);
-
- /* make sure no load operation is currently running */
- g_return_if_fail (gvloader->priv->cancellable == NULL);
-
- gvloader->priv->gfile = g_file_new_for_uri (loader->uri);
-
- /* loading start */
- gedit_document_loader_loading (GEDIT_DOCUMENT_LOADER (gvloader),
- FALSE,
- NULL);
-
- gvloader->priv->cancellable = g_cancellable_new ();
- async = async_data_new (gvloader);
-
- open_async_read (async);
-}
-
-static goffset
-gedit_gio_document_loader_get_bytes_read (GeditDocumentLoader *loader)
-{
- return GEDIT_GIO_DOCUMENT_LOADER (loader)->priv->bytes_read;
-}
-
-static gboolean
-gedit_gio_document_loader_cancel (GeditDocumentLoader *loader)
-{
- GeditGioDocumentLoader *gvloader = GEDIT_GIO_DOCUMENT_LOADER (loader);
-
- if (gvloader->priv->cancellable == NULL)
- return FALSE;
-
- g_cancellable_cancel (gvloader->priv->cancellable);
-
- g_set_error (&gvloader->priv->error,
- G_IO_ERROR,
- G_IO_ERROR_CANCELLED,
- "Operation cancelled");
-
- remote_load_completed_or_failed (gvloader, NULL);
-
- return TRUE;
-}
diff --git a/gedit/gedit-gio-document-loader.h b/gedit/gedit-gio-document-loader.h
deleted file mode 100755
index 78c9e8ad..00000000
--- a/gedit/gedit-gio-document-loader.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * gedit-gio-document-loader.h
- * This file is part of gedit
- *
- * Copyright (C) 2005 - Paolo Maggi
- * Copyright (C) 2007 - Paolo Maggi, Steve Frécinaux
- * Copyright (C) 2008 - Jesse van den Kieboom
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2005-2008. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifndef __GEDIT_GIO_DOCUMENT_LOADER_H__
-#define __GEDIT_GIO_DOCUMENT_LOADER_H__
-
-#include <gedit/gedit-document.h>
-#include "gedit-document-loader.h"
-
-G_BEGIN_DECLS
-
-/*
- * Type checking and casting macros
- */
-#define GEDIT_TYPE_GIO_DOCUMENT_LOADER (gedit_gio_document_loader_get_type())
-#define GEDIT_GIO_DOCUMENT_LOADER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GEDIT_TYPE_GIO_DOCUMENT_LOADER, GeditGioDocumentLoader))
-#define GEDIT_GIO_DOCUMENT_LOADER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GEDIT_TYPE_GIO_DOCUMENT_LOADER, GeditGioDocumentLoaderClass))
-#define GEDIT_IS_GIO_DOCUMENT_LOADER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GEDIT_TYPE_GIO_DOCUMENT_LOADER))
-#define GEDIT_IS_GIO_DOCUMENT_LOADER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEDIT_TYPE_GIO_DOCUMENT_LOADER))
-#define GEDIT_GIO_DOCUMENT_LOADER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GEDIT_TYPE_GIO_DOCUMENT_LOADER, GeditGioDocumentLoaderClass))
-
-/* Private structure type */
-typedef struct _GeditGioDocumentLoaderPrivate GeditGioDocumentLoaderPrivate;
-
-/*
- * Main object structure
- */
-typedef struct _GeditGioDocumentLoader GeditGioDocumentLoader;
-
-struct _GeditGioDocumentLoader
-{
- GeditDocumentLoader loader;
-
- /*< private > */
- GeditGioDocumentLoaderPrivate *priv;
-};
-
-/*
- * Class definition
- */
-typedef GeditDocumentLoaderClass GeditGioDocumentLoaderClass;
-
-/*
- * Public methods
- */
-GType gedit_gio_document_loader_get_type (void) G_GNUC_CONST;
-
-G_END_DECLS
-
-#endif /* __GEDIT_GIO_DOCUMENT_LOADER_H__ */
diff --git a/gedit/gedit-gio-document-saver.c b/gedit/gedit-gio-document-saver.c
deleted file mode 100755
index f1f63b62..00000000
--- a/gedit/gedit-gio-document-saver.c
+++ /dev/null
@@ -1,775 +0,0 @@
-/*
- * gedit-gio-document-saver.c
- * This file is part of gedit
- *
- * Copyright (C) 2005-2006 - Paolo Borelli and Paolo Maggi
- * Copyright (C) 2007 - Paolo Borelli, Paolo Maggi, Steve Frécinaux
- * Copyright (C) 2008 - Jesse van den Kieboom
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2005-2006. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <glib/gi18n.h>
-#include <glib.h>
-#include <gio/gio.h>
-#include <string.h>
-
-#include "gedit-gio-document-saver.h"
-#include "gedit-document-input-stream.h"
-#include "gedit-debug.h"
-
-#define WRITE_CHUNK_SIZE 8192
-
-typedef struct
-{
- GeditGioDocumentSaver *saver;
- gchar buffer[WRITE_CHUNK_SIZE];
- GCancellable *cancellable;
- gboolean tried_mount;
- gssize written;
- gssize read;
- GError *error;
-} AsyncData;
-
-#define REMOTE_QUERY_ATTRIBUTES G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE "," \
- G_FILE_ATTRIBUTE_TIME_MODIFIED
-
-#define GEDIT_GIO_DOCUMENT_SAVER_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), \
- GEDIT_TYPE_GIO_DOCUMENT_SAVER, \
- GeditGioDocumentSaverPrivate))
-
-static void gedit_gio_document_saver_save (GeditDocumentSaver *saver,
- GTimeVal *old_mtime);
-static goffset gedit_gio_document_saver_get_file_size (GeditDocumentSaver *saver);
-static goffset gedit_gio_document_saver_get_bytes_written (GeditDocumentSaver *saver);
-
-
-static void check_modified_async (AsyncData *async);
-
-struct _GeditGioDocumentSaverPrivate
-{
- GTimeVal old_mtime;
-
- goffset size;
- goffset bytes_written;
-
- GFile *gfile;
- GCancellable *cancellable;
- GOutputStream *stream;
- GInputStream *input;
-
- GError *error;
-};
-
-G_DEFINE_TYPE(GeditGioDocumentSaver, gedit_gio_document_saver, GEDIT_TYPE_DOCUMENT_SAVER)
-
-static void
-gedit_gio_document_saver_dispose (GObject *object)
-{
- GeditGioDocumentSaverPrivate *priv = GEDIT_GIO_DOCUMENT_SAVER (object)->priv;
-
- if (priv->cancellable != NULL)
- {
- g_cancellable_cancel (priv->cancellable);
- g_object_unref (priv->cancellable);
- priv->cancellable = NULL;
- }
-
- if (priv->gfile != NULL)
- {
- g_object_unref (priv->gfile);
- priv->gfile = NULL;
- }
-
- if (priv->error != NULL)
- {
- g_error_free (priv->error);
- priv->error = NULL;
- }
-
- if (priv->stream != NULL)
- {
- g_object_unref (priv->stream);
- priv->stream = NULL;
- }
-
- if (priv->input != NULL)
- {
- g_object_unref (priv->input);
- priv->input = NULL;
- }
-
- G_OBJECT_CLASS (gedit_gio_document_saver_parent_class)->dispose (object);
-}
-
-static AsyncData *
-async_data_new (GeditGioDocumentSaver *gvsaver)
-{
- AsyncData *async;
-
- async = g_slice_new (AsyncData);
- async->saver = gvsaver;
- async->cancellable = g_object_ref (gvsaver->priv->cancellable);
-
- async->tried_mount = FALSE;
- async->written = 0;
- async->read = 0;
-
- async->error = NULL;
-
- return async;
-}
-
-static void
-async_data_free (AsyncData *async)
-{
- g_object_unref (async->cancellable);
-
- if (async->error)
- {
- g_error_free (async->error);
- }
-
- g_slice_free (AsyncData, async);
-}
-
-static void
-gedit_gio_document_saver_class_init (GeditGioDocumentSaverClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- GeditDocumentSaverClass *saver_class = GEDIT_DOCUMENT_SAVER_CLASS (klass);
-
- object_class->dispose = gedit_gio_document_saver_dispose;
-
- saver_class->save = gedit_gio_document_saver_save;
- saver_class->get_file_size = gedit_gio_document_saver_get_file_size;
- saver_class->get_bytes_written = gedit_gio_document_saver_get_bytes_written;
-
- g_type_class_add_private (object_class, sizeof(GeditGioDocumentSaverPrivate));
-}
-
-static void
-gedit_gio_document_saver_init (GeditGioDocumentSaver *gvsaver)
-{
- gvsaver->priv = GEDIT_GIO_DOCUMENT_SAVER_GET_PRIVATE (gvsaver);
-
- gvsaver->priv->cancellable = g_cancellable_new ();
- gvsaver->priv->error = NULL;
-}
-
-static void
-remote_save_completed_or_failed (GeditGioDocumentSaver *gvsaver,
- AsyncData *async)
-{
- gedit_document_saver_saving (GEDIT_DOCUMENT_SAVER (gvsaver),
- TRUE,
- gvsaver->priv->error);
-
- if (async)
- async_data_free (async);
-}
-
-static void
-async_failed (AsyncData *async,
- GError *error)
-{
- g_propagate_error (&async->saver->priv->error, error);
- remote_save_completed_or_failed (async->saver, async);
-}
-
-/* BEGIN NOTE:
- *
- * This fixes an issue in GOutputStream that applies the atomic replace
- * save strategy. The stream moves the written file to the original file
- * when the stream is closed. However, there is no way currently to tell
- * the stream that the save should be aborted (there could be a
- * conversion error). The patch explicitly closes the output stream
- * in all these cases with a GCancellable in the cancelled state, causing
- * the output stream to close, but not move the file. This makes use
- * of an implementation detail in the local gio file stream and should be
- * properly fixed by adding the appropriate API in gio. Until then, at least
- * we prevent data corruption for now.
- *
- * Relevant bug reports:
- *
- * Bug 615110 - write file ignore encoding errors (gedit)
- * https://bugzilla.mate.org/show_bug.cgi?id=615110
- *
- * Bug 602412 - g_file_replace does not restore original file when there is
- * errors while writing (glib/gio)
- * https://bugzilla.mate.org/show_bug.cgi?id=602412
- */
-static void
-cancel_output_stream_ready_cb (GOutputStream *stream,
- GAsyncResult *result,
- AsyncData *async)
-{
- GError *error;
-
- g_output_stream_close_finish (stream, result, NULL);
-
- /* check cancelled state manually */
- if (g_cancellable_is_cancelled (async->cancellable) || async->error == NULL)
- {
- async_data_free (async);
- return;
- }
-
- error = async->error;
- async->error = NULL;
-
- async_failed (async, error);
-}
-
-static void
-cancel_output_stream (AsyncData *async)
-{
- GCancellable *cancellable;
-
- gedit_debug_message (DEBUG_SAVER, "Cancel output stream");
-
- cancellable = g_cancellable_new ();
- g_cancellable_cancel (cancellable);
-
- g_output_stream_close_async (async->saver->priv->stream,
- G_PRIORITY_HIGH,
- cancellable,
- (GAsyncReadyCallback)cancel_output_stream_ready_cb,
- async);
-
- g_object_unref (cancellable);
-}
-
-static void
-cancel_output_stream_and_fail (AsyncData *async,
- GError *error)
-{
-
- gedit_debug_message (DEBUG_SAVER, "Cancel output stream and fail");
-
- g_propagate_error (&async->error, error);
- cancel_output_stream (async);
-}
-
-/*
- * END NOTE
- */
-
-static void
-remote_get_info_cb (GFile *source,
- GAsyncResult *res,
- AsyncData *async)
-{
- GeditGioDocumentSaver *saver;
- GFileInfo *info;
- GError *error = NULL;
-
- gedit_debug (DEBUG_SAVER);
-
- /* check cancelled state manually */
- if (g_cancellable_is_cancelled (async->cancellable))
- {
- async_data_free (async);
- return;
- }
-
- saver = async->saver;
-
- gedit_debug_message (DEBUG_SAVER, "Finished query info on file");
- info = g_file_query_info_finish (source, res, &error);
-
- if (info != NULL)
- {
- if (GEDIT_DOCUMENT_SAVER (saver)->info != NULL)
- g_object_unref (GEDIT_DOCUMENT_SAVER (saver)->info);
-
- GEDIT_DOCUMENT_SAVER (saver)->info = info;
- }
- else
- {
- gedit_debug_message (DEBUG_SAVER, "Query info failed: %s", error->message);
- g_propagate_error (&saver->priv->error, error);
- }
-
- remote_save_completed_or_failed (saver, async);
-}
-
-static void
-close_async_ready_get_info_cb (GOutputStream *stream,
- GAsyncResult *res,
- AsyncData *async)
-{
- GError *error = NULL;
-
- gedit_debug (DEBUG_SAVER);
-
- /* check cancelled state manually */
- if (g_cancellable_is_cancelled (async->cancellable))
- {
- async_data_free (async);
- return;
- }
-
- gedit_debug_message (DEBUG_SAVER, "Finished closing stream");
-
- if (!g_output_stream_close_finish (stream, res, &error))
- {
- gedit_debug_message (DEBUG_SAVER, "Closing stream error: %s", error->message);
-
- async_failed (async, error);
- return;
- }
-
- /* get the file info: note we cannot use
- * g_file_output_stream_query_info_async since it is not able to get the
- * content type etc, beside it is not supported by gvfs.
- * I'm not sure this is actually necessary, can't we just use
- * g_content_type_guess (since we have the file name and the data)
- */
- gedit_debug_message (DEBUG_SAVER, "Query info on file");
- g_file_query_info_async (async->saver->priv->gfile,
- REMOTE_QUERY_ATTRIBUTES,
- G_FILE_QUERY_INFO_NONE,
- G_PRIORITY_HIGH,
- async->cancellable,
- (GAsyncReadyCallback) remote_get_info_cb,
- async);
-}
-
-static void
-write_complete (AsyncData *async)
-{
- GError *error = NULL;
-
- /* first we close the input stream */
- gedit_debug_message (DEBUG_SAVER, "Close input stream");
- if (!g_input_stream_close (async->saver->priv->input,
- async->cancellable, &error))
- {
- gedit_debug_message (DEBUG_SAVER, "Closing input stream error: %s", error->message);
- cancel_output_stream_and_fail (async, error);
- return;
- }
-
- /* now we close the output stream */
- gedit_debug_message (DEBUG_SAVER, "Close output stream");
- g_output_stream_close_async (async->saver->priv->stream,
- G_PRIORITY_HIGH,
- async->cancellable,
- (GAsyncReadyCallback)close_async_ready_get_info_cb,
- async);
-}
-
-/* prototype, because they call each other... isn't C lovely */
-static void read_file_chunk (AsyncData *async);
-static void write_file_chunk (AsyncData *async);
-
-static void
-async_write_cb (GOutputStream *stream,
- GAsyncResult *res,
- AsyncData *async)
-{
- GeditGioDocumentSaver *gvsaver;
- gssize bytes_written;
- GError *error = NULL;
-
- gedit_debug (DEBUG_SAVER);
-
- /* Check cancelled state manually */
- if (g_cancellable_is_cancelled (async->cancellable))
- {
- cancel_output_stream (async);
- return;
- }
-
- bytes_written = g_output_stream_write_finish (stream, res, &error);
-
- gedit_debug_message (DEBUG_SAVER, "Written: %" G_GSSIZE_FORMAT, bytes_written);
-
- if (bytes_written == -1)
- {
- gedit_debug_message (DEBUG_SAVER, "Write error: %s", error->message);
- cancel_output_stream_and_fail (async, error);
- return;
- }
-
- gvsaver = async->saver;
- async->written += bytes_written;
-
- /* write again */
- if (async->written != async->read)
- {
- write_file_chunk (async);
- return;
- }
-
- /* note that this signal blocks the write... check if it isn't
- * a performance problem
- */
- gedit_document_saver_saving (GEDIT_DOCUMENT_SAVER (gvsaver),
- FALSE,
- NULL);
-
- read_file_chunk (async);
-}
-
-static void
-write_file_chunk (AsyncData *async)
-{
- GeditGioDocumentSaver *gvsaver;
-
- gedit_debug (DEBUG_SAVER);
-
- gvsaver = async->saver;
-
- g_output_stream_write_async (G_OUTPUT_STREAM (gvsaver->priv->stream),
- async->buffer + async->written,
- async->read - async->written,
- G_PRIORITY_HIGH,
- async->cancellable,
- (GAsyncReadyCallback) async_write_cb,
- async);
-}
-
-static void
-read_file_chunk (AsyncData *async)
-{
- GeditGioDocumentSaver *gvsaver;
- GeditDocumentInputStream *dstream;
- GError *error = NULL;
-
- gedit_debug (DEBUG_SAVER);
-
- gvsaver = async->saver;
- async->written = 0;
-
- /* we use sync methods on doc stream since it is in memory. Using async
- would be racy and we can endup with invalidated iters */
- async->read = g_input_stream_read (gvsaver->priv->input,
- async->buffer,
- WRITE_CHUNK_SIZE,
- async->cancellable,
- &error);
-
- if (error != NULL)
- {
- cancel_output_stream_and_fail (async, error);
- return;
- }
-
- /* Check if we finished reading and writing */
- if (async->read == 0)
- {
- write_complete (async);
- return;
- }
-
- /* Get how many chars have been read */
- dstream = GEDIT_DOCUMENT_INPUT_STREAM (gvsaver->priv->input);
- gvsaver->priv->bytes_written = gedit_document_input_stream_tell (dstream);
-
- write_file_chunk (async);
-}
-
-static void
-async_replace_ready_callback (GFile *source,
- GAsyncResult *res,
- AsyncData *async)
-{
- GeditGioDocumentSaver *gvsaver;
- GeditDocumentSaver *saver;
- GCharsetConverter *converter;
- GFileOutputStream *file_stream;
- GError *error = NULL;
-
- gedit_debug (DEBUG_SAVER);
-
- /* Check cancelled state manually */
- if (g_cancellable_is_cancelled (async->cancellable))
- {
- async_data_free (async);
- return;
- }
-
- gvsaver = async->saver;
- saver = GEDIT_DOCUMENT_SAVER (gvsaver);
- file_stream = g_file_replace_finish (source, res, &error);
-
- /* handle any error that might occur */
- if (!file_stream)
- {
- gedit_debug_message (DEBUG_SAVER, "Opening file failed: %s", error->message);
- async_failed (async, error);
- return;
- }
-
- /* FIXME: manage converter error? */
- gedit_debug_message (DEBUG_SAVER, "Encoding charset: %s",
- gedit_encoding_get_charset (saver->encoding));
-
- if (saver->encoding != gedit_encoding_get_utf8 ())
- {
- converter = g_charset_converter_new (gedit_encoding_get_charset (saver->encoding),
- "UTF-8",
- NULL);
- gvsaver->priv->stream = g_converter_output_stream_new (G_OUTPUT_STREAM (file_stream),
- G_CONVERTER (converter));
-
- g_object_unref (file_stream);
- g_object_unref (converter);
- }
- else
- {
- gvsaver->priv->stream = G_OUTPUT_STREAM (file_stream);
- }
-
- gvsaver->priv->input = gedit_document_input_stream_new (GTK_TEXT_BUFFER (saver->document),
- saver->newline_type);
-
- gvsaver->priv->size = gedit_document_input_stream_get_total_size (GEDIT_DOCUMENT_INPUT_STREAM (gvsaver->priv->input));
-
- read_file_chunk (async);
-}
-
-static void
-begin_write (AsyncData *async)
-{
- GeditGioDocumentSaver *gvsaver;
- GeditDocumentSaver *saver;
- gboolean backup;
-
- gedit_debug_message (DEBUG_SAVER, "Start replacing file contents");
-
- /* For remote files we simply use g_file_replace_async. There is no
- * backup as of yet
- */
- gvsaver = async->saver;
- saver = GEDIT_DOCUMENT_SAVER (gvsaver);
-
- /* Do not make backups for remote files so they do not clutter remote systems */
- backup = (saver->keep_backup && gedit_document_is_local (saver->document));
-
- gedit_debug_message (DEBUG_SAVER, "File contents size: %" G_GINT64_FORMAT, gvsaver->priv->size);
- gedit_debug_message (DEBUG_SAVER, "Calling replace_async");
- gedit_debug_message (DEBUG_SAVER, backup ? "Keep backup" : "Discard backup");
-
- g_file_replace_async (gvsaver->priv->gfile,
- NULL,
- backup,
- G_FILE_CREATE_NONE,
- G_PRIORITY_HIGH,
- async->cancellable,
- (GAsyncReadyCallback) async_replace_ready_callback,
- async);
-}
-
-static void
-mount_ready_callback (GFile *file,
- GAsyncResult *res,
- AsyncData *async)
-{
- GError *error = NULL;
- gboolean mounted;
-
- gedit_debug (DEBUG_SAVER);
-
- /* manual check for cancelled state */
- if (g_cancellable_is_cancelled (async->cancellable))
- {
- async_data_free (async);
- return;
- }
-
- mounted = g_file_mount_enclosing_volume_finish (file, res, &error);
-
- if (!mounted)
- {
- async_failed (async, error);
- }
- else
- {
- /* try again to get the modified state */
- check_modified_async (async);
- }
-}
-
-static void
-recover_not_mounted (AsyncData *async)
-{
- GeditDocument *doc;
- GMountOperation *mount_operation;
-
- gedit_debug (DEBUG_LOADER);
-
- doc = gedit_document_saver_get_document (GEDIT_DOCUMENT_SAVER (async->saver));
- mount_operation = _gedit_document_create_mount_operation (doc);
-
- async->tried_mount = TRUE;
- g_file_mount_enclosing_volume (async->saver->priv->gfile,
- G_MOUNT_MOUNT_NONE,
- mount_operation,
- async->cancellable,
- (GAsyncReadyCallback) mount_ready_callback,
- async);
-
- g_object_unref (mount_operation);
-}
-
-static void
-check_modification_callback (GFile *source,
- GAsyncResult *res,
- AsyncData *async)
-{
- GeditGioDocumentSaver *gvsaver;
- GError *error = NULL;
- GFileInfo *info;
-
- gedit_debug (DEBUG_SAVER);
-
- /* manually check cancelled state */
- if (g_cancellable_is_cancelled (async->cancellable))
- {
- async_data_free (async);
- return;
- }
-
- gvsaver = async->saver;
- info = g_file_query_info_finish (source, res, &error);
- if (info == NULL)
- {
- if (error->code == G_IO_ERROR_NOT_MOUNTED && !async->tried_mount)
- {
- recover_not_mounted (async);
- g_error_free (error);
- return;
- }
-
- /* it's perfectly fine if the file doesn't exist yet */
- if (error->code != G_IO_ERROR_NOT_FOUND)
- {
- gedit_debug_message (DEBUG_SAVER, "Error getting modification: %s", error->message);
-
- async_failed (async, error);
- return;
- }
- }
-
- /* check if the mtime is > what we know about it (if we have it) */
- if (info != NULL && g_file_info_has_attribute (info,
- G_FILE_ATTRIBUTE_TIME_MODIFIED))
- {
- GTimeVal mtime;
- GTimeVal old_mtime;
-
- g_file_info_get_modification_time (info, &mtime);
- old_mtime = gvsaver->priv->old_mtime;
-
- if ((old_mtime.tv_sec > 0 || old_mtime.tv_usec > 0) &&
- (mtime.tv_sec != old_mtime.tv_sec || mtime.tv_usec != old_mtime.tv_usec) &&
- (GEDIT_DOCUMENT_SAVER (gvsaver)->flags & GEDIT_DOCUMENT_SAVE_IGNORE_MTIME) == 0)
- {
- gedit_debug_message (DEBUG_SAVER, "File is externally modified");
- g_set_error (&gvsaver->priv->error,
- GEDIT_DOCUMENT_ERROR,
- GEDIT_DOCUMENT_ERROR_EXTERNALLY_MODIFIED,
- "Externally modified");
-
- remote_save_completed_or_failed (gvsaver, async);
- g_object_unref (info);
-
- return;
- }
- }
-
- if (info != NULL)
- g_object_unref (info);
-
- /* modification check passed, start write */
- begin_write (async);
-}
-
-static void
-check_modified_async (AsyncData *async)
-{
- gedit_debug_message (DEBUG_SAVER, "Check externally modified");
-
- g_file_query_info_async (async->saver->priv->gfile,
- G_FILE_ATTRIBUTE_TIME_MODIFIED,
- G_FILE_QUERY_INFO_NONE,
- G_PRIORITY_HIGH,
- async->cancellable,
- (GAsyncReadyCallback) check_modification_callback,
- async);
-}
-
-static gboolean
-save_remote_file_real (GeditGioDocumentSaver *gvsaver)
-{
- AsyncData *async;
-
- gedit_debug_message (DEBUG_SAVER, "Starting gio save");
-
- /* First find out if the file is modified externally. This requires
- * a stat, but I don't think we can do this any other way
- */
- async = async_data_new (gvsaver);
-
- check_modified_async (async);
-
- /* return false to stop timeout */
- return FALSE;
-}
-
-static void
-gedit_gio_document_saver_save (GeditDocumentSaver *saver,
- GTimeVal *old_mtime)
-{
- GeditGioDocumentSaver *gvsaver = GEDIT_GIO_DOCUMENT_SAVER (saver);
-
- gvsaver->priv->old_mtime = *old_mtime;
- gvsaver->priv->gfile = g_file_new_for_uri (saver->uri);
-
- /* saving start */
- gedit_document_saver_saving (saver, FALSE, NULL);
-
- g_timeout_add_full (G_PRIORITY_HIGH,
- 0,
- (GSourceFunc) save_remote_file_real,
- gvsaver,
- NULL);
-}
-
-static goffset
-gedit_gio_document_saver_get_file_size (GeditDocumentSaver *saver)
-{
- return GEDIT_GIO_DOCUMENT_SAVER (saver)->priv->size;
-}
-
-static goffset
-gedit_gio_document_saver_get_bytes_written (GeditDocumentSaver *saver)
-{
- return GEDIT_GIO_DOCUMENT_SAVER (saver)->priv->bytes_written;
-}
diff --git a/gedit/gedit-gio-document-saver.h b/gedit/gedit-gio-document-saver.h
deleted file mode 100755
index 18e05df1..00000000
--- a/gedit/gedit-gio-document-saver.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * gedit-gio-document-saver.h
- * This file is part of gedit
- *
- * Copyright (C) 2005 - Paolo Maggi
- * Copyrhing (C) 2007 - Paolo Maggi, Steve Frécinaux
- * Copyright (C) 2008 - Jesse van den Kieboom
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2005-2007. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- */
-
-#ifndef __GEDIT_GIO_DOCUMENT_SAVER_H__
-#define __GEDIT_GIO_DOCUMENT_SAVER_H__
-
-#include <gedit/gedit-document-saver.h>
-
-G_BEGIN_DECLS
-
-/*
- * Type checking and casting macros
- */
-#define GEDIT_TYPE_GIO_DOCUMENT_SAVER (gedit_gio_document_saver_get_type())
-#define GEDIT_GIO_DOCUMENT_SAVER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GEDIT_TYPE_GIO_DOCUMENT_SAVER, GeditGioDocumentSaver))
-#define GEDIT_GIO_DOCUMENT_SAVER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GEDIT_TYPE_GIO_DOCUMENT_SAVER, GeditGioDocumentSaverClass))
-#define GEDIT_IS_GIO_DOCUMENT_SAVER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GEDIT_TYPE_GIO_DOCUMENT_SAVER))
-#define GEDIT_IS_GIO_DOCUMENT_SAVER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEDIT_TYPE_GIO_DOCUMENT_SAVER))
-#define GEDIT_GIO_DOCUMENT_SAVER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GEDIT_TYPE_GIO_DOCUMENT_SAVER, GeditGioDocumentSaverClass))
-
-/* Private structure type */
-typedef struct _GeditGioDocumentSaverPrivate GeditGioDocumentSaverPrivate;
-
-/*
- * Main object structure
- */
-typedef struct _GeditGioDocumentSaver GeditGioDocumentSaver;
-
-struct _GeditGioDocumentSaver
-{
- GeditDocumentSaver saver;
-
- /*< private > */
- GeditGioDocumentSaverPrivate *priv;
-};
-
-/*
- * Class definition
- */
-typedef GeditDocumentSaverClass GeditGioDocumentSaverClass;
-
-/*
- * Public methods
- */
-GType gedit_gio_document_saver_get_type (void) G_GNUC_CONST;
-
-G_END_DECLS
-
-#endif /* __GEDIT_GIO_DOCUMENT_SAVER_H__ */
diff --git a/gedit/gedit-help.c b/gedit/gedit-help.c
deleted file mode 100755
index 8ddf6a96..00000000
--- a/gedit/gedit-help.c
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * gedit-help.c
- * This file is part of gedit
- *
- * Copyright (C) 2005 - Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "gedit-help.h"
-
-#include <glib/gi18n.h>
-#include <string.h>
-#include <gtk/gtk.h>
-
-#ifdef OS_OSX
-#include "osx/gedit-osx.h"
-#endif
-
-gboolean
-gedit_help_display (GtkWindow *parent,
- const gchar *name, /* "gedit" if NULL */
- const gchar *link_id)
-{
- GError *error = NULL;
- gboolean ret;
- gchar *link;
-
- g_return_val_if_fail ((parent == NULL) || GTK_IS_WINDOW (parent), FALSE);
-
-#ifdef OS_OSX
- if (name == NULL || strcmp(name, "gedit.xml") == NULL || strcmp(name, "gedit") == 0)
- {
- return gedit_osx_show_help (link_id);
- }
- else
- {
- return FALSE;
- }
-#endif
-
- if (name == NULL)
- name = "gedit";
- else if (strcmp (name, "gedit.xml") == 0)
- {
- g_warning ("%s: Using \"gedit.xml\" for the help name is deprecated, use \"gedit\" or simply NULL instead", G_STRFUNC);
-
- name = "gedit";
- }
-
-#ifndef G_OS_WIN32
- if (link_id)
- link = g_strdup_printf ("ghelp:%s?%s", name, link_id);
- else
- link = g_strdup_printf ("ghelp:%s", name);
-#else
- if (link_id)
- link = g_strdup_printf ("http://library.mate.org/users/gedit/stable/%s",
- link_id);
- else
- link = g_strdup ("http://library.mate.org/users/gedit/stable/");
-#endif
-
- ret = gtk_show_uri (gtk_widget_get_screen (GTK_WIDGET (parent)),
- link,
- GDK_CURRENT_TIME,
- &error);
-
- g_free (link);
-
- if (error != NULL)
- {
- GtkWidget *dialog;
-
- dialog = gtk_message_dialog_new (parent,
- GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_MESSAGE_ERROR,
- GTK_BUTTONS_CLOSE,
- _("There was an error displaying the help."));
-
- gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
- "%s", error->message);
-
- g_signal_connect (G_OBJECT (dialog),
- "response",
- G_CALLBACK (gtk_widget_destroy),
- NULL);
-
- gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE);
-
- gtk_widget_show (dialog);
-
- g_error_free (error);
- }
-
- return ret;
-}
diff --git a/gedit/gedit-help.h b/gedit/gedit-help.h
deleted file mode 100755
index ae59afdc..00000000
--- a/gedit/gedit-help.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * gedit-help.h
- * This file is part of gedit
- *
- * Copyright (C) 2005 - Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifndef __GEDIT_HELP_H__
-#define __GEDIT_HELP_H__
-
-#include <gtk/gtk.h>
-
-G_BEGIN_DECLS
-
-gboolean gedit_help_display (GtkWindow *parent,
- const gchar *name, /* "gedit" if NULL */
- const gchar *link_id);
-
-G_END_DECLS
-
-#endif /* __GEDIT_HELP_H__ */
diff --git a/gedit/gedit-history-entry.c b/gedit/gedit-history-entry.c
deleted file mode 100755
index 999d4097..00000000
--- a/gedit/gedit-history-entry.c
+++ /dev/null
@@ -1,632 +0,0 @@
-/*
- * gedit-history-entry.c
- * This file is part of gedit
- *
- * Copyright (C) 2006 - Paolo Borelli
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2006. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <string.h>
-#include <glib/gi18n.h>
-#include <gtk/gtk.h>
-#include <mateconf/mateconf-client.h>
-
-#include "gedit-history-entry.h"
-
-enum {
- PROP_0,
- PROP_HISTORY_ID,
- PROP_HISTORY_LENGTH
-};
-
-#define MIN_ITEM_LEN 3
-
-#define GEDIT_HISTORY_ENTRY_HISTORY_LENGTH_DEFAULT 10
-
-#define GEDIT_HISTORY_ENTRY_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), \
- GEDIT_TYPE_HISTORY_ENTRY, \
- GeditHistoryEntryPrivate))
-
-struct _GeditHistoryEntryPrivate
-{
- gchar *history_id;
- guint history_length;
-
- GtkEntryCompletion *completion;
-
- MateConfClient *mateconf_client;
-};
-
-G_DEFINE_TYPE(GeditHistoryEntry, gedit_history_entry, GTK_TYPE_COMBO_BOX_ENTRY)
-
-static void
-gedit_history_entry_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *spec)
-{
- GeditHistoryEntry *entry;
-
- g_return_if_fail (GEDIT_IS_HISTORY_ENTRY (object));
-
- entry = GEDIT_HISTORY_ENTRY (object);
-
- switch (prop_id) {
- case PROP_HISTORY_ID:
- entry->priv->history_id = g_value_dup_string (value);
- break;
- case PROP_HISTORY_LENGTH:
- gedit_history_entry_set_history_length (entry,
- g_value_get_uint (value));
- break;
- default:
- break;
- }
-}
-
-static void
-gedit_history_entry_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *spec)
-{
- GeditHistoryEntryPrivate *priv;
-
- g_return_if_fail (GEDIT_IS_HISTORY_ENTRY (object));
-
- priv = GEDIT_HISTORY_ENTRY (object)->priv;
-
- switch (prop_id) {
- case PROP_HISTORY_ID:
- g_value_set_string (value, priv->history_id);
- break;
- case PROP_HISTORY_LENGTH:
- g_value_set_uint (value, priv->history_length);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, spec);
- }
-}
-
-static void
-gedit_history_entry_destroy (GtkObject *object)
-{
- gedit_history_entry_set_enable_completion (GEDIT_HISTORY_ENTRY (object),
- FALSE);
-
- GTK_OBJECT_CLASS (gedit_history_entry_parent_class)->destroy (object);
-}
-
-static void
-gedit_history_entry_finalize (GObject *object)
-{
- GeditHistoryEntryPrivate *priv;
-
- priv = GEDIT_HISTORY_ENTRY (object)->priv;
-
- g_free (priv->history_id);
-
- if (priv->mateconf_client != NULL)
- {
- g_object_unref (G_OBJECT (priv->mateconf_client));
- priv->mateconf_client = NULL;
- }
-
- G_OBJECT_CLASS (gedit_history_entry_parent_class)->finalize (object);
-}
-
-static void
-gedit_history_entry_class_init (GeditHistoryEntryClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- GtkObjectClass *gtkobject_class = GTK_OBJECT_CLASS (klass);
-
- object_class->set_property = gedit_history_entry_set_property;
- object_class->get_property = gedit_history_entry_get_property;
- object_class->finalize = gedit_history_entry_finalize;
- gtkobject_class->destroy = gedit_history_entry_destroy;
-
- g_object_class_install_property (object_class,
- PROP_HISTORY_ID,
- g_param_spec_string ("history-id",
- "History ID",
- "History ID",
- NULL,
- G_PARAM_READWRITE |
- G_PARAM_STATIC_STRINGS));
-
- g_object_class_install_property (object_class,
- PROP_HISTORY_LENGTH,
- g_param_spec_uint ("history-length",
- "Max History Length",
- "Max History Length",
- 0,
- G_MAXUINT,
- GEDIT_HISTORY_ENTRY_HISTORY_LENGTH_DEFAULT,
- G_PARAM_READWRITE |
- G_PARAM_STATIC_STRINGS));
-
- /* TODO: Add enable-completion property */
-
- g_type_class_add_private (object_class, sizeof(GeditHistoryEntryPrivate));
-}
-
-static GtkListStore *
-get_history_store (GeditHistoryEntry *entry)
-{
- GtkTreeModel *store;
-
- store = gtk_combo_box_get_model (GTK_COMBO_BOX (entry));
- g_return_val_if_fail (GTK_IS_LIST_STORE (store), NULL);
-
- return (GtkListStore *) store;
-}
-
-static char *
-get_history_key (GeditHistoryEntry *entry)
-{
- gchar *tmp;
- gchar *key;
-
- /*
- * We store the data under /apps/mate-settings/
- * like the old MateEntry did. Maybe we should
- * consider moving it to the /gedit MateConf prefix...
- * Or maybe we should just switch away from MateConf.
- */
-
- tmp = mateconf_escape_key (entry->priv->history_id, -1);
- key = g_strconcat ("/apps/mate-settings/",
- "gedit",
- "/history-",
- tmp,
- NULL);
- g_free (tmp);
-
- return key;
-}
-
-static GSList *
-get_history_list (GeditHistoryEntry *entry)
-{
- GtkListStore *store;
- GtkTreeIter iter;
- gboolean valid;
- GSList *list = NULL;
-
- store = get_history_store (entry);
-
- valid = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store),
- &iter);
-
- while (valid)
- {
- gchar *str;
-
- gtk_tree_model_get (GTK_TREE_MODEL (store),
- &iter,
- 0, &str,
- -1);
-
- list = g_slist_prepend (list, str);
-
- valid = gtk_tree_model_iter_next (GTK_TREE_MODEL (store),
- &iter);
- }
-
- return g_slist_reverse (list);
-}
-
-static void
-gedit_history_entry_save_history (GeditHistoryEntry *entry)
-{
- GSList *mateconf_items;
- gchar *key;
-
- g_return_if_fail (GEDIT_IS_HISTORY_ENTRY (entry));
-
- mateconf_items = get_history_list (entry);
- key = get_history_key (entry);
-
- mateconf_client_set_list (entry->priv->mateconf_client,
- key,
- MATECONF_VALUE_STRING,
- mateconf_items,
- NULL);
-
- g_slist_foreach (mateconf_items, (GFunc) g_free, NULL);
- g_slist_free (mateconf_items);
- g_free (key);
-}
-
-static gboolean
-remove_item (GtkListStore *store,
- const gchar *text)
-{
- GtkTreeIter iter;
-
- g_return_val_if_fail (text != NULL, FALSE);
-
- if (!gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter))
- return FALSE;
-
- do
- {
- gchar *item_text;
-
- gtk_tree_model_get (GTK_TREE_MODEL (store),
- &iter,
- 0,
- &item_text,
- -1);
-
- if (item_text != NULL &&
- strcmp (item_text, text) == 0)
- {
- gtk_list_store_remove (store, &iter);
- g_free (item_text);
- return TRUE;
- }
-
- g_free (item_text);
-
- } while (gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter));
-
- return FALSE;
-}
-
-static void
-clamp_list_store (GtkListStore *store,
- guint max)
-{
- GtkTreePath *path;
- GtkTreeIter iter;
-
- /* -1 because TreePath counts from 0 */
- path = gtk_tree_path_new_from_indices (max - 1, -1);
-
- if (gtk_tree_model_get_iter (GTK_TREE_MODEL (store), &iter, path))
- {
- while (1)
- {
- if (!gtk_list_store_remove (store, &iter))
- break;
- }
- }
-
- gtk_tree_path_free (path);
-}
-
-static void
-insert_history_item (GeditHistoryEntry *entry,
- const gchar *text,
- gboolean prepend)
-{
- GtkListStore *store;
- GtkTreeIter iter;
-
- if (g_utf8_strlen (text, -1) <= MIN_ITEM_LEN)
- return;
-
- store = get_history_store (entry);
-
- /* remove the text from the store if it was already
- * present. If it wasn't, clamp to max history - 1
- * before inserting the new row, otherwise appending
- * would not work */
-
- if (!remove_item (store, text))
- clamp_list_store (store,
- entry->priv->history_length - 1);
-
- if (prepend)
- gtk_list_store_insert (store, &iter, 0);
- else
- gtk_list_store_append (store, &iter);
-
- gtk_list_store_set (store,
- &iter,
- 0,
- text,
- -1);
-
- gedit_history_entry_save_history (entry);
-}
-
-void
-gedit_history_entry_prepend_text (GeditHistoryEntry *entry,
- const gchar *text)
-{
- g_return_if_fail (GEDIT_IS_HISTORY_ENTRY (entry));
- g_return_if_fail (text != NULL);
-
- insert_history_item (entry, text, TRUE);
-}
-
-void
-gedit_history_entry_append_text (GeditHistoryEntry *entry,
- const gchar *text)
-{
- g_return_if_fail (GEDIT_IS_HISTORY_ENTRY (entry));
- g_return_if_fail (text != NULL);
-
- insert_history_item (entry, text, FALSE);
-}
-
-static void
-gedit_history_entry_load_history (GeditHistoryEntry *entry)
-{
- GSList *mateconf_items, *l;
- GtkListStore *store;
- GtkTreeIter iter;
- gchar *key;
- guint i;
-
- g_return_if_fail (GEDIT_IS_HISTORY_ENTRY (entry));
-
- store = get_history_store (entry);
- key = get_history_key (entry);
-
- mateconf_items = mateconf_client_get_list (entry->priv->mateconf_client,
- key,
- MATECONF_VALUE_STRING,
- NULL);
-
- gtk_list_store_clear (store);
-
- for (l = mateconf_items, i = 0;
- l != NULL && i < entry->priv->history_length;
- l = l->next, i++)
- {
- gtk_list_store_append (store, &iter);
- gtk_list_store_set (store,
- &iter,
- 0,
- l->data,
- -1);
- }
-
- g_slist_foreach (mateconf_items, (GFunc) g_free, NULL);
- g_slist_free (mateconf_items);
- g_free (key);
-}
-
-void
-gedit_history_entry_clear (GeditHistoryEntry *entry)
-{
- GtkListStore *store;
-
- g_return_if_fail (GEDIT_IS_HISTORY_ENTRY (entry));
-
- store = get_history_store (entry);
- gtk_list_store_clear (store);
-
- gedit_history_entry_save_history (entry);
-}
-
-static void
-gedit_history_entry_init (GeditHistoryEntry *entry)
-{
- GeditHistoryEntryPrivate *priv;
-
- priv = GEDIT_HISTORY_ENTRY_GET_PRIVATE (entry);
- entry->priv = priv;
-
- priv->history_id = NULL;
- priv->history_length = GEDIT_HISTORY_ENTRY_HISTORY_LENGTH_DEFAULT;
-
- priv->completion = NULL;
-
- priv->mateconf_client = mateconf_client_get_default ();
-}
-
-void
-gedit_history_entry_set_history_length (GeditHistoryEntry *entry,
- guint history_length)
-{
- g_return_if_fail (GEDIT_IS_HISTORY_ENTRY (entry));
- g_return_if_fail (history_length > 0);
-
- entry->priv->history_length = history_length;
-
- /* TODO: update if we currently have more items than max */
-}
-
-guint
-gedit_history_entry_get_history_length (GeditHistoryEntry *entry)
-{
- g_return_val_if_fail (GEDIT_IS_HISTORY_ENTRY (entry), 0);
-
- return entry->priv->history_length;
-}
-
-gchar *
-gedit_history_entry_get_history_id (GeditHistoryEntry *entry)
-{
- g_return_val_if_fail (GEDIT_IS_HISTORY_ENTRY (entry), NULL);
-
- return g_strdup (entry->priv->history_id);
-}
-
-void
-gedit_history_entry_set_enable_completion (GeditHistoryEntry *entry,
- gboolean enable)
-{
- g_return_if_fail (GEDIT_IS_HISTORY_ENTRY (entry));
-
- if (enable)
- {
- if (entry->priv->completion != NULL)
- return;
-
- entry->priv->completion = gtk_entry_completion_new ();
- gtk_entry_completion_set_model (entry->priv->completion,
- GTK_TREE_MODEL (get_history_store (entry)));
-
- /* Use model column 0 as the text column */
- gtk_entry_completion_set_text_column (entry->priv->completion, 0);
-
- gtk_entry_completion_set_minimum_key_length (entry->priv->completion,
- MIN_ITEM_LEN);
-
- gtk_entry_completion_set_popup_completion (entry->priv->completion, FALSE);
- gtk_entry_completion_set_inline_completion (entry->priv->completion, TRUE);
-
- /* Assign the completion to the entry */
- gtk_entry_set_completion (GTK_ENTRY (gedit_history_entry_get_entry(entry)),
- entry->priv->completion);
- }
- else
- {
- if (entry->priv->completion == NULL)
- return;
-
- gtk_entry_set_completion (GTK_ENTRY (gedit_history_entry_get_entry (entry)),
- NULL);
-
- g_object_unref (entry->priv->completion);
-
- entry->priv->completion = NULL;
- }
-}
-
-gboolean
-gedit_history_entry_get_enable_completion (GeditHistoryEntry *entry)
-{
- g_return_val_if_fail (GEDIT_IS_HISTORY_ENTRY (entry), FALSE);
-
- return entry->priv->completion != NULL;
-}
-
-GtkWidget *
-gedit_history_entry_new (const gchar *history_id,
- gboolean enable_completion)
-{
- GtkWidget *ret;
- GtkListStore *store;
-
- g_return_val_if_fail (history_id != NULL, NULL);
-
- /* Note that we are setting the model, so
- * user must be careful to always manipulate
- * data in the history through gedit_history_entry_
- * functions.
- */
-
- store = gtk_list_store_new (1, G_TYPE_STRING);
-
- ret = g_object_new (GEDIT_TYPE_HISTORY_ENTRY,
- "history-id", history_id,
- "model", store,
- "text-column", 0,
- NULL);
-
- g_object_unref (store);
-
- /* loading has to happen after the model
- * has been set. However the model is not a
- * G_PARAM_CONSTRUCT property of GtkComboBox
- * so we cannot do this in the constructor.
- * For now we simply do here since this widget is
- * not bound to other programming languages.
- * A maybe better alternative is to override the
- * model property of combobox and mark CONTRUCT_ONLY.
- * This would also ensure that the model cannot be
- * set explicitely at a later time.
- */
- gedit_history_entry_load_history (GEDIT_HISTORY_ENTRY (ret));
-
- gedit_history_entry_set_enable_completion (GEDIT_HISTORY_ENTRY (ret),
- enable_completion);
-
- return ret;
-}
-
-/*
- * Utility function to get the editable text entry internal widget.
- * I would prefer to not expose this implementation detail and
- * simply make the GeditHistoryEntry widget implement the
- * GtkEditable interface. Unfortunately both GtkEditable and
- * GtkComboBox have a "changed" signal and I am not sure how to
- * handle the conflict.
- */
-GtkWidget *
-gedit_history_entry_get_entry (GeditHistoryEntry *entry)
-{
- g_return_val_if_fail (GEDIT_IS_HISTORY_ENTRY (entry), NULL);
-
- return gtk_bin_get_child (GTK_BIN (entry));
-}
-
-static void
-escape_cell_data_func (GtkTreeViewColumn *col,
- GtkCellRenderer *renderer,
- GtkTreeModel *model,
- GtkTreeIter *iter,
- GeditHistoryEntryEscapeFunc escape_func)
-{
- gchar *str;
- gchar *escaped;
-
- gtk_tree_model_get (model, iter, 0, &str, -1);
- escaped = escape_func (str);
- g_object_set (renderer, "text", escaped, NULL);
-
- g_free (str);
- g_free (escaped);
-}
-
-void
-gedit_history_entry_set_escape_func (GeditHistoryEntry *entry,
- GeditHistoryEntryEscapeFunc escape_func)
-{
- GList *cells;
-
- g_return_if_fail (GEDIT_IS_HISTORY_ENTRY (entry));
-
- cells = gtk_cell_layout_get_cells (GTK_CELL_LAYOUT (entry));
-
- /* We only have one cell renderer */
- g_return_if_fail (cells->data != NULL && cells->next == NULL);
-
- if (escape_func != NULL)
- gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (entry),
- GTK_CELL_RENDERER (cells->data),
- (GtkCellLayoutDataFunc) escape_cell_data_func,
- escape_func,
- NULL);
- else
- gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (entry),
- GTK_CELL_RENDERER (cells->data),
- NULL,
- NULL,
- NULL);
-
- g_list_free (cells);
-}
diff --git a/gedit/gedit-history-entry.h b/gedit/gedit-history-entry.h
deleted file mode 100755
index 59e810c2..00000000
--- a/gedit/gedit-history-entry.h
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * gedit-history-entry.h
- * This file is part of gedit
- *
- * Copyright (C) 2006 - Paolo Borelli
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2006. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifndef __GEDIT_HISTORY_ENTRY_H__
-#define __GEDIT_HISTORY_ENTRY_H__
-
-
-G_BEGIN_DECLS
-
-#define GEDIT_TYPE_HISTORY_ENTRY (gedit_history_entry_get_type ())
-#define GEDIT_HISTORY_ENTRY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEDIT_TYPE_HISTORY_ENTRY, GeditHistoryEntry))
-#define GEDIT_HISTORY_ENTRY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEDIT_TYPE_HISTORY_ENTRY, GeditHistoryEntryClass))
-#define GEDIT_IS_HISTORY_ENTRY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEDIT_TYPE_HISTORY_ENTRY))
-#define GEDIT_IS_HISTORY_ENTRY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEDIT_TYPE_HISTORY_ENTRY))
-#define GEDIT_HISTORY_ENTRY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEDIT_TYPE_HISTORY_ENTRY, GeditHistoryEntryClass))
-
-
-typedef struct _GeditHistoryEntry GeditHistoryEntry;
-typedef struct _GeditHistoryEntryClass GeditHistoryEntryClass;
-typedef struct _GeditHistoryEntryPrivate GeditHistoryEntryPrivate;
-
-struct _GeditHistoryEntryClass
-{
- GtkComboBoxEntryClass parent_class;
-};
-
-struct _GeditHistoryEntry
-{
- GtkComboBoxEntry parent_instance;
-
- GeditHistoryEntryPrivate *priv;
-};
-
-GType gedit_history_entry_get_type (void) G_GNUC_CONST;
-
-GtkWidget *gedit_history_entry_new (const gchar *history_id,
- gboolean enable_completion);
-
-void gedit_history_entry_prepend_text (GeditHistoryEntry *entry,
- const gchar *text);
-
-void gedit_history_entry_append_text (GeditHistoryEntry *entry,
- const gchar *text);
-
-void gedit_history_entry_clear (GeditHistoryEntry *entry);
-
-void gedit_history_entry_set_history_length (GeditHistoryEntry *entry,
- guint max_saved);
-
-guint gedit_history_entry_get_history_length (GeditHistoryEntry *gentry);
-
-gchar *gedit_history_entry_get_history_id (GeditHistoryEntry *entry);
-
-void gedit_history_entry_set_enable_completion
- (GeditHistoryEntry *entry,
- gboolean enable);
-
-gboolean gedit_history_entry_get_enable_completion
- (GeditHistoryEntry *entry);
-
-GtkWidget *gedit_history_entry_get_entry (GeditHistoryEntry *entry);
-
-typedef gchar * (* GeditHistoryEntryEscapeFunc) (const gchar *str);
-void gedit_history_entry_set_escape_func (GeditHistoryEntry *entry,
- GeditHistoryEntryEscapeFunc escape_func);
-
-G_END_DECLS
-
-#endif /* __GEDIT_HISTORY_ENTRY_H__ */
diff --git a/gedit/gedit-io-error-message-area.c b/gedit/gedit-io-error-message-area.c
deleted file mode 100755
index e116a15b..00000000
--- a/gedit/gedit-io-error-message-area.c
+++ /dev/null
@@ -1,1288 +0,0 @@
-/*
- * gedit-io-error-message-area.c
- * This file is part of gedit
- *
- * Copyright (C) 2005 - Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-/*
- * Verbose error reporting for file I/O operations (load, save, revert, create)
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <errno.h>
-#include <string.h>
-
-#include <glib/gi18n.h>
-#include <gio/gio.h>
-
-#include "gedit-utils.h"
-#include "gedit-document.h"
-#include "gedit-io-error-message-area.h"
-#include "gedit-prefs-manager.h"
-#include <gedit/gedit-encodings-combo-box.h>
-
-#if !GTK_CHECK_VERSION (2, 17, 1)
-#include "gedit-message-area.h"
-#endif
-
-#define MAX_URI_IN_DIALOG_LENGTH 50
-
-static gboolean
-is_recoverable_error (const GError *error)
-{
- gboolean is_recoverable = FALSE;
-
- if (error->domain == G_IO_ERROR)
- {
- switch (error->code) {
- case G_IO_ERROR_PERMISSION_DENIED:
- case G_IO_ERROR_NOT_FOUND:
- case G_IO_ERROR_HOST_NOT_FOUND:
- case G_IO_ERROR_TIMED_OUT:
- case G_IO_ERROR_NOT_MOUNTABLE_FILE:
- case G_IO_ERROR_NOT_MOUNTED:
- case G_IO_ERROR_BUSY:
- is_recoverable = TRUE;
- }
- }
-
- return is_recoverable;
-}
-
-static gboolean
-is_gio_error (const GError *error,
- gint code)
-{
- return error->domain == G_IO_ERROR && error->code == code;
-}
-
-static void
-set_contents (GtkWidget *area,
- GtkWidget *contents)
-{
-#if !GTK_CHECK_VERSION (2, 17, 1)
- gedit_message_area_set_contents (GEDIT_MESSAGE_AREA (area),
- contents);
-#else
- GtkWidget *content_area;
-
- content_area = gtk_info_bar_get_content_area (GTK_INFO_BAR (area));
- gtk_container_add (GTK_CONTAINER (content_area), contents);
-#endif
-}
-
-#if GTK_CHECK_VERSION (2, 17, 1)
-static void
-info_bar_add_stock_button_with_text (GtkInfoBar *infobar,
- const gchar *text,
- const gchar *stock_id,
- gint response_id)
-{
- GtkWidget *button;
- GtkWidget *image;
-
- button = gtk_info_bar_add_button (infobar, text, response_id);
- image = gtk_image_new_from_stock (stock_id, GTK_ICON_SIZE_BUTTON);
- gtk_button_set_image (GTK_BUTTON (button), image);
-}
-#endif
-
-static void
-set_message_area_text_and_icon (GtkWidget *message_area,
- const gchar *icon_stock_id,
- const gchar *primary_text,
- const gchar *secondary_text)
-{
- GtkWidget *hbox_content;
- GtkWidget *image;
- GtkWidget *vbox;
- gchar *primary_markup;
- gchar *secondary_markup;
- GtkWidget *primary_label;
- GtkWidget *secondary_label;
-
- hbox_content = gtk_hbox_new (FALSE, 8);
-
- image = gtk_image_new_from_stock (icon_stock_id, GTK_ICON_SIZE_DIALOG);
- gtk_box_pack_start (GTK_BOX (hbox_content), image, FALSE, FALSE, 0);
- gtk_misc_set_alignment (GTK_MISC (image), 0.5, 0);
-
- vbox = gtk_vbox_new (FALSE, 6);
- gtk_box_pack_start (GTK_BOX (hbox_content), vbox, TRUE, TRUE, 0);
-
- primary_markup = g_strdup_printf ("<b>%s</b>", primary_text);
- primary_label = gtk_label_new (primary_markup);
- g_free (primary_markup);
- gtk_box_pack_start (GTK_BOX (vbox), primary_label, TRUE, TRUE, 0);
- gtk_label_set_use_markup (GTK_LABEL (primary_label), TRUE);
- gtk_label_set_line_wrap (GTK_LABEL (primary_label), TRUE);
- gtk_misc_set_alignment (GTK_MISC (primary_label), 0, 0.5);
- GTK_WIDGET_SET_FLAGS (primary_label, GTK_CAN_FOCUS);
- gtk_label_set_selectable (GTK_LABEL (primary_label), TRUE);
-
- if (secondary_text != NULL)
- {
- secondary_markup = g_strdup_printf ("<small>%s</small>",
- secondary_text);
- secondary_label = gtk_label_new (secondary_markup);
- g_free (secondary_markup);
- gtk_box_pack_start (GTK_BOX (vbox), secondary_label, TRUE, TRUE, 0);
- GTK_WIDGET_SET_FLAGS (secondary_label, GTK_CAN_FOCUS);
- gtk_label_set_use_markup (GTK_LABEL (secondary_label), TRUE);
- gtk_label_set_line_wrap (GTK_LABEL (secondary_label), TRUE);
- gtk_label_set_selectable (GTK_LABEL (secondary_label), TRUE);
- gtk_misc_set_alignment (GTK_MISC (secondary_label), 0, 0.5);
- }
-
- gtk_widget_show_all (hbox_content);
- set_contents (message_area, hbox_content);
-}
-
-static GtkWidget *
-create_io_loading_error_message_area (const gchar *primary_text,
- const gchar *secondary_text,
- gboolean recoverable_error)
-{
- GtkWidget *message_area;
-
-#if !GTK_CHECK_VERSION (2, 17, 1)
- message_area = gedit_message_area_new_with_buttons (
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- NULL);
-#else
- message_area = gtk_info_bar_new_with_buttons (
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- NULL);
- gtk_info_bar_set_message_type (GTK_INFO_BAR (message_area),
- GTK_MESSAGE_ERROR);
-#endif
-
- set_message_area_text_and_icon (message_area,
- "gtk-dialog-error",
- primary_text,
- secondary_text);
-
- if (recoverable_error)
- {
-#if !GTK_CHECK_VERSION (2, 17, 1)
- gedit_message_area_add_stock_button_with_text (GEDIT_MESSAGE_AREA (message_area),
- _("_Retry"),
- GTK_STOCK_REFRESH,
- GTK_RESPONSE_OK);
-#else
- info_bar_add_stock_button_with_text (GTK_INFO_BAR (message_area),
- _("_Retry"),
- GTK_STOCK_REFRESH,
- GTK_RESPONSE_OK);
-#endif
- }
-
- return message_area;
-}
-
-static gboolean
-parse_gio_error (gint code,
- gchar **error_message,
- gchar **message_details,
- const gchar *uri,
- const gchar *uri_for_display)
-{
- gboolean ret = TRUE;
-
- switch (code)
- {
- case G_IO_ERROR_NOT_FOUND:
- case G_IO_ERROR_NOT_DIRECTORY:
- *error_message = g_strdup_printf (_("Could not find the file %s."),
- uri_for_display);
- *message_details = g_strdup (_("Please check that you typed the "
- "location correctly and try again."));
- break;
- case G_IO_ERROR_NOT_SUPPORTED:
- {
- gchar *scheme_string;
- gchar *scheme_markup;
-
- scheme_string = g_uri_parse_scheme (uri);
-
- if ((scheme_string != NULL) && g_utf8_validate (scheme_string, -1, NULL))
- {
- scheme_markup = g_markup_printf_escaped ("<i>%s:</i>", scheme_string);
-
- /* Translators: %s is a URI scheme (like for example http:, ftp:, etc.) */
- *message_details = g_strdup_printf (_("gedit cannot handle %s locations."),
- scheme_markup);
- g_free (scheme_markup);
- }
- else
- {
- *message_details = g_strdup (_("gedit cannot handle this location."));
- }
-
- g_free (scheme_string);
- }
- break;
-
- case G_IO_ERROR_NOT_MOUNTABLE_FILE:
- *message_details = g_strdup (_("The location of the file cannot be mounted."));
- break;
-
- case G_IO_ERROR_NOT_MOUNTED:
- *message_details = g_strdup( _("The location of the file cannot be accessed because it is not mounted."));
-
- break;
- case G_IO_ERROR_IS_DIRECTORY:
- *error_message = g_strdup_printf (_("%s is a directory."),
- uri_for_display);
- *message_details = g_strdup (_("Please check that you typed the "
- "location correctly and try again."));
- break;
-
- case G_IO_ERROR_INVALID_FILENAME:
- *error_message = g_strdup_printf (_("%s is not a valid location."),
- uri_for_display);
- *message_details = g_strdup (_("Please check that you typed the "
- "location correctly and try again."));
- break;
-
- case G_IO_ERROR_HOST_NOT_FOUND:
- /* This case can be hit for user-typed strings like "foo" due to
- * the code that guesses web addresses when there's no initial "/".
- * But this case is also hit for legitimate web addresses when
- * the proxy is set up wrong.
- */
- {
- gchar *hn = NULL;
-
- if (gedit_utils_decode_uri (uri, NULL, NULL, &hn, NULL, NULL))
- {
- if (hn != NULL)
- {
- gchar *host_markup;
- gchar *host_name;
-
- host_name = gedit_utils_make_valid_utf8 (hn);
- g_free (hn);
-
- host_markup = g_markup_printf_escaped ("<i>%s</i>", host_name);
- g_free (host_name);
-
- /* Translators: %s is a host name */
- *message_details = g_strdup_printf (
- _("Host %s could not be found. "
- "Please check that your proxy settings "
- "are correct and try again."),
- host_markup);
-
- g_free (host_markup);
- }
- }
-
- if (!*message_details)
- {
- /* use the same string as INVALID_HOST */
- *message_details = g_strdup_printf (
- _("Hostname was invalid. "
- "Please check that you typed the location "
- "correctly and try again."));
- }
- }
- break;
-
- case G_IO_ERROR_NOT_REGULAR_FILE:
- *message_details = g_strdup_printf (_("%s is not a regular file."),
- uri_for_display);
- break;
-
- case G_IO_ERROR_TIMED_OUT:
- *message_details = g_strdup (_("Connection timed out. Please try again."));
- break;
-
- default:
- ret = FALSE;
- break;
- }
-
- return ret;
-}
-
-static gboolean
-parse_gedit_error (gint code,
- gchar **error_message,
- gchar **message_details,
- const gchar *uri,
- const gchar *uri_for_display)
-{
- gboolean ret = TRUE;
-
- switch (code)
- {
- case GEDIT_DOCUMENT_ERROR_TOO_BIG:
- *message_details = g_strdup (_("The file is too big."));
- break;
-
- default:
- ret = FALSE;
- break;
- }
-
- return ret;
-}
-
-static void
-parse_error (const GError *error,
- gchar **error_message,
- gchar **message_details,
- const gchar *uri,
- const gchar *uri_for_display)
-{
- gboolean ret = FALSE;
-
- if (error->domain == G_IO_ERROR)
- {
- ret = parse_gio_error (error->code,
- error_message,
- message_details,
- uri,
- uri_for_display);
- }
- else if (error->domain == GEDIT_DOCUMENT_ERROR)
- {
- ret = parse_gedit_error (error->code,
- error_message,
- message_details,
- uri,
- uri_for_display);
- }
-
- if (!ret)
- {
- g_warning ("Hit unhandled case %d (%s) in %s.",
- error->code, error->message, G_STRFUNC);
- *message_details = g_strdup_printf (_("Unexpected error: %s"),
- error->message);
- }
-}
-
-GtkWidget *
-gedit_unrecoverable_reverting_error_message_area_new (const gchar *uri,
- const GError *error)
-{
- gchar *error_message = NULL;
- gchar *message_details = NULL;
- gchar *full_formatted_uri;
- gchar *uri_for_display;
- gchar *temp_uri_for_display;
- GtkWidget *message_area;
-
- g_return_val_if_fail (uri != NULL, NULL);
- g_return_val_if_fail (error != NULL, NULL);
- g_return_val_if_fail ((error->domain == GEDIT_DOCUMENT_ERROR) ||
- (error->domain == G_IO_ERROR), NULL);
-
- full_formatted_uri = gedit_utils_uri_for_display (uri);
-
- /* Truncate the URI so it doesn't get insanely wide. Note that even
- * though the dialog uses wrapped text, if the URI doesn't contain
- * white space then the text-wrapping code is too stupid to wrap it.
- */
- temp_uri_for_display = gedit_utils_str_middle_truncate (full_formatted_uri,
- MAX_URI_IN_DIALOG_LENGTH);
- g_free (full_formatted_uri);
-
- uri_for_display = g_markup_printf_escaped ("<i>%s</i>", temp_uri_for_display);
- g_free (temp_uri_for_display);
-
- if (is_gio_error (error, G_IO_ERROR_NOT_FOUND))
- {
- message_details = g_strdup (_("gedit cannot find the file. "
- "Perhaps it has recently been deleted."));
- }
- else
- {
- parse_error (error, &error_message, &message_details, uri, uri_for_display);
- }
-
- if (error_message == NULL)
- {
- error_message = g_strdup_printf (_("Could not revert the file %s."),
- uri_for_display);
- }
-
- message_area = create_io_loading_error_message_area (error_message,
- message_details,
- FALSE);
-
- g_free (uri_for_display);
- g_free (error_message);
- g_free (message_details);
-
- return message_area;
-}
-
-static void
-create_combo_box (GtkWidget *message_area, GtkWidget *vbox)
-{
- GtkWidget *hbox;
- GtkWidget *label;
- GtkWidget *menu;
- gchar *label_markup;
-
- hbox = gtk_hbox_new (FALSE, 6);
-
- label_markup = g_strdup_printf ("<small>%s</small>",
- _("Ch_aracter Encoding:"));
- label = gtk_label_new_with_mnemonic (label_markup);
- g_free (label_markup);
- gtk_label_set_use_markup (GTK_LABEL (label), TRUE);
- menu = gedit_encodings_combo_box_new (TRUE);
- g_object_set_data (G_OBJECT (message_area),
- "gedit-message-area-encoding-menu",
- menu);
-
- gtk_label_set_mnemonic_widget (GTK_LABEL (label), menu);
- gtk_box_pack_start (GTK_BOX (hbox),
- label,
- FALSE,
- FALSE,
- 0);
-
- gtk_box_pack_start (GTK_BOX (hbox),
- menu,
- FALSE,
- FALSE,
- 0);
-
- gtk_widget_show_all (hbox);
- gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 0);
-}
-
-static GtkWidget *
-create_conversion_error_message_area (const gchar *primary_text,
- const gchar *secondary_text,
- gboolean edit_anyway)
-{
- GtkWidget *message_area;
- GtkWidget *hbox_content;
- GtkWidget *image;
- GtkWidget *vbox;
- gchar *primary_markup;
- gchar *secondary_markup;
- GtkWidget *primary_label;
- GtkWidget *secondary_label;
-
-#if !GTK_CHECK_VERSION (2, 17, 1)
- message_area = gedit_message_area_new ();
-
- gedit_message_area_add_stock_button_with_text (GEDIT_MESSAGE_AREA (message_area),
- _("_Retry"),
- GTK_STOCK_REDO,
- GTK_RESPONSE_OK);
-
- if (edit_anyway)
- {
- gedit_message_area_add_button (GEDIT_MESSAGE_AREA (message_area),
- _("Edit Any_way"),
- GTK_RESPONSE_YES);
- gedit_message_area_add_button (GEDIT_MESSAGE_AREA (message_area),
- _("D_on't Edit"),
- GTK_RESPONSE_NO);
- }
- else
- {
- gedit_message_area_add_button (GEDIT_MESSAGE_AREA (message_area),
- GTK_STOCK_CANCEL,
- GTK_RESPONSE_CANCEL);
- }
-#else
- message_area = gtk_info_bar_new ();
-
- info_bar_add_stock_button_with_text (GTK_INFO_BAR (message_area),
- _("_Retry"),
- GTK_STOCK_REDO,
- GTK_RESPONSE_OK);
-
- if (edit_anyway)
- {
- gtk_info_bar_add_button (GTK_INFO_BAR (message_area),
- /* Translators: the access key chosen for this string should be
- different from other main menu access keys (Open, Edit, View...) */
- _("Edit Any_way"),
- GTK_RESPONSE_YES);
- gtk_info_bar_add_button (GTK_INFO_BAR (message_area),
- /* Translators: the access key chosen for this string should be
- different from other main menu access keys (Open, Edit, View...) */
- _("D_on't Edit"),
- GTK_RESPONSE_NO);
- gtk_info_bar_set_message_type (GTK_INFO_BAR (message_area),
- GTK_MESSAGE_WARNING);
- }
- else
- {
- gtk_info_bar_add_button (GTK_INFO_BAR (message_area),
- GTK_STOCK_CANCEL,
- GTK_RESPONSE_CANCEL);
- gtk_info_bar_set_message_type (GTK_INFO_BAR (message_area),
- GTK_MESSAGE_ERROR);
- }
-#endif
-
- hbox_content = gtk_hbox_new (FALSE, 8);
-
- image = gtk_image_new_from_stock ("gtk-dialog-error", GTK_ICON_SIZE_DIALOG);
- gtk_box_pack_start (GTK_BOX (hbox_content), image, FALSE, FALSE, 0);
- gtk_misc_set_alignment (GTK_MISC (image), 0.5, 0);
-
- vbox = gtk_vbox_new (FALSE, 6);
- gtk_box_pack_start (GTK_BOX (hbox_content), vbox, TRUE, TRUE, 0);
-
- primary_markup = g_strdup_printf ("<b>%s</b>", primary_text);
- primary_label = gtk_label_new (primary_markup);
- g_free (primary_markup);
- gtk_box_pack_start (GTK_BOX (vbox), primary_label, TRUE, TRUE, 0);
- gtk_label_set_use_markup (GTK_LABEL (primary_label), TRUE);
- gtk_label_set_line_wrap (GTK_LABEL (primary_label), TRUE);
- gtk_misc_set_alignment (GTK_MISC (primary_label), 0, 0.5);
- GTK_WIDGET_SET_FLAGS (primary_label, GTK_CAN_FOCUS);
- gtk_label_set_selectable (GTK_LABEL (primary_label), TRUE);
-
- if (secondary_text != NULL)
- {
- secondary_markup = g_strdup_printf ("<small>%s</small>",
- secondary_text);
- secondary_label = gtk_label_new (secondary_markup);
- g_free (secondary_markup);
- gtk_box_pack_start (GTK_BOX (vbox), secondary_label, TRUE, TRUE, 0);
- GTK_WIDGET_SET_FLAGS (secondary_label, GTK_CAN_FOCUS);
- gtk_label_set_use_markup (GTK_LABEL (secondary_label), TRUE);
- gtk_label_set_line_wrap (GTK_LABEL (secondary_label), TRUE);
- gtk_label_set_selectable (GTK_LABEL (secondary_label), TRUE);
- gtk_misc_set_alignment (GTK_MISC (secondary_label), 0, 0.5);
- }
-
- create_combo_box (message_area, vbox);
- gtk_widget_show_all (hbox_content);
- set_contents (message_area, hbox_content);
-
- return message_area;
-}
-
-GtkWidget *
-gedit_io_loading_error_message_area_new (const gchar *uri,
- const GeditEncoding *encoding,
- const GError *error)
-{
- gchar *error_message = NULL;
- gchar *message_details = NULL;
- gchar *full_formatted_uri;
- gchar *encoding_name;
- gchar *uri_for_display;
- gchar *temp_uri_for_display;
- GtkWidget *message_area;
- gboolean edit_anyway = FALSE;
- gboolean convert_error = FALSE;
-
- g_return_val_if_fail (uri != NULL, NULL);
- g_return_val_if_fail (error != NULL, NULL);
- g_return_val_if_fail ((error->domain == G_CONVERT_ERROR) ||
- (error->domain == GEDIT_DOCUMENT_ERROR) ||
- (error->domain == G_IO_ERROR), NULL);
-
- full_formatted_uri = gedit_utils_uri_for_display (uri);
-
- /* Truncate the URI so it doesn't get insanely wide. Note that even
- * though the dialog uses wrapped text, if the URI doesn't contain
- * white space then the text-wrapping code is too stupid to wrap it.
- */
- temp_uri_for_display = gedit_utils_str_middle_truncate (full_formatted_uri,
- MAX_URI_IN_DIALOG_LENGTH);
- g_free (full_formatted_uri);
-
- uri_for_display = g_markup_printf_escaped ("<i>%s</i>", temp_uri_for_display);
- g_free (temp_uri_for_display);
-
- if (encoding != NULL)
- encoding_name = gedit_encoding_to_string (encoding);
- else
- encoding_name = g_strdup ("UTF-8");
-
- if (is_gio_error (error, G_IO_ERROR_TOO_MANY_LINKS))
- {
- message_details = g_strdup (_("The number of followed links is limited and the actual file could not be found within this limit."));
- }
- else if (is_gio_error (error, G_IO_ERROR_PERMISSION_DENIED))
- {
- message_details = g_strdup (_("You do not have the permissions necessary to open the file."));
- }
- else if ((is_gio_error (error, G_IO_ERROR_INVALID_DATA) && encoding == NULL) ||
- (error->domain == GEDIT_DOCUMENT_ERROR &&
- error->code == GEDIT_DOCUMENT_ERROR_ENCODING_AUTO_DETECTION_FAILED))
- {
- message_details = g_strconcat (_("gedit has not been able to detect "
- "the character encoding."), "\n",
- _("Please check that you are not trying to open a binary file."), "\n",
- _("Select a character encoding from the menu and try again."), NULL);
- convert_error = TRUE;
- }
- else if (error->domain == GEDIT_DOCUMENT_ERROR &&
- error->code == GEDIT_DOCUMENT_ERROR_CONVERSION_FALLBACK)
- {
- error_message = g_strdup_printf (_("There was a problem opening the file %s."),
- uri_for_display);
- message_details = g_strconcat (_("The file you opened has some invalid characters. "
- "If you continue editing this file you could make this "
- "document useless."), "\n",
- _("You can also choose another character encoding and try again."),
- NULL);
- edit_anyway = TRUE;
- convert_error = TRUE;
- }
- else if (is_gio_error (error, G_IO_ERROR_INVALID_DATA) && encoding != NULL)
- {
- error_message = g_strdup_printf (_("Could not open the file %s using the %s character encoding."),
- uri_for_display,
- encoding_name);
- message_details = g_strconcat (_("Please check that you are not trying to open a binary file."), "\n",
- _("Select a different character encoding from the menu and try again."), NULL);
- convert_error = TRUE;
- }
- else
- {
- parse_error (error, &error_message, &message_details, uri, uri_for_display);
- }
-
- if (error_message == NULL)
- {
- error_message = g_strdup_printf (_("Could not open the file %s."),
- uri_for_display);
- }
-
- if (convert_error)
- {
- message_area = create_conversion_error_message_area (error_message,
- message_details,
- edit_anyway);
- }
- else
- {
- message_area = create_io_loading_error_message_area (error_message,
- message_details,
- is_recoverable_error (error));
- }
-
- g_free (uri_for_display);
- g_free (encoding_name);
- g_free (error_message);
- g_free (message_details);
-
- return message_area;
-}
-
-GtkWidget *
-gedit_conversion_error_while_saving_message_area_new (
- const gchar *uri,
- const GeditEncoding *encoding,
- const GError *error)
-{
- gchar *error_message = NULL;
- gchar *message_details = NULL;
- gchar *full_formatted_uri;
- gchar *encoding_name;
- gchar *uri_for_display;
- gchar *temp_uri_for_display;
- GtkWidget *message_area;
-
- g_return_val_if_fail (uri != NULL, NULL);
- g_return_val_if_fail (error != NULL, NULL);
- g_return_val_if_fail (error->domain == G_CONVERT_ERROR ||
- error->domain == G_IO_ERROR, NULL);
- g_return_val_if_fail (encoding != NULL, NULL);
-
- full_formatted_uri = gedit_utils_uri_for_display (uri);
-
- /* Truncate the URI so it doesn't get insanely wide. Note that even
- * though the dialog uses wrapped text, if the URI doesn't contain
- * white space then the text-wrapping code is too stupid to wrap it.
- */
- temp_uri_for_display = gedit_utils_str_middle_truncate (full_formatted_uri,
- MAX_URI_IN_DIALOG_LENGTH);
- g_free (full_formatted_uri);
-
- uri_for_display = g_markup_printf_escaped ("<i>%s</i>", temp_uri_for_display);
- g_free (temp_uri_for_display);
-
- encoding_name = gedit_encoding_to_string (encoding);
-
- error_message = g_strdup_printf (_("Could not save the file %s using the %s character encoding."),
- uri_for_display,
- encoding_name);
- message_details = g_strconcat (_("The document contains one or more characters that cannot be encoded "
- "using the specified character encoding."), "\n",
- _("Select a different character encoding from the menu and try again."), NULL);
-
- message_area = create_conversion_error_message_area (
- error_message,
- message_details,
- FALSE);
-
- g_free (uri_for_display);
- g_free (encoding_name);
- g_free (error_message);
- g_free (message_details);
-
- return message_area;
-}
-
-const GeditEncoding *
-gedit_conversion_error_message_area_get_encoding (GtkWidget *message_area)
-{
- gpointer menu;
-
-#if !GTK_CHECK_VERSION (2, 17, 1)
- g_return_val_if_fail (GEDIT_IS_MESSAGE_AREA (message_area), NULL);
-#else
- g_return_val_if_fail (GTK_IS_INFO_BAR (message_area), NULL);
-#endif
-
- menu = g_object_get_data (G_OBJECT (message_area),
- "gedit-message-area-encoding-menu");
- g_return_val_if_fail (menu, NULL);
-
- return gedit_encodings_combo_box_get_selected_encoding
- (GEDIT_ENCODINGS_COMBO_BOX (menu));
-}
-
-GtkWidget *
-gedit_file_already_open_warning_message_area_new (const gchar *uri)
-{
- GtkWidget *message_area;
- GtkWidget *hbox_content;
- GtkWidget *image;
- GtkWidget *vbox;
- gchar *primary_markup;
- gchar *secondary_markup;
- GtkWidget *primary_label;
- GtkWidget *secondary_label;
- gchar *primary_text;
- const gchar *secondary_text;
- gchar *full_formatted_uri;
- gchar *uri_for_display;
- gchar *temp_uri_for_display;
-
- full_formatted_uri = gedit_utils_uri_for_display (uri);
-
- /* Truncate the URI so it doesn't get insanely wide. Note that even
- * though the dialog uses wrapped text, if the URI doesn't contain
- * white space then the text-wrapping code is too stupid to wrap it.
- */
- temp_uri_for_display = gedit_utils_str_middle_truncate (full_formatted_uri,
- MAX_URI_IN_DIALOG_LENGTH);
- g_free (full_formatted_uri);
-
- uri_for_display = g_markup_printf_escaped ("<i>%s</i>", temp_uri_for_display);
- g_free (temp_uri_for_display);
-
-#if !GTK_CHECK_VERSION (2, 17, 1)
- message_area = gedit_message_area_new ();
- gedit_message_area_add_button (GEDIT_MESSAGE_AREA (message_area),
- _("Edit Any_way"),
- GTK_RESPONSE_YES);
- gedit_message_area_add_button (GEDIT_MESSAGE_AREA (message_area),
- _("D_on't Edit"),
- GTK_RESPONSE_CANCEL);
-#else
- message_area = gtk_info_bar_new ();
- gtk_info_bar_add_button (GTK_INFO_BAR (message_area),
- /* Translators: the access key chosen for this string should be
- different from other main menu access keys (Open, Edit, View...) */
- _("Edit Any_way"),
- GTK_RESPONSE_YES);
- gtk_info_bar_add_button (GTK_INFO_BAR (message_area),
- /* Translators: the access key chosen for this string should be
- different from other main menu access keys (Open, Edit, View...) */
- _("D_on't Edit"),
- GTK_RESPONSE_CANCEL);
- gtk_info_bar_set_message_type (GTK_INFO_BAR (message_area),
- GTK_MESSAGE_WARNING);
-#endif
-
- hbox_content = gtk_hbox_new (FALSE, 8);
-
- image = gtk_image_new_from_stock ("gtk-dialog-warning", GTK_ICON_SIZE_DIALOG);
- gtk_box_pack_start (GTK_BOX (hbox_content), image, FALSE, FALSE, 0);
- gtk_misc_set_alignment (GTK_MISC (image), 0.5, 0);
-
- vbox = gtk_vbox_new (FALSE, 6);
- gtk_box_pack_start (GTK_BOX (hbox_content), vbox, TRUE, TRUE, 0);
-
- primary_text = g_strdup_printf (_("This file (%s) is already open in another gedit window."), uri_for_display);
- g_free (uri_for_display);
-
- primary_markup = g_strdup_printf ("<b>%s</b>", primary_text);
- g_free (primary_text);
- primary_label = gtk_label_new (primary_markup);
- g_free (primary_markup);
- gtk_box_pack_start (GTK_BOX (vbox), primary_label, TRUE, TRUE, 0);
- gtk_label_set_use_markup (GTK_LABEL (primary_label), TRUE);
- gtk_label_set_line_wrap (GTK_LABEL (primary_label), TRUE);
- gtk_misc_set_alignment (GTK_MISC (primary_label), 0, 0.5);
- GTK_WIDGET_SET_FLAGS (primary_label, GTK_CAN_FOCUS);
- gtk_label_set_selectable (GTK_LABEL (primary_label), TRUE);
-
- secondary_text = _("gedit opened this instance of the file in a non-editable way. "
- "Do you want to edit it anyway?");
- secondary_markup = g_strdup_printf ("<small>%s</small>",
- secondary_text);
- secondary_label = gtk_label_new (secondary_markup);
- g_free (secondary_markup);
- gtk_box_pack_start (GTK_BOX (vbox), secondary_label, TRUE, TRUE, 0);
- GTK_WIDGET_SET_FLAGS (secondary_label, GTK_CAN_FOCUS);
- gtk_label_set_use_markup (GTK_LABEL (secondary_label), TRUE);
- gtk_label_set_line_wrap (GTK_LABEL (secondary_label), TRUE);
- gtk_label_set_selectable (GTK_LABEL (secondary_label), TRUE);
- gtk_misc_set_alignment (GTK_MISC (secondary_label), 0, 0.5);
-
- gtk_widget_show_all (hbox_content);
- set_contents (message_area, hbox_content);
-
- return message_area;
-}
-
-GtkWidget *
-gedit_externally_modified_saving_error_message_area_new (
- const gchar *uri,
- const GError *error)
-{
- GtkWidget *message_area;
- GtkWidget *hbox_content;
- GtkWidget *image;
- GtkWidget *vbox;
- gchar *primary_markup;
- gchar *secondary_markup;
- GtkWidget *primary_label;
- GtkWidget *secondary_label;
- gchar *primary_text;
- const gchar *secondary_text;
- gchar *full_formatted_uri;
- gchar *uri_for_display;
- gchar *temp_uri_for_display;
-
- g_return_val_if_fail (uri != NULL, NULL);
- g_return_val_if_fail (error != NULL, NULL);
- g_return_val_if_fail (error->domain == GEDIT_DOCUMENT_ERROR, NULL);
- g_return_val_if_fail (error->code == GEDIT_DOCUMENT_ERROR_EXTERNALLY_MODIFIED, NULL);
-
- full_formatted_uri = gedit_utils_uri_for_display (uri);
-
- /* Truncate the URI so it doesn't get insanely wide. Note that even
- * though the dialog uses wrapped text, if the URI doesn't contain
- * white space then the text-wrapping code is too stupid to wrap it.
- */
- temp_uri_for_display = gedit_utils_str_middle_truncate (full_formatted_uri,
- MAX_URI_IN_DIALOG_LENGTH);
- g_free (full_formatted_uri);
-
- uri_for_display = g_markup_printf_escaped ("<i>%s</i>", temp_uri_for_display);
- g_free (temp_uri_for_display);
-
-#if !GTK_CHECK_VERSION (2, 17, 1)
- message_area = gedit_message_area_new ();
- gedit_message_area_add_stock_button_with_text (GEDIT_MESSAGE_AREA (message_area),
- _("S_ave Anyway"),
- GTK_STOCK_SAVE,
- GTK_RESPONSE_YES);
- gedit_message_area_add_button (GEDIT_MESSAGE_AREA (message_area),
- _("D_on't Save"),
- GTK_RESPONSE_CANCEL);
-#else
- message_area = gtk_info_bar_new ();
-
- info_bar_add_stock_button_with_text (GTK_INFO_BAR (message_area),
- _("S_ave Anyway"),
- GTK_STOCK_SAVE,
- GTK_RESPONSE_YES);
- gtk_info_bar_add_button (GTK_INFO_BAR (message_area),
- _("D_on't Save"),
- GTK_RESPONSE_CANCEL);
- gtk_info_bar_set_message_type (GTK_INFO_BAR (message_area),
- GTK_MESSAGE_WARNING);
-#endif
-
- hbox_content = gtk_hbox_new (FALSE, 8);
-
- image = gtk_image_new_from_stock ("gtk-dialog-warning", GTK_ICON_SIZE_DIALOG);
- gtk_box_pack_start (GTK_BOX (hbox_content), image, FALSE, FALSE, 0);
- gtk_misc_set_alignment (GTK_MISC (image), 0.5, 0);
-
- vbox = gtk_vbox_new (FALSE, 6);
- gtk_box_pack_start (GTK_BOX (hbox_content), vbox, TRUE, TRUE, 0);
-
- // FIXME: review this message, it's not clear since for the user the "modification"
- // could be interpreted as the changes he made in the document. beside "reading" is
- // not accurate (since last load/save)
- primary_text = g_strdup_printf (_("The file %s has been modified since reading it."),
- uri_for_display);
- g_free (uri_for_display);
-
- primary_markup = g_strdup_printf ("<b>%s</b>", primary_text);
- g_free (primary_text);
- primary_label = gtk_label_new (primary_markup);
- g_free (primary_markup);
- gtk_box_pack_start (GTK_BOX (vbox), primary_label, TRUE, TRUE, 0);
- gtk_label_set_use_markup (GTK_LABEL (primary_label), TRUE);
- gtk_label_set_line_wrap (GTK_LABEL (primary_label), TRUE);
- gtk_misc_set_alignment (GTK_MISC (primary_label), 0, 0.5);
- GTK_WIDGET_SET_FLAGS (primary_label, GTK_CAN_FOCUS);
- gtk_label_set_selectable (GTK_LABEL (primary_label), TRUE);
-
- secondary_text = _("If you save it, all the external changes could be lost. Save it anyway?");
- secondary_markup = g_strdup_printf ("<small>%s</small>",
- secondary_text);
- secondary_label = gtk_label_new (secondary_markup);
- g_free (secondary_markup);
- gtk_box_pack_start (GTK_BOX (vbox), secondary_label, TRUE, TRUE, 0);
- GTK_WIDGET_SET_FLAGS (secondary_label, GTK_CAN_FOCUS);
- gtk_label_set_use_markup (GTK_LABEL (secondary_label), TRUE);
- gtk_label_set_line_wrap (GTK_LABEL (secondary_label), TRUE);
- gtk_label_set_selectable (GTK_LABEL (secondary_label), TRUE);
- gtk_misc_set_alignment (GTK_MISC (secondary_label), 0, 0.5);
-
- gtk_widget_show_all (hbox_content);
- set_contents (message_area, hbox_content);
-
- return message_area;
-}
-
-GtkWidget *
-gedit_no_backup_saving_error_message_area_new (const gchar *uri,
- const GError *error)
-{
- GtkWidget *message_area;
- GtkWidget *hbox_content;
- GtkWidget *image;
- GtkWidget *vbox;
- gchar *primary_markup;
- gchar *secondary_markup;
- GtkWidget *primary_label;
- GtkWidget *secondary_label;
- gchar *primary_text;
- const gchar *secondary_text;
- gchar *full_formatted_uri;
- gchar *uri_for_display;
- gchar *temp_uri_for_display;
-
- g_return_val_if_fail (uri != NULL, NULL);
- g_return_val_if_fail (error != NULL, NULL);
- g_return_val_if_fail (((error->domain == GEDIT_DOCUMENT_ERROR &&
- error->code == GEDIT_DOCUMENT_ERROR_CANT_CREATE_BACKUP) ||
- (error->domain == G_IO_ERROR &&
- error->code == G_IO_ERROR_CANT_CREATE_BACKUP)), NULL);
-
- full_formatted_uri = gedit_utils_uri_for_display (uri);
-
- /* Truncate the URI so it doesn't get insanely wide. Note that even
- * though the dialog uses wrapped text, if the URI doesn't contain
- * white space then the text-wrapping code is too stupid to wrap it.
- */
- temp_uri_for_display = gedit_utils_str_middle_truncate (full_formatted_uri,
- MAX_URI_IN_DIALOG_LENGTH);
- g_free (full_formatted_uri);
-
- uri_for_display = g_markup_printf_escaped ("<i>%s</i>", temp_uri_for_display);
- g_free (temp_uri_for_display);
-
-#if !GTK_CHECK_VERSION (2, 17, 1)
- message_area = gedit_message_area_new ();
- gedit_message_area_add_stock_button_with_text (GEDIT_MESSAGE_AREA (message_area),
- _("S_ave Anyway"),
- GTK_STOCK_SAVE,
- GTK_RESPONSE_YES);
- gedit_message_area_add_button (GEDIT_MESSAGE_AREA (message_area),
- _("D_on't Save"),
- GTK_RESPONSE_CANCEL);
-#else
- message_area = gtk_info_bar_new ();
-
- info_bar_add_stock_button_with_text (GTK_INFO_BAR (message_area),
- _("S_ave Anyway"),
- GTK_STOCK_SAVE,
- GTK_RESPONSE_YES);
- gtk_info_bar_add_button (GTK_INFO_BAR (message_area),
- _("D_on't Save"),
- GTK_RESPONSE_CANCEL);
- gtk_info_bar_set_message_type (GTK_INFO_BAR (message_area),
- GTK_MESSAGE_WARNING);
-#endif
-
- hbox_content = gtk_hbox_new (FALSE, 8);
-
- image = gtk_image_new_from_stock ("gtk-dialog-warning", GTK_ICON_SIZE_DIALOG);
- gtk_box_pack_start (GTK_BOX (hbox_content), image, FALSE, FALSE, 0);
- gtk_misc_set_alignment (GTK_MISC (image), 0.5, 0);
-
- vbox = gtk_vbox_new (FALSE, 6);
- gtk_box_pack_start (GTK_BOX (hbox_content), vbox, TRUE, TRUE, 0);
-
- // FIXME: review this messages
-
- if (gedit_prefs_manager_get_create_backup_copy ())
- primary_text = g_strdup_printf (_("Could not create a backup file while saving %s"),
- uri_for_display);
- else
- primary_text = g_strdup_printf (_("Could not create a temporary backup file while saving %s"),
- uri_for_display);
-
- g_free (uri_for_display);
-
- primary_markup = g_strdup_printf ("<b>%s</b>", primary_text);
- g_free (primary_text);
- primary_label = gtk_label_new (primary_markup);
- g_free (primary_markup);
- gtk_box_pack_start (GTK_BOX (vbox), primary_label, TRUE, TRUE, 0);
- gtk_label_set_use_markup (GTK_LABEL (primary_label), TRUE);
- gtk_label_set_line_wrap (GTK_LABEL (primary_label), TRUE);
- gtk_misc_set_alignment (GTK_MISC (primary_label), 0, 0.5);
- GTK_WIDGET_SET_FLAGS (primary_label, GTK_CAN_FOCUS);
- gtk_label_set_selectable (GTK_LABEL (primary_label), TRUE);
-
- secondary_text = _("gedit could not back up the old copy of the file before saving the new one. "
- "You can ignore this warning and save the file anyway, but if an error "
- "occurs while saving, you could lose the old copy of the file. Save anyway?");
- secondary_markup = g_strdup_printf ("<small>%s</small>",
- secondary_text);
- secondary_label = gtk_label_new (secondary_markup);
- g_free (secondary_markup);
- gtk_box_pack_start (GTK_BOX (vbox), secondary_label, TRUE, TRUE, 0);
- GTK_WIDGET_SET_FLAGS (secondary_label, GTK_CAN_FOCUS);
- gtk_label_set_use_markup (GTK_LABEL (secondary_label), TRUE);
- gtk_label_set_line_wrap (GTK_LABEL (secondary_label), TRUE);
- gtk_label_set_selectable (GTK_LABEL (secondary_label), TRUE);
- gtk_misc_set_alignment (GTK_MISC (secondary_label), 0, 0.5);
-
- gtk_widget_show_all (hbox_content);
- set_contents (message_area, hbox_content);
-
- return message_area;
-}
-
-GtkWidget *
-gedit_unrecoverable_saving_error_message_area_new (const gchar *uri,
- const GError *error)
-{
- gchar *error_message = NULL;
- gchar *message_details = NULL;
- gchar *full_formatted_uri;
- gchar *scheme_string;
- gchar *scheme_markup;
- gchar *uri_for_display;
- gchar *temp_uri_for_display;
- GtkWidget *message_area;
-
- g_return_val_if_fail (uri != NULL, NULL);
- g_return_val_if_fail (error != NULL, NULL);
- g_return_val_if_fail ((error->domain == GEDIT_DOCUMENT_ERROR) ||
- (error->domain == G_IO_ERROR), NULL);
-
- full_formatted_uri = gedit_utils_uri_for_display (uri);
-
- /* Truncate the URI so it doesn't get insanely wide. Note that even
- * though the dialog uses wrapped text, if the URI doesn't contain
- * white space then the text-wrapping code is too stupid to wrap it.
- */
- temp_uri_for_display = gedit_utils_str_middle_truncate (full_formatted_uri,
- MAX_URI_IN_DIALOG_LENGTH);
- g_free (full_formatted_uri);
-
- uri_for_display = g_markup_printf_escaped ("<i>%s</i>", temp_uri_for_display);
- g_free (temp_uri_for_display);
-
- if (is_gio_error (error, G_IO_ERROR_NOT_SUPPORTED))
- {
- scheme_string = g_uri_parse_scheme (uri);
-
- if ((scheme_string != NULL) && g_utf8_validate (scheme_string, -1, NULL))
- {
- scheme_markup = g_markup_printf_escaped ("<i>%s:</i>", scheme_string);
-
- /* Translators: %s is a URI scheme (like for example http:, ftp:, etc.) */
- message_details = g_strdup_printf (_("gedit cannot handle %s locations in write mode. "
- "Please check that you typed the "
- "location correctly and try again."),
- scheme_markup);
- g_free (scheme_markup);
- }
- else
- {
- message_details = g_strdup (_("gedit cannot handle this location in write mode. "
- "Please check that you typed the "
- "location correctly and try again."));
- }
-
- g_free (scheme_string);
- }
- else if (is_gio_error (error, G_IO_ERROR_INVALID_FILENAME))
- {
- message_details = g_strdup (_("%s is not a valid location. "
- "Please check that you typed the "
- "location correctly and try again."));
- }
- else if (is_gio_error (error, G_IO_ERROR_PERMISSION_DENIED))
- {
- message_details = g_strdup (_("You do not have the permissions necessary to save the file. "
- "Please check that you typed the "
- "location correctly and try again."));
- }
- else if (is_gio_error (error, G_IO_ERROR_NO_SPACE))
- {
- message_details = g_strdup (_("There is not enough disk space to save the file. "
- "Please free some disk space and try again."));
- }
- else if (is_gio_error (error, G_IO_ERROR_READ_ONLY))
- {
- message_details = g_strdup (_("You are trying to save the file on a read-only disk. "
- "Please check that you typed the location "
- "correctly and try again."));
- }
- else if (is_gio_error (error, G_IO_ERROR_EXISTS))
- {
- message_details = g_strdup (_("A file with the same name already exists. "
- "Please use a different name."));
- }
- else if (is_gio_error (error, G_IO_ERROR_FILENAME_TOO_LONG))
- {
- message_details = g_strdup (_("The disk where you are trying to save the file has "
- "a limitation on length of the file names. "
- "Please use a shorter name."));
- }
- else if (error->domain == GEDIT_DOCUMENT_ERROR &&
- error->code == GEDIT_DOCUMENT_ERROR_TOO_BIG)
- {
- message_details = g_strdup (_("The disk where you are trying to save the file has "
- "a limitation on file sizes. Please try saving "
- "a smaller file or saving it to a disk that does not "
- "have this limitation."));
- }
- else
- {
- parse_error (error,
- &error_message,
- &message_details,
- uri,
- uri_for_display);
- }
-
- if (error_message == NULL)
- {
- error_message = g_strdup_printf (_("Could not save the file %s."),
- uri_for_display);
- }
-
- message_area = create_io_loading_error_message_area (error_message,
- message_details,
- FALSE);
-
- g_free (uri_for_display);
- g_free (error_message);
- g_free (message_details);
-
- return message_area;
-}
-
-GtkWidget *
-gedit_externally_modified_message_area_new (const gchar *uri,
- gboolean document_modified)
-{
- gchar *full_formatted_uri;
- gchar *uri_for_display;
- gchar *temp_uri_for_display;
- const gchar *primary_text;
- const gchar *secondary_text;
- GtkWidget *message_area;
-
- g_return_val_if_fail (uri != NULL, NULL);
-
- full_formatted_uri = gedit_utils_uri_for_display (uri);
-
- /* Truncate the URI so it doesn't get insanely wide. Note that even
- * though the dialog uses wrapped text, if the URI doesn't contain
- * white space then the text-wrapping code is too stupid to wrap it.
- */
- temp_uri_for_display = gedit_utils_str_middle_truncate (full_formatted_uri,
- MAX_URI_IN_DIALOG_LENGTH);
- g_free (full_formatted_uri);
-
- uri_for_display = g_markup_printf_escaped ("<i>%s</i>", temp_uri_for_display);
- g_free (temp_uri_for_display);
-
- // FIXME: review this message, it's not clear since for the user the "modification"
- // could be interpreted as the changes he made in the document. beside "reading" is
- // not accurate (since last load/save)
- primary_text = g_strdup_printf (_("The file %s changed on disk."),
- uri_for_display);
- g_free (uri_for_display);
-
- if (document_modified)
- secondary_text = _("Do you want to drop your changes and reload the file?");
- else
- secondary_text = _("Do you want to reload the file?");
-
-#if !GTK_CHECK_VERSION (2, 17, 1)
- message_area = gedit_message_area_new ();
-
- gedit_message_area_add_stock_button_with_text (GEDIT_MESSAGE_AREA (message_area),
- _("_Reload"),
- GTK_STOCK_REFRESH,
- GTK_RESPONSE_OK);
-
- gedit_message_area_add_button (GEDIT_MESSAGE_AREA (message_area),
- GTK_STOCK_CANCEL,
- GTK_RESPONSE_CANCEL);
-#else
- message_area = gtk_info_bar_new ();
-
- info_bar_add_stock_button_with_text (GTK_INFO_BAR (message_area),
- _("_Reload"),
- GTK_STOCK_REFRESH,
- GTK_RESPONSE_OK);
- gtk_info_bar_add_button (GTK_INFO_BAR (message_area),
- GTK_STOCK_CANCEL,
- GTK_RESPONSE_CANCEL);
- gtk_info_bar_set_message_type (GTK_INFO_BAR (message_area),
- GTK_MESSAGE_WARNING);
-#endif
-
- set_message_area_text_and_icon (message_area,
- "gtk-dialog-warning",
- primary_text,
- secondary_text);
-
- return message_area;
-}
-
diff --git a/gedit/gedit-io-error-message-area.h b/gedit/gedit-io-error-message-area.h
deleted file mode 100755
index 69a4d90e..00000000
--- a/gedit/gedit-io-error-message-area.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * gedit-io-error-message-area.h
- * This file is part of gedit
- *
- * Copyright (C) 2005 - Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifndef __GEDIT_IO_ERROR_MESSAGE_AREA_H__
-#define __GEDIT_IO_ERROR_MESSAGE_AREA_H__
-
-#include <glib.h>
-
-G_BEGIN_DECLS
-
-GtkWidget *gedit_io_loading_error_message_area_new (const gchar *uri,
- const GeditEncoding *encoding,
- const GError *error);
-
-GtkWidget *gedit_unrecoverable_reverting_error_message_area_new (const gchar *uri,
- const GError *error);
-
-GtkWidget *gedit_conversion_error_while_saving_message_area_new (const gchar *uri,
- const GeditEncoding *encoding,
- const GError *error);
-
-const GeditEncoding
- *gedit_conversion_error_message_area_get_encoding (GtkWidget *message_area);
-
-GtkWidget *gedit_file_already_open_warning_message_area_new (const gchar *uri);
-
-GtkWidget *gedit_externally_modified_saving_error_message_area_new (const gchar *uri,
- const GError *error);
-
-GtkWidget *gedit_no_backup_saving_error_message_area_new (const gchar *uri,
- const GError *error);
-
-GtkWidget *gedit_unrecoverable_saving_error_message_area_new (const gchar *uri,
- const GError *error);
-
-GtkWidget *gedit_externally_modified_message_area_new (const gchar *uri,
- gboolean document_modified);
-
-G_END_DECLS
-
-#endif /* __GEDIT_IO_ERROR_MESSAGE_AREA_H__ */
diff --git a/gedit/gedit-language-manager.c b/gedit/gedit-language-manager.c
deleted file mode 100755
index a402e4a5..00000000
--- a/gedit/gedit-language-manager.c
+++ /dev/null
@@ -1,90 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * gedit-languages-manager.c
- * This file is part of gedit
- *
- * Copyright (C) 2003-2006 - Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2003-2006. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#include <string.h>
-
-#include "gedit-language-manager.h"
-#include "gedit-prefs-manager.h"
-#include "gedit-utils.h"
-#include "gedit-debug.h"
-
-static GtkSourceLanguageManager *language_manager = NULL;
-
-GtkSourceLanguageManager *
-gedit_get_language_manager (void)
-{
- if (language_manager == NULL)
- {
- language_manager = gtk_source_language_manager_new ();
- }
-
- return language_manager;
-}
-
-static gint
-language_compare (gconstpointer a, gconstpointer b)
-{
- GtkSourceLanguage *lang_a = (GtkSourceLanguage *)a;
- GtkSourceLanguage *lang_b = (GtkSourceLanguage *)b;
- const gchar *name_a = gtk_source_language_get_name (lang_a);
- const gchar *name_b = gtk_source_language_get_name (lang_b);
-
- return g_utf8_collate (name_a, name_b);
-}
-
-GSList *
-gedit_language_manager_list_languages_sorted (GtkSourceLanguageManager *lm,
- gboolean include_hidden)
-{
- GSList *languages = NULL;
- const gchar * const *ids;
-
- ids = gtk_source_language_manager_get_language_ids (lm);
- if (ids == NULL)
- return NULL;
-
- while (*ids != NULL)
- {
- GtkSourceLanguage *lang;
-
- lang = gtk_source_language_manager_get_language (lm, *ids);
- g_return_val_if_fail (GTK_IS_SOURCE_LANGUAGE (lang), NULL);
- ++ids;
-
- if (include_hidden || !gtk_source_language_get_hidden (lang))
- {
- languages = g_slist_prepend (languages, lang);
- }
- }
-
- return g_slist_sort (languages, (GCompareFunc)language_compare);
-}
-
diff --git a/gedit/gedit-language-manager.h b/gedit/gedit-language-manager.h
deleted file mode 100755
index 02438d32..00000000
--- a/gedit/gedit-language-manager.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * gedit-languages-manager.h
- * This file is part of gedit
- *
- * Copyright (C) 2003-2005 - Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2003-2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifndef __GEDIT_LANGUAGES_MANAGER_H__
-#define __GEDIT_LANGUAGES_MANAGER_H__
-
-#include <gtksourceview/gtksourcelanguagemanager.h>
-
-G_BEGIN_DECLS
-
-GtkSourceLanguageManager *gedit_get_language_manager (void);
-
-GSList *gedit_language_manager_list_languages_sorted
- (GtkSourceLanguageManager *lm,
- gboolean include_hidden);
-
-G_END_DECLS
-
-#endif /* __GEDIT_LANGUAGES_MANAGER_H__ */
diff --git a/gedit/gedit-marshal.list b/gedit/gedit-marshal.list
deleted file mode 100755
index d2882947..00000000
--- a/gedit/gedit-marshal.list
+++ /dev/null
@@ -1,13 +0,0 @@
-BOOLEAN:NONE
-BOOLEAN:OBJECT
-VOID:BOOLEAN
-VOID:BOOLEAN,POINTER
-VOID:BOXED,BOXED
-VOID:OBJECT
-VOID:POINTER
-VOID:STRING,BOXED,FLAGS
-VOID:STRING,BOXED,INT,BOOLEAN
-VOID:UINT,POINTER
-VOID:UINT64,UINT64
-VOID:VOID
-VOID:INT,INT
diff --git a/gedit/gedit-message-area.c b/gedit/gedit-message-area.c
deleted file mode 100755
index 09240515..00000000
--- a/gedit/gedit-message-area.c
+++ /dev/null
@@ -1,626 +0,0 @@
-/*
- * gedit-message-area.c
- * This file is part of gedit
- *
- * Copyright (C) 2005 - Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-/* TODO: Style properties */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <glib/gi18n.h>
-#include <gtk/gtk.h>
-#include <gdk/gdk.h>
-#include <gdk/gdkkeysyms.h>
-
-#include "gedit-message-area.h"
-
-#define GEDIT_MESSAGE_AREA_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), \
- GEDIT_TYPE_MESSAGE_AREA, \
- GeditMessageAreaPrivate))
-
-struct _GeditMessageAreaPrivate
-{
- GtkWidget *main_hbox;
-
- GtkWidget *contents;
- GtkWidget *action_area;
-
- gboolean changing_style;
-};
-
-typedef struct _ResponseData ResponseData;
-
-struct _ResponseData
-{
- gint response_id;
-};
-
-enum {
- RESPONSE,
- CLOSE,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL];
-
-G_DEFINE_TYPE(GeditMessageArea, gedit_message_area, GTK_TYPE_HBOX)
-
-
-static void
-gedit_message_area_finalize (GObject *object)
-{
- /*
- GeditMessageArea *message_area = GEDIT_MESSAGE_AREA (object);
- */
-
- G_OBJECT_CLASS (gedit_message_area_parent_class)->finalize (object);
-}
-
-static ResponseData *
-get_response_data (GtkWidget *widget,
- gboolean create)
-{
- ResponseData *ad = g_object_get_data (G_OBJECT (widget),
- "gedit-message-area-response-data");
-
- if (ad == NULL && create)
- {
- ad = g_new (ResponseData, 1);
-
- g_object_set_data_full (G_OBJECT (widget),
- "gedit-message-area-response-data",
- ad,
- g_free);
- }
-
- return ad;
-}
-
-static GtkWidget *
-find_button (GeditMessageArea *message_area,
- gint response_id)
-{
- GList *children, *tmp_list;
- GtkWidget *child = NULL;
-
- children = gtk_container_get_children (
- GTK_CONTAINER (message_area->priv->action_area));
-
- for (tmp_list = children; tmp_list; tmp_list = tmp_list->next)
- {
- ResponseData *rd = get_response_data (tmp_list->data, FALSE);
-
- if (rd && rd->response_id == response_id)
- {
- child = tmp_list->data;
- break;
- }
- }
-
- g_list_free (children);
-
- return child;
-}
-
-static void
-gedit_message_area_close (GeditMessageArea *message_area)
-{
- if (!find_button (message_area, GTK_RESPONSE_CANCEL))
- return;
-
- /* emit response signal */
- gedit_message_area_response (GEDIT_MESSAGE_AREA (message_area),
- GTK_RESPONSE_CANCEL);
-}
-
-static gboolean
-paint_message_area (GtkWidget *widget,
- GdkEventExpose *event,
- gpointer user_data)
-{
- gtk_paint_flat_box (widget->style,
- widget->window,
- GTK_STATE_NORMAL,
- GTK_SHADOW_OUT,
- NULL,
- widget,
- "tooltip",
- widget->allocation.x + 1,
- widget->allocation.y + 1,
- widget->allocation.width - 2,
- widget->allocation.height - 2);
-
- return FALSE;
-}
-
-static void
-gedit_message_area_class_init (GeditMessageAreaClass *klass)
-{
- GObjectClass *object_class;
- GtkBindingSet *binding_set;
-
- object_class = G_OBJECT_CLASS (klass);
- object_class->finalize = gedit_message_area_finalize;
-
- klass->close = gedit_message_area_close;
-
- g_type_class_add_private (object_class, sizeof(GeditMessageAreaPrivate));
-
- signals[RESPONSE] = g_signal_new ("response",
- G_OBJECT_CLASS_TYPE (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GeditMessageAreaClass, response),
- NULL, NULL,
- g_cclosure_marshal_VOID__INT,
- G_TYPE_NONE, 1,
- G_TYPE_INT);
-
- signals[CLOSE] = g_signal_new ("close",
- G_OBJECT_CLASS_TYPE (klass),
- G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
- G_STRUCT_OFFSET (GeditMessageAreaClass, close),
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
-
- binding_set = gtk_binding_set_by_class (klass);
-
- gtk_binding_entry_add_signal (binding_set, GDK_Escape, 0, "close", 0);
-}
-
-static void
-style_set (GtkWidget *widget,
- GtkStyle *prev_style,
- GeditMessageArea *message_area)
-{
- GtkWidget *window;
- GtkStyle *style;
-
- if (message_area->priv->changing_style)
- return;
-
- /* This is a hack needed to use the tooltip background color */
- window = gtk_window_new (GTK_WINDOW_POPUP);
- gtk_widget_set_name (window, "gtk-tooltip");
- gtk_widget_ensure_style (window);
- style = gtk_widget_get_style (window);
-
- message_area->priv->changing_style = TRUE;
- gtk_widget_set_style (GTK_WIDGET (message_area), style);
- message_area->priv->changing_style = FALSE;
-
- gtk_widget_destroy (window);
-
- gtk_widget_queue_draw (GTK_WIDGET (message_area));
-}
-
-static void
-gedit_message_area_init (GeditMessageArea *message_area)
-{
- message_area->priv = GEDIT_MESSAGE_AREA_GET_PRIVATE (message_area);
-
- message_area->priv->main_hbox = gtk_hbox_new (FALSE, 16); /* FIXME: use style properties */
- gtk_widget_show (message_area->priv->main_hbox);
- gtk_container_set_border_width (GTK_CONTAINER (message_area->priv->main_hbox),
- 8); /* FIXME: use style properties */
-
- message_area->priv->action_area = gtk_vbox_new (TRUE, 10); /* FIXME: use style properties */
- gtk_widget_show (message_area->priv->action_area);
- gtk_box_pack_end (GTK_BOX (message_area->priv->main_hbox),
- message_area->priv->action_area,
- FALSE,
- TRUE,
- 0);
-
- gtk_box_pack_start (GTK_BOX (message_area),
- message_area->priv->main_hbox,
- TRUE,
- TRUE,
- 0);
-
- gtk_widget_set_app_paintable (GTK_WIDGET (message_area), TRUE);
-
- g_signal_connect (message_area,
- "expose-event",
- G_CALLBACK (paint_message_area),
- NULL);
-
- /* Note that we connect to style-set on one of the internal
- * widgets, not on the message area itself, since gtk does
- * not deliver any further style-set signals for a widget on
- * which the style has been forced with gtk_widget_set_style() */
- g_signal_connect (message_area->priv->main_hbox,
- "style-set",
- G_CALLBACK (style_set),
- message_area);
-}
-
-static gint
-get_response_for_widget (GeditMessageArea *message_area,
- GtkWidget *widget)
-{
- ResponseData *rd;
-
- rd = get_response_data (widget, FALSE);
- if (!rd)
- return GTK_RESPONSE_NONE;
- else
- return rd->response_id;
-}
-
-static void
-action_widget_activated (GtkWidget *widget, GeditMessageArea *message_area)
-{
- gint response_id;
-
- response_id = get_response_for_widget (message_area, widget);
-
- gedit_message_area_response (message_area, response_id);
-}
-
-void
-gedit_message_area_add_action_widget (GeditMessageArea *message_area,
- GtkWidget *child,
- gint response_id)
-{
- ResponseData *ad;
- guint signal_id;
-
- g_return_if_fail (GEDIT_IS_MESSAGE_AREA (message_area));
- g_return_if_fail (GTK_IS_WIDGET (child));
-
- ad = get_response_data (child, TRUE);
-
- ad->response_id = response_id;
-
- if (GTK_IS_BUTTON (child))
- signal_id = g_signal_lookup ("clicked", GTK_TYPE_BUTTON);
- else
- signal_id = GTK_WIDGET_GET_CLASS (child)->activate_signal;
-
- if (signal_id)
- {
- GClosure *closure;
-
- closure = g_cclosure_new_object (G_CALLBACK (action_widget_activated),
- G_OBJECT (message_area));
-
- g_signal_connect_closure_by_id (child,
- signal_id,
- 0,
- closure,
- FALSE);
- }
- else
- g_warning ("Only 'activatable' widgets can be packed into the action area of a GeditMessageArea");
-
- if (response_id != GTK_RESPONSE_HELP)
- gtk_box_pack_start (GTK_BOX (message_area->priv->action_area),
- child,
- FALSE,
- FALSE,
- 0);
- else
- gtk_box_pack_end (GTK_BOX (message_area->priv->action_area),
- child,
- FALSE,
- FALSE,
- 0);
-}
-
-/**
- * gedit_message_area_set_contents:
- * @message_area: a #GeditMessageArea
- * @contents: widget you want to add to the contents area
- *
- * Adds the @contents widget to the contents area of #GeditMessageArea.
- */
-void
-gedit_message_area_set_contents (GeditMessageArea *message_area,
- GtkWidget *contents)
-{
- g_return_if_fail (GEDIT_IS_MESSAGE_AREA (message_area));
- g_return_if_fail (GTK_IS_WIDGET (contents));
-
- message_area->priv->contents = contents;
- gtk_box_pack_start (GTK_BOX (message_area->priv->main_hbox),
- message_area->priv->contents,
- TRUE,
- TRUE,
- 0);
-}
-
-/**
- * gedit_message_area_add_button:
- * @message_area: a #GeditMessageArea
- * @button_text: text of button, or stock ID
- * @response_id: response ID for the button
- *
- * Adds a button with the given text (or a stock button, if button_text is a stock ID)
- * and sets things up so that clicking the button will emit the "response" signal
- * with the given response_id. The button is appended to the end of the message area's
- * action area. The button widget is returned, but usually you don't need it.
- *
- * Returns: the button widget that was added
- */
-GtkWidget*
-gedit_message_area_add_button (GeditMessageArea *message_area,
- const gchar *button_text,
- gint response_id)
-{
- GtkWidget *button;
-
- g_return_val_if_fail (GEDIT_IS_MESSAGE_AREA (message_area), NULL);
- g_return_val_if_fail (button_text != NULL, NULL);
-
- button = gtk_button_new_from_stock (button_text);
-
- GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
-
- gtk_widget_show (button);
-
- gedit_message_area_add_action_widget (message_area,
- button,
- response_id);
-
- return button;
-}
-
-static void
-add_buttons_valist (GeditMessageArea *message_area,
- const gchar *first_button_text,
- va_list args)
-{
- const gchar* text;
- gint response_id;
-
- g_return_if_fail (GEDIT_IS_MESSAGE_AREA (message_area));
-
- if (first_button_text == NULL)
- return;
-
- text = first_button_text;
- response_id = va_arg (args, gint);
-
- while (text != NULL)
- {
- gedit_message_area_add_button (message_area,
- text,
- response_id);
-
- text = va_arg (args, gchar*);
- if (text == NULL)
- break;
-
- response_id = va_arg (args, int);
- }
-}
-
-/**
- * gedit_message_area_add_buttons:
- * @message_area: a #GeditMessageArea
- * @first_button_text: button text or stock ID
- * @...: response ID for first button, then more text-response_id pairs
- *
- * Adds more buttons, same as calling gedit_message_area_add_button() repeatedly.
- * The variable argument list should be NULL-terminated as with
- * gedit_message_area_new_with_buttons(). Each button must have both text and response ID.
- */
-void
-gedit_message_area_add_buttons (GeditMessageArea *message_area,
- const gchar *first_button_text,
- ...)
-{
- va_list args;
-
- va_start (args, first_button_text);
-
- add_buttons_valist (message_area,
- first_button_text,
- args);
-
- va_end (args);
-}
-
-/**
- * gedit_message_area_new:
- *
- * Creates a new #GeditMessageArea object.
- *
- * Returns: a new #GeditMessageArea object
- */
-GtkWidget *
-gedit_message_area_new (void)
-{
- return g_object_new (GEDIT_TYPE_MESSAGE_AREA, NULL);
-}
-
-/**
- * gedit_message_area_new_with_buttons:
- * @first_button_text: stock ID or text to go in first button, or NULL
- * @...: response ID for first button, then additional buttons, ending with NULL
- *
- * Creates a new #GeditMessageArea with buttons. Button text/response ID pairs
- * should be listed, with a NULL pointer ending the list. Button text can be either
- * a stock ID such as GTK_STOCK_OK, or some arbitrary text. A response ID can be any
- * positive number, or one of the values in the GtkResponseType enumeration. If
- * the user clicks one of these dialog buttons, GeditMessageArea will emit the "response"
- * signal with the corresponding response ID.
- *
- * Returns: a new #GeditMessageArea
- */
-GtkWidget *
-gedit_message_area_new_with_buttons (const gchar *first_button_text,
- ...)
-{
- GeditMessageArea *message_area;
- va_list args;
-
- message_area = GEDIT_MESSAGE_AREA (gedit_message_area_new ());
-
- va_start (args, first_button_text);
-
- add_buttons_valist (message_area,
- first_button_text,
- args);
-
- va_end (args);
-
- return GTK_WIDGET (message_area);
-}
-
-/**
- * gedit_message_area_set_response_sensitive:
- * @message_area: a #GeditMessageArea
- * @response_id: a response ID
- * @setting: TRUE for sensitive
- *
- * Calls gtk_widget_set_sensitive (widget, setting) for each widget in the dialog's
- * action area with the given response_id. A convenient way to sensitize/desensitize
- * dialog buttons.
- */
-void
-gedit_message_area_set_response_sensitive (GeditMessageArea *message_area,
- gint response_id,
- gboolean setting)
-{
- GList *children;
- GList *tmp_list;
-
- g_return_if_fail (GEDIT_IS_MESSAGE_AREA (message_area));
-
- children = gtk_container_get_children (GTK_CONTAINER (message_area->priv->action_area));
-
- tmp_list = children;
- while (tmp_list != NULL)
- {
- GtkWidget *widget = tmp_list->data;
- ResponseData *rd = get_response_data (widget, FALSE);
-
- if (rd && rd->response_id == response_id)
- gtk_widget_set_sensitive (widget, setting);
-
- tmp_list = g_list_next (tmp_list);
- }
-
- g_list_free (children);
-}
-
-/**
- * gedit_message_area_set_default_response:
- * @message_area: a #GeditMessageArea
- * @response_id: a response ID
- *
- * Sets the last widget in the message area's action area with the given response_id
- * as the default widget for the dialog. Pressing "Enter" normally activates the
- * default widget.
- */
-void
-gedit_message_area_set_default_response (GeditMessageArea *message_area,
- gint response_id)
-{
- GList *children;
- GList *tmp_list;
-
- g_return_if_fail (GEDIT_IS_MESSAGE_AREA (message_area));
-
- children = gtk_container_get_children (GTK_CONTAINER (message_area->priv->action_area));
-
- tmp_list = children;
- while (tmp_list != NULL)
- {
- GtkWidget *widget = tmp_list->data;
- ResponseData *rd = get_response_data (widget, FALSE);
-
- if (rd && rd->response_id == response_id)
- gtk_widget_grab_default (widget);
-
- tmp_list = g_list_next (tmp_list);
- }
-
- g_list_free (children);
-}
-
-/**
- * gedit_message_area_set_default_response:
- * @message_area: a #GeditMessageArea
- * @response_id: a response ID
- *
- * Emits the 'response' signal with the given @response_id.
- */
-void
-gedit_message_area_response (GeditMessageArea *message_area,
- gint response_id)
-{
- g_return_if_fail (GEDIT_IS_MESSAGE_AREA (message_area));
-
- g_signal_emit (message_area,
- signals[RESPONSE],
- 0,
- response_id);
-}
-
-/**
- * gedit_message_area_add_stock_button_with_text:
- * @message_area: a #GeditMessageArea
- * @text: the text to visualize in the button
- * @stock_id: the stock ID of the button
- * @response_id: a response ID
- *
- * Same as gedit_message_area_add_button() but with a specific text.
- */
-GtkWidget *
-gedit_message_area_add_stock_button_with_text (GeditMessageArea *message_area,
- const gchar *text,
- const gchar *stock_id,
- gint response_id)
-{
- GtkWidget *button;
-
- g_return_val_if_fail (GEDIT_IS_MESSAGE_AREA (message_area), NULL);
- g_return_val_if_fail (text != NULL, NULL);
- g_return_val_if_fail (stock_id != NULL, NULL);
-
- button = gtk_button_new_with_mnemonic (text);
- gtk_button_set_image (GTK_BUTTON (button),
- gtk_image_new_from_stock (stock_id,
- GTK_ICON_SIZE_BUTTON));
-
- GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
-
- gtk_widget_show (button);
-
- gedit_message_area_add_action_widget (message_area,
- button,
- response_id);
-
- return button;
-}
-
diff --git a/gedit/gedit-message-area.h b/gedit/gedit-message-area.h
deleted file mode 100755
index 01dfff0c..00000000
--- a/gedit/gedit-message-area.h
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * gedit-message-area.h
- * This file is part of gedit
- *
- * Copyright (C) 2005 - Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifndef __GEDIT_MESSAGE_AREA_H__
-#define __GEDIT_MESSAGE_AREA_H__
-
-#include <gtk/gtk.h>
-
-G_BEGIN_DECLS
-
-/*
- * Type checking and casting macros
- */
-#define GEDIT_TYPE_MESSAGE_AREA (gedit_message_area_get_type())
-#define GEDIT_MESSAGE_AREA(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GEDIT_TYPE_MESSAGE_AREA, GeditMessageArea))
-#define GEDIT_MESSAGE_AREA_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GEDIT_TYPE_MESSAGE_AREA, GeditMessageAreaClass))
-#define GEDIT_IS_MESSAGE_AREA(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GEDIT_TYPE_MESSAGE_AREA))
-#define GEDIT_IS_MESSAGE_AREA_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEDIT_TYPE_MESSAGE_AREA))
-#define GEDIT_MESSAGE_AREA_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GEDIT_TYPE_MESSAGE_AREA, GeditMessageAreaClass))
-
-/* Private structure type */
-typedef struct _GeditMessageAreaPrivate GeditMessageAreaPrivate;
-
-/*
- * Main object structure
- */
-typedef struct _GeditMessageArea GeditMessageArea;
-
-struct _GeditMessageArea
-{
- GtkHBox parent;
-
- /*< private > */
- GeditMessageAreaPrivate *priv;
-};
-
-/*
- * Class definition
- */
-typedef struct _GeditMessageAreaClass GeditMessageAreaClass;
-
-struct _GeditMessageAreaClass
-{
- GtkHBoxClass parent_class;
-
- /* Signals */
- void (* response) (GeditMessageArea *message_area, gint response_id);
-
- /* Keybinding signals */
- void (* close) (GeditMessageArea *message_area);
-
- /* Padding for future expansion */
- void (*_gedit_reserved1) (void);
- void (*_gedit_reserved2) (void);
-};
-
-/*
- * Public methods
- */
-GType gedit_message_area_get_type (void) G_GNUC_CONST;
-
-GtkWidget *gedit_message_area_new (void);
-
-GtkWidget *gedit_message_area_new_with_buttons (const gchar *first_button_text,
- ...);
-
-void gedit_message_area_set_contents (GeditMessageArea *message_area,
- GtkWidget *contents);
-
-void gedit_message_area_add_action_widget (GeditMessageArea *message_area,
- GtkWidget *child,
- gint response_id);
-
-GtkWidget *gedit_message_area_add_button (GeditMessageArea *message_area,
- const gchar *button_text,
- gint response_id);
-
-GtkWidget *gedit_message_area_add_stock_button_with_text
- (GeditMessageArea *message_area,
- const gchar *text,
- const gchar *stock_id,
- gint response_id);
-
-void gedit_message_area_add_buttons (GeditMessageArea *message_area,
- const gchar *first_button_text,
- ...);
-
-void gedit_message_area_set_response_sensitive
- (GeditMessageArea *message_area,
- gint response_id,
- gboolean setting);
-void gedit_message_area_set_default_response
- (GeditMessageArea *message_area,
- gint response_id);
-
-/* Emit response signal */
-void gedit_message_area_response (GeditMessageArea *message_area,
- gint response_id);
-
-G_END_DECLS
-
-#endif /* __GEDIT_MESSAGE_AREA_H__ */
diff --git a/gedit/gedit-message-bus.c b/gedit/gedit-message-bus.c
deleted file mode 100755
index bb6017a3..00000000
--- a/gedit/gedit-message-bus.c
+++ /dev/null
@@ -1,1158 +0,0 @@
-#include "gedit-message-bus.h"
-
-#include <string.h>
-#include <stdarg.h>
-#include <gobject/gvaluecollector.h>
-
-/**
- * GeditMessageCallback:
- * @bus: the #GeditMessageBus on which the message was sent
- * @message: the #GeditMessage which was sent
- * @userdata: the supplied user data when connecting the callback
- *
- * Callback signature used for connecting callback functions to be called
- * when a message is received (see gedit_message_bus_connect()).
- *
- */
-
-/**
- * SECTION:gedit-message-bus
- * @short_description: internal message communication bus
- * @include: gedit/gedit-message-bus.h
- *
- * gedit has a communication bus very similar to DBus. Its primary use is to
- * allow easy communication between plugins, but it can also be used to expose
- * gedit functionality to external applications by providing DBus bindings for
- * the internal gedit message bus.
- *
- * There are two different communication busses available. The default bus
- * (see gedit_message_bus_get_default()) is an application wide communication
- * bus. In addition, each #GeditWindow has a separate, private bus
- * (see gedit_window_get_message_bus()). This makes it easier for plugins to
- * communicate to other plugins in the same window.
- *
- * The concept of the message bus is very simple. You can register a message
- * type on the bus, specified as a Method at a specific Object Path with a
- * certain set of Method Arguments. You can then connect callback functions
- * for this message type on the bus. Whenever a message with the Object Path
- * and Method for which callbacks are connected is sent over the bus, the
- * callbacks are called. There is no distinction between Methods and Signals
- * (signals are simply messages where sender and receiver have switched places).
- *
- * <example>
- * <title>Registering a message type</title>
- * <programlisting>
- * GeditMessageBus *bus = gedit_message_bus_get_default ();
- *
- * // Register 'method' at '/plugins/example' with one required
- * // string argument 'arg1'
- * GeditMessageType *message_type = gedit_message_bus_register ("/plugins/example", "method",
- * 0,
- * "arg1", G_TYPE_STRING,
- * NULL);
- * </programlisting>
- * </example>
- * <example>
- * <title>Connecting a callback</title>
- * <programlisting>
- * static void
- * example_method_cb (GeditMessageBus *bus,
- * GeditMessage *message,
- * gpointer userdata)
- * {
- * gchar *arg1 = NULL;
- *
- * gedit_message_get (message, "arg1", &arg1, NULL);
- * g_message ("Evoked /plugins/example.method with: %s", arg1);
- * g_free (arg1);
- * }
- *
- * GeditMessageBus *bus = gedit_message_bus_get_default ();
- *
- * guint id = gedit_message_bus_connect (bus,
- * "/plugins/example", "method",
- * example_method_cb,
- * NULL,
- * NULL);
- *
- * </programlisting>
- * </example>
- * <example>
- * <title>Sending a message</title>
- * <programlisting>
- * GeditMessageBus *bus = gedit_message_bus_get_default ();
- *
- * gedit_message_bus_send (bus,
- * "/plugins/example", "method",
- * "arg1", "Hello World",
- * NULL);
- * </programlisting>
- * </example>
- *
- * Since: 2.25.3
- *
- */
-
-#define GEDIT_MESSAGE_BUS_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE((object), GEDIT_TYPE_MESSAGE_BUS, GeditMessageBusPrivate))
-
-typedef struct
-{
- gchar *object_path;
- gchar *method;
-
- GList *listeners;
-} Message;
-
-typedef struct
-{
- guint id;
- gboolean blocked;
-
- GDestroyNotify destroy_data;
- GeditMessageCallback callback;
- gpointer userdata;
-} Listener;
-
-typedef struct
-{
- Message *message;
- GList *listener;
-} IdMap;
-
-struct _GeditMessageBusPrivate
-{
- GHashTable *messages;
- GHashTable *idmap;
-
- GList *message_queue;
- guint idle_id;
-
- guint next_id;
-
- GHashTable *types; /* mapping from identifier to GeditMessageType */
-};
-
-/* signals */
-enum
-{
- DISPATCH,
- REGISTERED,
- UNREGISTERED,
- LAST_SIGNAL
-};
-
-static guint message_bus_signals[LAST_SIGNAL];
-
-static void gedit_message_bus_dispatch_real (GeditMessageBus *bus,
- GeditMessage *message);
-
-G_DEFINE_TYPE(GeditMessageBus, gedit_message_bus, G_TYPE_OBJECT)
-
-static void
-listener_free (Listener *listener)
-{
- if (listener->destroy_data)
- listener->destroy_data (listener->userdata);
-
- g_free (listener);
-}
-
-static void
-message_free (Message *message)
-{
- g_free (message->method);
- g_free (message->object_path);
-
- g_list_foreach (message->listeners, (GFunc)listener_free, NULL);
- g_list_free (message->listeners);
-
- g_free (message);
-}
-
-static void
-message_queue_free (GList *queue)
-{
- g_list_foreach (queue, (GFunc)g_object_unref, NULL);
- g_list_free (queue);
-}
-
-static void
-gedit_message_bus_finalize (GObject *object)
-{
- GeditMessageBus *bus = GEDIT_MESSAGE_BUS (object);
-
- if (bus->priv->idle_id != 0)
- g_source_remove (bus->priv->idle_id);
-
- message_queue_free (bus->priv->message_queue);
-
- g_hash_table_destroy (bus->priv->messages);
- g_hash_table_destroy (bus->priv->idmap);
- g_hash_table_destroy (bus->priv->types);
-
- G_OBJECT_CLASS (gedit_message_bus_parent_class)->finalize (object);
-}
-
-static void
-gedit_message_bus_class_init (GeditMessageBusClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->finalize = gedit_message_bus_finalize;
-
- klass->dispatch = gedit_message_bus_dispatch_real;
-
- /**
- * GeditMessageBus::dispatch:
- * @bus: a #GeditMessageBus
- * @message: the #GeditMessage to dispatch
- *
- * The "dispatch" signal is emitted when a message is to be dispatched.
- * The message is dispatched in the default handler of this signal.
- * Primary use of this signal is to customize the dispatch of a message
- * (for instance to automatically dispatch all messages over DBus).
- *2
- */
- message_bus_signals[DISPATCH] =
- g_signal_new ("dispatch",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GeditMessageBusClass, dispatch),
- NULL, NULL,
- g_cclosure_marshal_VOID__OBJECT,
- G_TYPE_NONE,
- 1,
- GEDIT_TYPE_MESSAGE);
-
- /**
- * GeditMessageBus::registered:
- * @bus: a #GeditMessageBus
- * @message_type: the registered #GeditMessageType
- *
- * The "registered" signal is emitted when a message has been registered
- * on the bus.
- *
- */
- message_bus_signals[REGISTERED] =
- g_signal_new ("registered",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GeditMessageBusClass, registered),
- NULL, NULL,
- g_cclosure_marshal_VOID__BOXED,
- G_TYPE_NONE,
- 1,
- GEDIT_TYPE_MESSAGE_TYPE);
-
- /**
- * GeditMessageBus::unregistered:
- * @bus: a #GeditMessageBus
- * @message_type: the unregistered #GeditMessageType
- *
- * The "unregistered" signal is emitted when a message has been
- * unregistered from the bus.
- *
- */
- message_bus_signals[UNREGISTERED] =
- g_signal_new ("unregistered",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GeditMessageBusClass, unregistered),
- NULL, NULL,
- g_cclosure_marshal_VOID__BOXED,
- G_TYPE_NONE,
- 1,
- GEDIT_TYPE_MESSAGE_TYPE);
-
- g_type_class_add_private (object_class, sizeof(GeditMessageBusPrivate));
-}
-
-static Message *
-message_new (GeditMessageBus *bus,
- const gchar *object_path,
- const gchar *method)
-{
- Message *message = g_new (Message, 1);
-
- message->object_path = g_strdup (object_path);
- message->method = g_strdup (method);
- message->listeners = NULL;
-
- g_hash_table_insert (bus->priv->messages,
- gedit_message_type_identifier (object_path, method),
- message);
- return message;
-}
-
-static Message *
-lookup_message (GeditMessageBus *bus,
- const gchar *object_path,
- const gchar *method,
- gboolean create)
-{
- gchar *identifier;
- Message *message;
-
- identifier = gedit_message_type_identifier (object_path, method);
- message = (Message *)g_hash_table_lookup (bus->priv->messages, identifier);
- g_free (identifier);
-
- if (!message && !create)
- return NULL;
-
- if (!message)
- message = message_new (bus, object_path, method);
-
- return message;
-}
-
-static guint
-add_listener (GeditMessageBus *bus,
- Message *message,
- GeditMessageCallback callback,
- gpointer userdata,
- GDestroyNotify destroy_data)
-{
- Listener *listener;
- IdMap *idmap;
-
- listener = g_new (Listener, 1);
- listener->id = ++bus->priv->next_id;
- listener->callback = callback;
- listener->userdata = userdata;
- listener->blocked = FALSE;
- listener->destroy_data = destroy_data;
-
- message->listeners = g_list_append (message->listeners, listener);
-
- idmap = g_new (IdMap, 1);
- idmap->message = message;
- idmap->listener = g_list_last (message->listeners);
-
- g_hash_table_insert (bus->priv->idmap, GINT_TO_POINTER (listener->id), idmap);
- return listener->id;
-}
-
-static void
-remove_listener (GeditMessageBus *bus,
- Message *message,
- GList *listener)
-{
- Listener *lst;
-
- lst = (Listener *)listener->data;
-
- /* remove from idmap */
- g_hash_table_remove (bus->priv->idmap, GINT_TO_POINTER (lst->id));
- listener_free (lst);
-
- /* remove from list of listeners */
- message->listeners = g_list_delete_link (message->listeners, listener);
-
- if (!message->listeners)
- {
- /* remove message because it does not have any listeners */
- g_hash_table_remove (bus->priv->messages, message);
- }
-}
-
-static void
-block_listener (GeditMessageBus *bus,
- Message *message,
- GList *listener)
-{
- Listener *lst;
-
- lst = (Listener *)listener->data;
- lst->blocked = TRUE;
-}
-
-static void
-unblock_listener (GeditMessageBus *bus,
- Message *message,
- GList *listener)
-{
- Listener *lst;
-
- lst = (Listener *)listener->data;
- lst->blocked = FALSE;
-}
-
-static void
-dispatch_message_real (GeditMessageBus *bus,
- Message *msg,
- GeditMessage *message)
-{
- GList *item;
-
- for (item = msg->listeners; item; item = item->next)
- {
- Listener *listener = (Listener *)item->data;
-
- if (!listener->blocked)
- listener->callback (bus, message, listener->userdata);
- }
-}
-
-static void
-gedit_message_bus_dispatch_real (GeditMessageBus *bus,
- GeditMessage *message)
-{
- const gchar *object_path;
- const gchar *method;
- Message *msg;
-
- object_path = gedit_message_get_object_path (message);
- method = gedit_message_get_method (message);
-
- msg = lookup_message (bus, object_path, method, FALSE);
-
- if (msg)
- dispatch_message_real (bus, msg, message);
-}
-
-static void
-dispatch_message (GeditMessageBus *bus,
- GeditMessage *message)
-{
- g_signal_emit (bus, message_bus_signals[DISPATCH], 0, message);
-}
-
-static gboolean
-idle_dispatch (GeditMessageBus *bus)
-{
- GList *list;
- GList *item;
-
- /* make sure to set idle_id to 0 first so that any new async messages
- will be queued properly */
- bus->priv->idle_id = 0;
-
- /* reverse queue to get correct delivery order */
- list = g_list_reverse (bus->priv->message_queue);
- bus->priv->message_queue = NULL;
-
- for (item = list; item; item = item->next)
- {
- GeditMessage *msg = GEDIT_MESSAGE (item->data);
-
- dispatch_message (bus, msg);
- }
-
- message_queue_free (list);
- return FALSE;
-}
-
-typedef void (*MatchCallback) (GeditMessageBus *, Message *, GList *);
-
-static void
-process_by_id (GeditMessageBus *bus,
- guint id,
- MatchCallback processor)
-{
- IdMap *idmap;
-
- idmap = (IdMap *)g_hash_table_lookup (bus->priv->idmap, GINT_TO_POINTER (id));
-
- if (idmap == NULL)
- {
- g_warning ("No handler registered with id `%d'", id);
- return;
- }
-
- processor (bus, idmap->message, idmap->listener);
-}
-
-static void
-process_by_match (GeditMessageBus *bus,
- const gchar *object_path,
- const gchar *method,
- GeditMessageCallback callback,
- gpointer userdata,
- MatchCallback processor)
-{
- Message *message;
- GList *item;
-
- message = lookup_message (bus, object_path, method, FALSE);
-
- if (!message)
- {
- g_warning ("No such handler registered for %s.%s", object_path, method);
- return;
- }
-
- for (item = message->listeners; item; item = item->next)
- {
- Listener *listener = (Listener *)item->data;
-
- if (listener->callback == callback &&
- listener->userdata == userdata)
- {
- processor (bus, message, item);
- return;
- }
- }
-
- g_warning ("No such handler registered for %s.%s", object_path, method);
-}
-
-static void
-gedit_message_bus_init (GeditMessageBus *self)
-{
- self->priv = GEDIT_MESSAGE_BUS_GET_PRIVATE (self);
-
- self->priv->messages = g_hash_table_new_full (g_str_hash,
- g_str_equal,
- (GDestroyNotify)g_free,
- (GDestroyNotify)message_free);
-
- self->priv->idmap = g_hash_table_new_full (g_direct_hash,
- g_direct_equal,
- NULL,
- (GDestroyNotify)g_free);
-
- self->priv->types = g_hash_table_new_full (g_str_hash,
- g_str_equal,
- (GDestroyNotify)g_free,
- (GDestroyNotify)gedit_message_type_unref);
-}
-
-/**
- * gedit_message_bus_get_default:
- *
- * Get the default application #GeditMessageBus.
- *
- * Return value: the default #GeditMessageBus
- *
- */
-GeditMessageBus *
-gedit_message_bus_get_default (void)
-{
- static GeditMessageBus *default_bus = NULL;
-
- if (G_UNLIKELY (default_bus == NULL))
- {
- default_bus = g_object_new (GEDIT_TYPE_MESSAGE_BUS, NULL);
- g_object_add_weak_pointer (G_OBJECT (default_bus),
- (gpointer) &default_bus);
- }
-
- return default_bus;
-}
-
-/**
- * gedit_message_bus_new:
- *
- * Create a new message bus. Use gedit_message_bus_get_default() to get the
- * default, application wide, message bus. Creating a new bus is useful for
- * associating a specific bus with for instance a #GeditWindow.
- *
- * Return value: a new #GeditMessageBus
- *
- */
-GeditMessageBus *
-gedit_message_bus_new (void)
-{
- return GEDIT_MESSAGE_BUS (g_object_new (GEDIT_TYPE_MESSAGE_BUS, NULL));
-}
-
-/**
- * gedit_message_bus_lookup:
- * @bus: a #GeditMessageBus
- * @object_path: the object path
- * @method: the method
- *
- * Get the registered #GeditMessageType for @method at @object_path. The
- * returned #GeditMessageType is owned by the bus and should not be unreffed.
- *
- * Return value: the registered #GeditMessageType or %NULL if no message type
- * is registered for @method at @object_path
- *
- */
-GeditMessageType *
-gedit_message_bus_lookup (GeditMessageBus *bus,
- const gchar *object_path,
- const gchar *method)
-{
- gchar *identifier;
- GeditMessageType *message_type;
-
- g_return_val_if_fail (GEDIT_IS_MESSAGE_BUS (bus), NULL);
- g_return_val_if_fail (object_path != NULL, NULL);
- g_return_val_if_fail (method != NULL, NULL);
-
- identifier = gedit_message_type_identifier (object_path, method);
- message_type = GEDIT_MESSAGE_TYPE (g_hash_table_lookup (bus->priv->types, identifier));
-
- g_free (identifier);
- return message_type;
-}
-
-/**
- * gedit_message_bus_register:
- * @bus: a #GeditMessageBus
- * @object_path: the object path
- * @method: the method to register
- * @num_optional: the number of optional arguments
- * @...: NULL terminated list of key/gtype method argument pairs
- *
- * Register a message on the bus. A message must be registered on the bus before
- * it can be send. This function registers the type arguments for @method at
- * @object_path. The arguments are specified with the variable arguments which
- * should contain pairs of const gchar *key and GType terminated by %NULL. The
- * last @num_optional arguments are registered as optional (and are thus not
- * required when sending a message).
- *
- * This function emits a #GeditMessageBus::registered signal.
- *
- * Return value: the registered #GeditMessageType. The returned reference is
- * owned by the bus. If you want to keep it alive after
- * unregistering, use gedit_message_type_ref().
- *
- */
-GeditMessageType *
-gedit_message_bus_register (GeditMessageBus *bus,
- const gchar *object_path,
- const gchar *method,
- guint num_optional,
- ...)
-{
- gchar *identifier;
- gpointer data;
- va_list var_args;
- GeditMessageType *message_type;
-
- g_return_val_if_fail (GEDIT_IS_MESSAGE_BUS (bus), NULL);
- g_return_val_if_fail (gedit_message_type_is_valid_object_path (object_path), NULL);
-
- if (gedit_message_bus_is_registered (bus, object_path, method))
- {
- g_warning ("Message type for '%s.%s' is already registered", object_path, method);
- return NULL;
- }
-
- identifier = gedit_message_type_identifier (object_path, method);
- data = g_hash_table_lookup (bus->priv->types, identifier);
-
- va_start (var_args, num_optional);
- message_type = gedit_message_type_new_valist (object_path,
- method,
- num_optional,
- var_args);
- va_end (var_args);
-
- if (message_type)
- {
- g_hash_table_insert (bus->priv->types, identifier, message_type);
- g_signal_emit (bus, message_bus_signals[REGISTERED], 0, message_type);
- }
- else
- {
- g_free (identifier);
- }
-
- return message_type;
-}
-
-static void
-gedit_message_bus_unregister_real (GeditMessageBus *bus,
- GeditMessageType *message_type,
- gboolean remove_from_store)
-{
- gchar *identifier;
-
- g_return_if_fail (GEDIT_IS_MESSAGE_BUS (bus));
-
- identifier = gedit_message_type_identifier (gedit_message_type_get_object_path (message_type),
- gedit_message_type_get_method (message_type));
-
- /* Keep message type alive for signal emission */
- gedit_message_type_ref (message_type);
-
- if (!remove_from_store || g_hash_table_remove (bus->priv->types, identifier))
- g_signal_emit (bus, message_bus_signals[UNREGISTERED], 0, message_type);
-
- gedit_message_type_unref (message_type);
- g_free (identifier);
-}
-
-/**
- * gedit_message_bus_unregister:
- * @bus: a #GeditMessageBus
- * @message_type: the #GeditMessageType to unregister
- *
- * Unregisters a previously registered message type. This is especially useful
- * for plugins which should unregister message types when they are deactivated.
- *
- * This function emits the #GeditMessageBus::unregistered signal.
- *
- */
-void
-gedit_message_bus_unregister (GeditMessageBus *bus,
- GeditMessageType *message_type)
-{
- g_return_if_fail (GEDIT_IS_MESSAGE_BUS (bus));
- gedit_message_bus_unregister_real (bus, message_type, TRUE);
-}
-
-typedef struct
-{
- GeditMessageBus *bus;
- const gchar *object_path;
-} UnregisterInfo;
-
-static gboolean
-unregister_each (const gchar *identifier,
- GeditMessageType *message_type,
- UnregisterInfo *info)
-{
- if (strcmp (gedit_message_type_get_object_path (message_type),
- info->object_path) == 0)
- {
- gedit_message_bus_unregister_real (info->bus, message_type, FALSE);
- return TRUE;
- }
-
- return FALSE;
-}
-
-/**
- * gedit_message_bus_unregister_all:
- * @bus: a #GeditMessageBus
- * @object_path: the object path
- *
- * Unregisters all message types for @object_path. This is especially useful for
- * plugins which should unregister message types when they are deactivated.
- *
- * This function emits the #GeditMessageBus::unregistered signal for all
- * unregistered message types.
- *
- */
-void
-gedit_message_bus_unregister_all (GeditMessageBus *bus,
- const gchar *object_path)
-{
- UnregisterInfo info = {bus, object_path};
-
- g_return_if_fail (GEDIT_IS_MESSAGE_BUS (bus));
- g_return_if_fail (object_path != NULL);
-
- g_hash_table_foreach_remove (bus->priv->types,
- (GHRFunc)unregister_each,
- &info);
-}
-
-/**
- * gedit_message_bus_is_registered:
- * @bus: a #GeditMessageBus
- * @object_path: the object path
- * @method: the method
- *
- * Check whether a message type @method at @object_path is registered on the
- * bus.
- *
- * Return value: %TRUE if the @method at @object_path is a registered message
- * type on the bus
- *
- */
-gboolean
-gedit_message_bus_is_registered (GeditMessageBus *bus,
- const gchar *object_path,
- const gchar *method)
-{
- gchar *identifier;
- gboolean ret;
-
- g_return_val_if_fail (GEDIT_IS_MESSAGE_BUS (bus), FALSE);
- g_return_val_if_fail (object_path != NULL, FALSE);
- g_return_val_if_fail (method != NULL, FALSE);
-
- identifier = gedit_message_type_identifier (object_path, method);
- ret = g_hash_table_lookup (bus->priv->types, identifier) != NULL;
-
- g_free(identifier);
- return ret;
-}
-
-typedef struct
-{
- GeditMessageBusForeach func;
- gpointer userdata;
-} ForeachInfo;
-
-static void
-foreach_type (const gchar *key,
- GeditMessageType *message_type,
- ForeachInfo *info)
-{
- gedit_message_type_ref (message_type);
- info->func (message_type, info->userdata);
- gedit_message_type_unref (message_type);
-}
-
-/**
- * gedit_message_bus_foreach:
- * @bus: the #GeditMessagebus
- * @func: the callback function
- * @userdata: the user data to supply to the callback function
- *
- * Calls @func for each message type registered on the bus
- *
- */
-void
-gedit_message_bus_foreach (GeditMessageBus *bus,
- GeditMessageBusForeach func,
- gpointer userdata)
-{
- ForeachInfo info = {func, userdata};
-
- g_return_if_fail (GEDIT_IS_MESSAGE_BUS (bus));
- g_return_if_fail (func != NULL);
-
- g_hash_table_foreach (bus->priv->types, (GHFunc)foreach_type, &info);
-}
-
-/**
- * gedit_message_bus_connect:
- * @bus: a #GeditMessageBus
- * @object_path: the object path
- * @method: the method
- * @callback: function to be called when message @method at @object_path is sent
- * @userdata: userdata to use for the callback
- * @destroy_data: function to evoke with @userdata as argument when @userdata
- * needs to be freed
- *
- * Connect a callback handler to be evoked when message @method at @object_path
- * is sent over the bus.
- *
- * Return value: the callback identifier
- *
- */
-guint
-gedit_message_bus_connect (GeditMessageBus *bus,
- const gchar *object_path,
- const gchar *method,
- GeditMessageCallback callback,
- gpointer userdata,
- GDestroyNotify destroy_data)
-{
- Message *message;
-
- g_return_val_if_fail (GEDIT_IS_MESSAGE_BUS (bus), 0);
- g_return_val_if_fail (object_path != NULL, 0);
- g_return_val_if_fail (method != NULL, 0);
- g_return_val_if_fail (callback != NULL, 0);
-
- /* lookup the message and create if it does not exist yet */
- message = lookup_message (bus, object_path, method, TRUE);
-
- return add_listener (bus, message, callback, userdata, destroy_data);
-}
-
-/**
- * gedit_message_bus_disconnect:
- * @bus: a #GeditMessageBus
- * @id: the callback id as returned by gedit_message_bus_connect()
- *
- * Disconnects a previously connected message callback.
- *
- */
-void
-gedit_message_bus_disconnect (GeditMessageBus *bus,
- guint id)
-{
- g_return_if_fail (GEDIT_IS_MESSAGE_BUS (bus));
-
- process_by_id (bus, id, remove_listener);
-}
-
-/**
- * gedit_message_bus_disconnect_by_func:
- * @bus: a #GeditMessageBus
- * @object_path: the object path
- * @method: the method
- * @callback: the connected callback
- * @userdata: the userdata with which the callback was connected
- *
- * Disconnects a previously connected message callback by matching the
- * provided callback function and userdata. See also
- * gedit_message_bus_disconnect().
- *
- */
-void
-gedit_message_bus_disconnect_by_func (GeditMessageBus *bus,
- const gchar *object_path,
- const gchar *method,
- GeditMessageCallback callback,
- gpointer userdata)
-{
- g_return_if_fail (GEDIT_IS_MESSAGE_BUS (bus));
-
- process_by_match (bus, object_path, method, callback, userdata, remove_listener);
-}
-
-/**
- * gedit_message_bus_block:
- * @bus: a #GeditMessageBus
- * @id: the callback id
- *
- * Blocks evoking the callback specified by @id. Unblock the callback by
- * using gedit_message_bus_unblock().
- *
- */
-void
-gedit_message_bus_block (GeditMessageBus *bus,
- guint id)
-{
- g_return_if_fail (GEDIT_IS_MESSAGE_BUS (bus));
-
- process_by_id (bus, id, block_listener);
-}
-
-/**
- * gedit_message_bus_block_by_func:
- * @bus: a #GeditMessageBus
- * @object_path: the object path
- * @method: the method
- * @callback: the callback to block
- * @userdata: the userdata with which the callback was connected
- *
- * Blocks evoking the callback that matches provided @callback and @userdata.
- * Unblock the callback using gedit_message_unblock_by_func().
- *
- */
-void
-gedit_message_bus_block_by_func (GeditMessageBus *bus,
- const gchar *object_path,
- const gchar *method,
- GeditMessageCallback callback,
- gpointer userdata)
-{
- g_return_if_fail (GEDIT_IS_MESSAGE_BUS (bus));
-
- process_by_match (bus, object_path, method, callback, userdata, block_listener);
-}
-
-/**
- * gedit_message_bus_unblock:
- * @bus: a #GeditMessageBus
- * @id: the callback id
- *
- * Unblocks the callback specified by @id.
- *
- */
-void
-gedit_message_bus_unblock (GeditMessageBus *bus,
- guint id)
-{
- g_return_if_fail (GEDIT_IS_MESSAGE_BUS (bus));
-
- process_by_id (bus, id, unblock_listener);
-}
-
-/**
- * gedit_message_bus_unblock_by_func:
- * @bus: a #GeditMessageBus
- * @object_path: the object path
- * @method: the method
- * @callback: the callback to block
- * @userdata: the userdata with which the callback was connected
- *
- * Unblocks the callback that matches provided @callback and @userdata.
- *
- */
-void
-gedit_message_bus_unblock_by_func (GeditMessageBus *bus,
- const gchar *object_path,
- const gchar *method,
- GeditMessageCallback callback,
- gpointer userdata)
-{
- g_return_if_fail (GEDIT_IS_MESSAGE_BUS (bus));
-
- process_by_match (bus, object_path, method, callback, userdata, unblock_listener);
-}
-
-static gboolean
-validate_message (GeditMessage *message)
-{
- if (!gedit_message_validate (message))
- {
- g_warning ("Message '%s.%s' is invalid", gedit_message_get_object_path (message),
- gedit_message_get_method (message));
- return FALSE;
- }
-
- return TRUE;
-}
-
-static void
-send_message_real (GeditMessageBus *bus,
- GeditMessage *message)
-{
- if (!validate_message (message))
- {
- return;
- }
-
- bus->priv->message_queue = g_list_prepend (bus->priv->message_queue,
- g_object_ref (message));
-
- if (bus->priv->idle_id == 0)
- bus->priv->idle_id = g_idle_add_full (G_PRIORITY_HIGH,
- (GSourceFunc)idle_dispatch,
- bus,
- NULL);
-}
-
-/**
- * gedit_message_bus_send_message:
- * @bus: a #GeditMessageBus
- * @message: the message to send
- *
- * This sends the provided @message asynchronously over the bus. To send
- * a message synchronously, use gedit_message_bus_send_message_sync(). The
- * convenience function gedit_message_bus_send() can be used to easily send
- * a message without constructing the message object explicitly first.
- *
- */
-void
-gedit_message_bus_send_message (GeditMessageBus *bus,
- GeditMessage *message)
-{
- g_return_if_fail (GEDIT_IS_MESSAGE_BUS (bus));
- g_return_if_fail (GEDIT_IS_MESSAGE (message));
-
- send_message_real (bus, message);
-}
-
-static void
-send_message_sync_real (GeditMessageBus *bus,
- GeditMessage *message)
-{
- if (!validate_message (message))
- {
- return;
- }
-
- dispatch_message (bus, message);
-}
-
-/**
- * gedit_message_bus_send_message_sync:
- * @bus: a #GeditMessageBus
- * @message: the message to send
- *
- * This sends the provided @message synchronously over the bus. To send
- * a message asynchronously, use gedit_message_bus_send_message(). The
- * convenience function gedit_message_bus_send_sync() can be used to easily send
- * a message without constructing the message object explicitly first.
- *
- */
-void
-gedit_message_bus_send_message_sync (GeditMessageBus *bus,
- GeditMessage *message)
-{
- g_return_if_fail (GEDIT_IS_MESSAGE_BUS (bus));
- g_return_if_fail (GEDIT_IS_MESSAGE (message));
-
- send_message_sync_real (bus, message);
-}
-
-static GeditMessage *
-create_message (GeditMessageBus *bus,
- const gchar *object_path,
- const gchar *method,
- va_list var_args)
-{
- GeditMessageType *message_type;
-
- message_type = gedit_message_bus_lookup (bus, object_path, method);
-
- if (!message_type)
- {
- g_warning ("Could not find message type for '%s.%s'", object_path, method);
- return NULL;
- }
-
- return gedit_message_type_instantiate_valist (message_type,
- var_args);
-}
-
-/**
- * gedit_message_bus_send:
- * @bus: a #GeditMessageBus
- * @object_path: the object path
- * @method: the method
- * @...: NULL terminated list of key/value pairs
- *
- * This provides a convenient way to quickly send a message @method at
- * @object_path asynchronously over the bus. The variable argument list
- * specifies key (string) value pairs used to construct the message arguments.
- * To send a message synchronously use gedit_message_bus_send_sync().
- *
- */
-void
-gedit_message_bus_send (GeditMessageBus *bus,
- const gchar *object_path,
- const gchar *method,
- ...)
-{
- va_list var_args;
- GeditMessage *message;
-
- va_start (var_args, method);
-
- message = create_message (bus, object_path, method, var_args);
-
- if (message)
- {
- send_message_real (bus, message);
- g_object_unref (message);
- }
- else
- {
- g_warning ("Could not instantiate message");
- }
-
- va_end (var_args);
-}
-
-/**
- * gedit_message_bus_send_sync:
- * @bus: a #GeditMessageBus
- * @object_path: the object path
- * @method: the method
- * @...: NULL terminated list of key/value pairs
- *
- * This provides a convenient way to quickly send a message @method at
- * @object_path synchronously over the bus. The variable argument list
- * specifies key (string) value pairs used to construct the message
- * arguments. To send a message asynchronously use gedit_message_bus_send().
- *
- * Return value: the constructed #GeditMessage. The caller owns a reference
- * to the #GeditMessage and should call g_object_unref() when
- * it is no longer needed
- */
-GeditMessage *
-gedit_message_bus_send_sync (GeditMessageBus *bus,
- const gchar *object_path,
- const gchar *method,
- ...)
-{
- va_list var_args;
- GeditMessage *message;
-
- va_start (var_args, method);
- message = create_message (bus, object_path, method, var_args);
-
- if (message)
- send_message_sync_real (bus, message);
-
- va_end (var_args);
-
- return message;
-}
-
-// ex:ts=8:noet:
diff --git a/gedit/gedit-message-bus.h b/gedit/gedit-message-bus.h
deleted file mode 100755
index b60eabd0..00000000
--- a/gedit/gedit-message-bus.h
+++ /dev/null
@@ -1,129 +0,0 @@
-#ifndef __GEDIT_MESSAGE_BUS_H__
-#define __GEDIT_MESSAGE_BUS_H__
-
-#include <glib-object.h>
-#include <gedit/gedit-message.h>
-#include <gedit/gedit-message-type.h>
-
-G_BEGIN_DECLS
-
-#define GEDIT_TYPE_MESSAGE_BUS (gedit_message_bus_get_type ())
-#define GEDIT_MESSAGE_BUS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEDIT_TYPE_MESSAGE_BUS, GeditMessageBus))
-#define GEDIT_MESSAGE_BUS_CONST(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEDIT_TYPE_MESSAGE_BUS, GeditMessageBus const))
-#define GEDIT_MESSAGE_BUS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEDIT_TYPE_MESSAGE_BUS, GeditMessageBusClass))
-#define GEDIT_IS_MESSAGE_BUS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEDIT_TYPE_MESSAGE_BUS))
-#define GEDIT_IS_MESSAGE_BUS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEDIT_TYPE_MESSAGE_BUS))
-#define GEDIT_MESSAGE_BUS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEDIT_TYPE_MESSAGE_BUS, GeditMessageBusClass))
-
-typedef struct _GeditMessageBus GeditMessageBus;
-typedef struct _GeditMessageBusClass GeditMessageBusClass;
-typedef struct _GeditMessageBusPrivate GeditMessageBusPrivate;
-
-struct _GeditMessageBus {
- GObject parent;
-
- GeditMessageBusPrivate *priv;
-};
-
-struct _GeditMessageBusClass {
- GObjectClass parent_class;
-
- void (*dispatch) (GeditMessageBus *bus,
- GeditMessage *message);
- void (*registered) (GeditMessageBus *bus,
- GeditMessageType *message_type);
- void (*unregistered) (GeditMessageBus *bus,
- GeditMessageType *message_type);
-};
-
-typedef void (* GeditMessageCallback) (GeditMessageBus *bus,
- GeditMessage *message,
- gpointer userdata);
-
-typedef void (* GeditMessageBusForeach) (GeditMessageType *message_type,
- gpointer userdata);
-
-GType gedit_message_bus_get_type (void) G_GNUC_CONST;
-
-GeditMessageBus *gedit_message_bus_get_default (void);
-GeditMessageBus *gedit_message_bus_new (void);
-
-/* registering messages */
-GeditMessageType *gedit_message_bus_lookup (GeditMessageBus *bus,
- const gchar *object_path,
- const gchar *method);
-GeditMessageType *gedit_message_bus_register (GeditMessageBus *bus,
- const gchar *object_path,
- const gchar *method,
- guint num_optional,
- ...) G_GNUC_NULL_TERMINATED;
-
-void gedit_message_bus_unregister (GeditMessageBus *bus,
- GeditMessageType *message_type);
-
-void gedit_message_bus_unregister_all (GeditMessageBus *bus,
- const gchar *object_path);
-
-gboolean gedit_message_bus_is_registered (GeditMessageBus *bus,
- const gchar *object_path,
- const gchar *method);
-
-void gedit_message_bus_foreach (GeditMessageBus *bus,
- GeditMessageBusForeach func,
- gpointer userdata);
-
-
-/* connecting to message events */
-guint gedit_message_bus_connect (GeditMessageBus *bus,
- const gchar *object_path,
- const gchar *method,
- GeditMessageCallback callback,
- gpointer userdata,
- GDestroyNotify destroy_data);
-
-void gedit_message_bus_disconnect (GeditMessageBus *bus,
- guint id);
-
-void gedit_message_bus_disconnect_by_func (GeditMessageBus *bus,
- const gchar *object_path,
- const gchar *method,
- GeditMessageCallback callback,
- gpointer userdata);
-
-/* blocking message event callbacks */
-void gedit_message_bus_block (GeditMessageBus *bus,
- guint id);
-void gedit_message_bus_block_by_func (GeditMessageBus *bus,
- const gchar *object_path,
- const gchar *method,
- GeditMessageCallback callback,
- gpointer userdata);
-
-void gedit_message_bus_unblock (GeditMessageBus *bus,
- guint id);
-void gedit_message_bus_unblock_by_func (GeditMessageBus *bus,
- const gchar *object_path,
- const gchar *method,
- GeditMessageCallback callback,
- gpointer userdata);
-
-/* sending messages */
-void gedit_message_bus_send_message (GeditMessageBus *bus,
- GeditMessage *message);
-void gedit_message_bus_send_message_sync (GeditMessageBus *bus,
- GeditMessage *message);
-
-void gedit_message_bus_send (GeditMessageBus *bus,
- const gchar *object_path,
- const gchar *method,
- ...) G_GNUC_NULL_TERMINATED;
-GeditMessage *gedit_message_bus_send_sync (GeditMessageBus *bus,
- const gchar *object_path,
- const gchar *method,
- ...) G_GNUC_NULL_TERMINATED;
-
-G_END_DECLS
-
-#endif /* __GEDIT_MESSAGE_BUS_H__ */
-
-// ex:ts=8:noet:
diff --git a/gedit/gedit-message-type.c b/gedit/gedit-message-type.c
deleted file mode 100755
index 61e782b3..00000000
--- a/gedit/gedit-message-type.c
+++ /dev/null
@@ -1,526 +0,0 @@
-#include "gedit-message-type.h"
-
-/**
- * SECTION:gedit-message-type
- * @short_description: message type description
- * @include: gedit/gedit-message-type.h
- *
- * A message type is a prototype description for a #GeditMessage used to
- * transmit messages on a #GeditMessageBus. The message type describes
- * the Object Path, Method and Arguments of the message.
- *
- * A message type can contain any number of required and optional arguments.
- * To instantiate a #GeditMessage from a #GeditMessageType, use
- * gedit_message_type_instantiate().
- *
- * Registering a new message type on a #GeditMessageBus with
- * gedit_message_bus_register() internally creates a new #GeditMessageType. When
- * then using gedit_message_bus_send(), an actual instantiation of the
- * registered type is internally created and send over the bus.
- *
- * <example>
- * <programlisting>
- * // Defining a new message type
- * GeditMessageType *message_type = gedit_message_type_new ("/plugins/example",
- * "method",
- * 0,
- * "arg1", G_TYPE_STRING,
- * NULL);
- *
- * // Instantiating an actual message from the type
- * GeditMessage *message = gedit_message_type_instantiate (message_type,
- * "arg1", "Hello World",
- * NULL);
- * </programlisting>
- * </example>
- *
- * Since: 2.25.3
- *
- */
-typedef struct
-{
- GType type;
- gboolean required;
-} ArgumentInfo;
-
-struct _GeditMessageType
-{
- gint ref_count;
-
- gchar *object_path;
- gchar *method;
-
- guint num_arguments;
- guint num_required;
-
- GHashTable *arguments; // mapping of key -> ArgumentInfo
-};
-
-/**
- * gedit_message_type_ref:
- * @message_type: the #GeditMessageType
- *
- * Increases the reference count on @message_type.
- *
- * Return value: @message_type
- *
- */
-GeditMessageType *
-gedit_message_type_ref (GeditMessageType *message_type)
-{
- g_return_val_if_fail (message_type != NULL, NULL);
- g_atomic_int_inc (&message_type->ref_count);
-
- return message_type;
-}
-
-/**
- * gedit_message_type_unref:
- * @message_type: the #GeditMessageType
- *
- * Decreases the reference count on @message_type. When the reference count
- * drops to 0, @message_type is destroyed.
- *
- */
-void
-gedit_message_type_unref (GeditMessageType *message_type)
-{
- g_return_if_fail (message_type != NULL);
-
- if (!g_atomic_int_dec_and_test (&message_type->ref_count))
- return;
-
- g_free (message_type->object_path);
- g_free (message_type->method);
-
- g_hash_table_destroy (message_type->arguments);
- g_free (message_type);
-}
-
-/**
- * gedit_message_type_get_type:
- *
- * Retrieves the GType object which is associated with the
- * #GeditMessageType class.
- *
- * Return value: the GType associated with #GeditMessageType.
- **/
-GType
-gedit_message_type_get_type (void)
-{
- static GType our_type = 0;
-
- if (!our_type)
- our_type = g_boxed_type_register_static (
- "GeditMessageType",
- (GBoxedCopyFunc) gedit_message_type_ref,
- (GBoxedFreeFunc) gedit_message_type_unref);
-
- return our_type;
-}
-
-/**
- * gedit_message_type_identifier:
- * @object_path: the object path
- * @method: the method
- *
- * Get the string identifier for @method at @object_path.
- *
- * Return value: the identifier for @method at @object_path
- *
- */
-gchar *
-gedit_message_type_identifier (const gchar *object_path,
- const gchar *method)
-{
- return g_strconcat (object_path, ".", method, NULL);
-}
-
-/**
- * gedit_message_type_is_valid_object_path:
- * @object_path: the object path
- *
- * Returns whether @object_path is a valid object path
- *
- * Return value: %TRUE if @object_path is a valid object path
- *
- */
-gboolean
-gedit_message_type_is_valid_object_path (const gchar *object_path)
-{
- if (!object_path)
- return FALSE;
-
- /* needs to start with / */
- if (*object_path != '/')
- return FALSE;
-
- while (*object_path)
- {
- if (*object_path == '/')
- {
- ++object_path;
-
- if (!*object_path || !(g_ascii_isalpha (*object_path) || *object_path == '_'))
- return FALSE;
- }
- else if (!(g_ascii_isalnum (*object_path) || *object_path == '_'))
- {
- return FALSE;
- }
-
- ++object_path;
- }
-
- return TRUE;
-}
-
-/**
- * gedit_message_type_is_supported:
- * @type: the #GType
- *
- * Returns if @type is #GType supported by the message system.
- *
- * Return value: %TRUE if @type is a supported #GType
- *
- */
-gboolean
-gedit_message_type_is_supported (GType type)
-{
- gint i = 0;
-
- static const GType type_list[] =
- {
- G_TYPE_BOOLEAN,
- G_TYPE_CHAR,
- G_TYPE_UCHAR,
- G_TYPE_INT,
- G_TYPE_UINT,
- G_TYPE_LONG,
- G_TYPE_ULONG,
- G_TYPE_INT64,
- G_TYPE_UINT64,
- G_TYPE_ENUM,
- G_TYPE_FLAGS,
- G_TYPE_FLOAT,
- G_TYPE_DOUBLE,
- G_TYPE_STRING,
- G_TYPE_POINTER,
- G_TYPE_BOXED,
- G_TYPE_OBJECT,
- G_TYPE_INVALID
- };
-
- if (!G_TYPE_IS_VALUE_TYPE (type))
- return FALSE;
-
- while (type_list[i] != G_TYPE_INVALID)
- {
- if (g_type_is_a (type, type_list[i]))
- return TRUE;
- i++;
- }
-
- return FALSE;
-}
-
-/**
- * gedit_message_type_new_valist:
- * @object_path: the object path
- * @method: the method
- * @num_optional: number of optional arguments
- * @var_args: key/gtype pair variable argument list
- *
- * Create a new #GeditMessageType for @method at @object_path. Argument names
- * and values are supplied by the NULL terminated variable argument list.
- * The last @num_optional provided arguments are considered optional.
- *
- * Return value: the newly constructed #GeditMessageType
- *
- */
-GeditMessageType *
-gedit_message_type_new_valist (const gchar *object_path,
- const gchar *method,
- guint num_optional,
- va_list var_args)
-{
- GeditMessageType *message_type;
-
- g_return_val_if_fail (object_path != NULL, NULL);
- g_return_val_if_fail (method != NULL, NULL);
- g_return_val_if_fail (gedit_message_type_is_valid_object_path (object_path), NULL);
-
- message_type = g_new0(GeditMessageType, 1);
-
- message_type->ref_count = 1;
- message_type->object_path = g_strdup(object_path);
- message_type->method = g_strdup(method);
- message_type->num_arguments = 0;
- message_type->arguments = g_hash_table_new_full (g_str_hash,
- g_str_equal,
- (GDestroyNotify)g_free,
- (GDestroyNotify)g_free);
-
- gedit_message_type_set_valist (message_type, num_optional, var_args);
- return message_type;
-}
-
-/**
- * gedit_message_type_new:
- * @object_path: the object path
- * @method: the method
- * @num_optional: number of optional arguments
- * @...: key/gtype pair variable argument list
- *
- * Create a new #GeditMessageType for @method at @object_path. Argument names
- * and values are supplied by the NULL terminated variable argument list.
- * The last @num_optional provided arguments are considered optional.
- *
- * Return value: the newly constructed #GeditMessageType
- *
- */
-GeditMessageType *
-gedit_message_type_new (const gchar *object_path,
- const gchar *method,
- guint num_optional,
- ...)
-{
- GeditMessageType *message_type;
- va_list var_args;
-
- va_start(var_args, num_optional);
- message_type = gedit_message_type_new_valist (object_path, method, num_optional, var_args);
- va_end(var_args);
-
- return message_type;
-}
-
-/**
- * gedit_message_type_set:
- * @message_type: the #GeditMessageType
- * @num_optional: number of optional arguments
- * @...: key/gtype pair variable argument list
- *
- * Sets argument names/types supplied by the NULL terminated variable
- * argument list. The last @num_optional provided arguments are considered
- * optional.
- *
- */
-void
-gedit_message_type_set (GeditMessageType *message_type,
- guint num_optional,
- ...)
-{
- va_list va_args;
-
- va_start (va_args, num_optional);
- gedit_message_type_set_valist (message_type, num_optional, va_args);
- va_end (va_args);
-}
-
-/**
- * gedit_message_type_set_valist:
- * @message_type: the #GeditMessageType
- * @num_optional: number of optional arguments
- * @var_args: key/gtype pair variable argument list
- *
- * Sets argument names/types supplied by the NULL terminated variable
- * argument list @var_args. The last @num_optional provided arguments are
- * considered optional.
- *
- */
-void
-gedit_message_type_set_valist (GeditMessageType *message_type,
- guint num_optional,
- va_list var_args)
-{
- const gchar *key;
- ArgumentInfo **optional = g_new0(ArgumentInfo *, num_optional);
- guint i;
- guint added = 0;
-
- // parse key -> gtype pair arguments
- while ((key = va_arg (var_args, const gchar *)) != NULL)
- {
- // get corresponding GType
- GType gtype = va_arg (var_args, GType);
- ArgumentInfo *info;
-
- if (!gedit_message_type_is_supported (gtype))
- {
- g_error ("Message type '%s' is not supported", g_type_name (gtype));
-
- gedit_message_type_unref (message_type);
- g_free (optional);
-
- return;
- }
-
- info = g_new(ArgumentInfo, 1);
- info->type = gtype;
- info->required = TRUE;
-
- g_hash_table_insert (message_type->arguments, g_strdup (key), info);
-
- ++message_type->num_arguments;
- ++added;
-
- if (num_optional > 0)
- {
- for (i = num_optional - 1; i > 0; --i)
- optional[i] = optional[i - 1];
-
- *optional = info;
- }
- }
-
- message_type->num_required += added;
-
- // set required for last num_optional arguments
- for (i = 0; i < num_optional; ++i)
- {
- if (optional[i])
- {
- optional[i]->required = FALSE;
- --message_type->num_required;
- }
- }
-
- g_free (optional);
-}
-
-/**
- * gedit_message_type_instantiate_valist:
- * @message_type: the #GeditMessageType
- * @va_args: NULL terminated variable list of key/value pairs
- *
- * Instantiate a new message from the message type with specific values
- * for the message arguments.
- *
- * Return value: the newly created message
- *
- */
-GeditMessage *
-gedit_message_type_instantiate_valist (GeditMessageType *message_type,
- va_list va_args)
-{
- GeditMessage *message;
-
- g_return_val_if_fail (message_type != NULL, NULL);
-
- message = GEDIT_MESSAGE (g_object_new (GEDIT_TYPE_MESSAGE, "type", message_type, NULL));
- gedit_message_set_valist (message, va_args);
-
- return message;
-}
-
-/**
- * gedit_message_type_instantiate:
- * @message_type: the #GeditMessageType
- * @...: NULL terminated variable list of key/value pairs
- *
- * Instantiate a new message from the message type with specific values
- * for the message arguments.
- *
- * Return value: the newly created message
- *
- */
-GeditMessage *
-gedit_message_type_instantiate (GeditMessageType *message_type,
- ...)
-{
- GeditMessage *message;
- va_list va_args;
-
- va_start (va_args, message_type);
- message = gedit_message_type_instantiate_valist (message_type, va_args);
- va_end (va_args);
-
- return message;
-}
-
-/**
- * gedit_message_type_get_object_path:
- * @message_type: the #GeditMessageType
- *
- * Get the message type object path.
- *
- * Return value: the message type object path
- *
- */
-const gchar *
-gedit_message_type_get_object_path (GeditMessageType *message_type)
-{
- return message_type->object_path;
-}
-
-/**
- * gedit_message_type_get_method:
- * @message_type: the #GeditMessageType
- *
- * Get the message type method.
- *
- * Return value: the message type method
- *
- */
-const gchar *
-gedit_message_type_get_method (GeditMessageType *message_type)
-{
- return message_type->method;
-}
-
-/**
- * gedit_message_type_lookup:
- * @message_type: the #GeditMessageType
- * @key: the argument key
- *
- * Get the argument key #GType.
- *
- * Return value: the #GType of @key
- *
- */
-GType
-gedit_message_type_lookup (GeditMessageType *message_type,
- const gchar *key)
-{
- ArgumentInfo *info = g_hash_table_lookup (message_type->arguments, key);
-
- if (!info)
- return G_TYPE_INVALID;
-
- return info->type;
-}
-
-typedef struct
-{
- GeditMessageTypeForeach func;
- gpointer user_data;
-} ForeachInfo;
-
-static void
-foreach_gtype (const gchar *key,
- ArgumentInfo *info,
- ForeachInfo *finfo)
-{
- finfo->func (key, info->type, info->required, finfo->user_data);
-}
-
-/**
- * gedit_message_type_foreach:
- * @message_type: the #GeditMessageType
- * @func: the callback function
- * @user_data: user data supplied to the callback function
- *
- * Calls @func for each argument in the message type.
- *
- */
-void
-gedit_message_type_foreach (GeditMessageType *message_type,
- GeditMessageTypeForeach func,
- gpointer user_data)
-{
- ForeachInfo info = {func, user_data};
- g_hash_table_foreach (message_type->arguments, (GHFunc)foreach_gtype, &info);
-}
-
-// ex:ts=8:noet:
diff --git a/gedit/gedit-message-type.h b/gedit/gedit-message-type.h
deleted file mode 100755
index d3140cdc..00000000
--- a/gedit/gedit-message-type.h
+++ /dev/null
@@ -1,67 +0,0 @@
-#ifndef __GEDIT_MESSAGE_TYPE_H__
-#define __GEDIT_MESSAGE_TYPE_H__
-
-#include <glib-object.h>
-#include <stdarg.h>
-
-#include "gedit-message.h"
-
-G_BEGIN_DECLS
-
-#define GEDIT_TYPE_MESSAGE_TYPE (gedit_message_type_get_type ())
-#define GEDIT_MESSAGE_TYPE(x) ((GeditMessageType *)(x))
-
-typedef void (*GeditMessageTypeForeach) (const gchar *key,
- GType type,
- gboolean required,
- gpointer user_data);
-
-typedef struct _GeditMessageType GeditMessageType;
-
-GType gedit_message_type_get_type (void) G_GNUC_CONST;
-
-gboolean gedit_message_type_is_supported (GType type);
-gchar *gedit_message_type_identifier (const gchar *object_path,
- const gchar *method);
-gboolean gedit_message_type_is_valid_object_path (const gchar *object_path);
-
-GeditMessageType *gedit_message_type_new (const gchar *object_path,
- const gchar *method,
- guint num_optional,
- ...) G_GNUC_NULL_TERMINATED;
-GeditMessageType *gedit_message_type_new_valist (const gchar *object_path,
- const gchar *method,
- guint num_optional,
- va_list va_args);
-
-void gedit_message_type_set (GeditMessageType *message_type,
- guint num_optional,
- ...) G_GNUC_NULL_TERMINATED;
-void gedit_message_type_set_valist (GeditMessageType *message_type,
- guint num_optional,
- va_list va_args);
-
-GeditMessageType *gedit_message_type_ref (GeditMessageType *message_type);
-void gedit_message_type_unref (GeditMessageType *message_type);
-
-
-GeditMessage *gedit_message_type_instantiate_valist (GeditMessageType *message_type,
- va_list va_args);
-GeditMessage *gedit_message_type_instantiate (GeditMessageType *message_type,
- ...) G_GNUC_NULL_TERMINATED;
-
-const gchar *gedit_message_type_get_object_path (GeditMessageType *message_type);
-const gchar *gedit_message_type_get_method (GeditMessageType *message_type);
-
-GType gedit_message_type_lookup (GeditMessageType *message_type,
- const gchar *key);
-
-void gedit_message_type_foreach (GeditMessageType *message_type,
- GeditMessageTypeForeach func,
- gpointer user_data);
-
-G_END_DECLS
-
-#endif /* __GEDIT_MESSAGE_TYPE_H__ */
-
-// ex:ts=8:noet:
diff --git a/gedit/gedit-message.c b/gedit/gedit-message.c
deleted file mode 100755
index f1e12daa..00000000
--- a/gedit/gedit-message.c
+++ /dev/null
@@ -1,593 +0,0 @@
-#include "gedit-message.h"
-#include "gedit-message-type.h"
-
-#include <string.h>
-#include <gobject/gvaluecollector.h>
-
-/**
- * SECTION:gedit-message
- * @short_description: message bus message object
- * @include: gedit/gedit-message.h
- *
- * Communication on a #GeditMessageBus is done through messages. Messages are
- * sent over the bus and received by connecting callbacks on the message bus.
- * A #GeditMessage is an instantiation of a #GeditMessageType, containing
- * values for the arguments as specified in the message type.
- *
- * A message can be seen as a method call, or signal emission depending on
- * who is the sender and who is the receiver. There is no explicit distinction
- * between methods and signals.
- *
- * Since: 2.25.3
- *
- */
-#define GEDIT_MESSAGE_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE((object), GEDIT_TYPE_MESSAGE, GeditMessagePrivate))
-
-enum {
- PROP_0,
-
- PROP_OBJECT_PATH,
- PROP_METHOD,
- PROP_TYPE
-};
-
-struct _GeditMessagePrivate
-{
- GeditMessageType *type;
- gboolean valid;
-
- GHashTable *values;
-};
-
-G_DEFINE_TYPE (GeditMessage, gedit_message, G_TYPE_OBJECT)
-
-static void
-gedit_message_finalize (GObject *object)
-{
- GeditMessage *message = GEDIT_MESSAGE (object);
-
- gedit_message_type_unref (message->priv->type);
- g_hash_table_destroy (message->priv->values);
-
- G_OBJECT_CLASS (gedit_message_parent_class)->finalize (object);
-}
-
-static void
-gedit_message_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- GeditMessage *msg = GEDIT_MESSAGE (object);
-
- switch (prop_id)
- {
- case PROP_OBJECT_PATH:
- g_value_set_string (value, gedit_message_type_get_object_path (msg->priv->type));
- break;
- case PROP_METHOD:
- g_value_set_string (value, gedit_message_type_get_method (msg->priv->type));
- break;
- case PROP_TYPE:
- g_value_set_boxed (value, msg->priv->type);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gedit_message_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- GeditMessage *msg = GEDIT_MESSAGE (object);
-
- switch (prop_id)
- {
- case PROP_TYPE:
- msg->priv->type = GEDIT_MESSAGE_TYPE (g_value_dup_boxed (value));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static GValue *
-add_value (GeditMessage *message,
- const gchar *key)
-{
- GValue *value;
- GType type = gedit_message_type_lookup (message->priv->type, key);
-
- if (type == G_TYPE_INVALID)
- return NULL;
-
- value = g_new0 (GValue, 1);
- g_value_init (value, type);
- g_value_reset (value);
-
- g_hash_table_insert (message->priv->values, g_strdup (key), value);
-
- return value;
-}
-
-static void
-gedit_message_class_init (GeditMessageClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS(klass);
-
- object_class->finalize = gedit_message_finalize;
- object_class->get_property = gedit_message_get_property;
- object_class->set_property = gedit_message_set_property;
-
- /**
- * GeditMessage:object_path:
- *
- * The messages object path (e.g. /gedit/object/path).
- *
- */
- g_object_class_install_property (object_class, PROP_OBJECT_PATH,
- g_param_spec_string ("object-path",
- "OBJECT_PATH",
- "The message object path",
- NULL,
- G_PARAM_READABLE |
- G_PARAM_STATIC_STRINGS));
-
- /**
- * GeditMessage:method:
- *
- * The messages method.
- *
- */
- g_object_class_install_property (object_class, PROP_METHOD,
- g_param_spec_string ("method",
- "METHOD",
- "The message method",
- NULL,
- G_PARAM_READABLE |
- G_PARAM_STATIC_STRINGS));
-
- /**
- * GeditMEssage:type:
- *
- * The message type.
- *
- */
- g_object_class_install_property (object_class, PROP_TYPE,
- g_param_spec_boxed ("type",
- "TYPE",
- "The message type",
- GEDIT_TYPE_MESSAGE_TYPE,
- G_PARAM_READWRITE |
- G_PARAM_CONSTRUCT_ONLY |
- G_PARAM_STATIC_STRINGS));
-
- g_type_class_add_private (object_class, sizeof(GeditMessagePrivate));
-}
-
-static void
-destroy_value (GValue *value)
-{
- g_value_unset (value);
- g_free (value);
-}
-
-static void
-gedit_message_init (GeditMessage *self)
-{
- self->priv = GEDIT_MESSAGE_GET_PRIVATE (self);
-
- self->priv->values = g_hash_table_new_full (g_str_hash,
- g_str_equal,
- (GDestroyNotify)g_free,
- (GDestroyNotify)destroy_value);
-}
-
-static gboolean
-set_value_real (GValue *to,
- const GValue *from)
-{
- GType from_type;
- GType to_type;
-
- from_type = G_VALUE_TYPE (from);
- to_type = G_VALUE_TYPE (to);
-
- if (!g_type_is_a (from_type, to_type))
- {
- if (!g_value_transform (from, to))
- {
- g_warning ("%s: Unable to make conversion from %s to %s",
- G_STRLOC,
- g_type_name (from_type),
- g_type_name (to_type));
- return FALSE;
- }
-
- return TRUE;
- }
-
- g_value_copy (from, to);
- return TRUE;
-}
-
-inline static GValue *
-value_lookup (GeditMessage *message,
- const gchar *key,
- gboolean create)
-{
- GValue *ret = (GValue *)g_hash_table_lookup (message->priv->values, key);
-
- if (!ret && create)
- ret = add_value (message, key);
-
- return ret;
-}
-
-/**
- * gedit_message_get_method:
- * @message: the #GeditMessage
- *
- * Get the message method.
- *
- * Return value: the message method
- *
- */
-const gchar *
-gedit_message_get_method (GeditMessage *message)
-{
- g_return_val_if_fail (GEDIT_IS_MESSAGE (message), NULL);
-
- return gedit_message_type_get_method (message->priv->type);
-}
-
-/**
- * gedit_message_get_object_path:
- * @message: the #GeditMessage
- *
- * Get the message object path.
- *
- * Return value: the message object path
- *
- */
-const gchar *
-gedit_message_get_object_path (GeditMessage *message)
-{
- g_return_val_if_fail (GEDIT_IS_MESSAGE (message), NULL);
-
- return gedit_message_type_get_object_path (message->priv->type);
-}
-
-/**
- * gedit_message_set:
- * @message: the #GeditMessage
- * @...: a NULL terminated variable list of key/value pairs
- *
- * Set values of message arguments. The supplied @var_args should contain
- * pairs of keys and argument values.
- *
- */
-void
-gedit_message_set (GeditMessage *message,
- ...)
-{
- va_list ap;
-
- g_return_if_fail (GEDIT_IS_MESSAGE (message));
-
- va_start (ap, message);
- gedit_message_set_valist (message, ap);
- va_end (ap);
-}
-
-/**
- * gedit_message_set_valist:
- * @message: the #GeditMessage
- * @var_args: a NULL terminated variable list of key/value pairs
- *
- * Set values of message arguments. The supplied @var_args should contain
- * pairs of keys and argument values.
- *
- */
-void
-gedit_message_set_valist (GeditMessage *message,
- va_list var_args)
-{
- const gchar *key;
-
- g_return_if_fail (GEDIT_IS_MESSAGE (message));
-
- while ((key = va_arg (var_args, const gchar *)) != NULL)
- {
- /* lookup the key */
- GValue *container = value_lookup (message, key, TRUE);
- GValue value = {0,};
- gchar *error = NULL;
-
- if (!container)
- {
- g_warning ("%s: Cannot set value for %s, does not exist",
- G_STRLOC,
- key);
-
- /* skip value */
- va_arg (var_args, gpointer);
- continue;
- }
-
- g_value_init (&value, G_VALUE_TYPE (container));
- G_VALUE_COLLECT (&value, var_args, 0, &error);
-
- if (error)
- {
- g_warning ("%s: %s", G_STRLOC, error);
- continue;
- }
-
- set_value_real (container, &value);
- g_value_unset (&value);
- }
-}
-
-/**
- * gedit_message_set_value:
- * @message: the #GeditMessage
- * @key: the argument key
- * @value: the argument value
- *
- * Set value of message argument @key to @value.
- *
- */
-void
-gedit_message_set_value (GeditMessage *message,
- const gchar *key,
- GValue *value)
-{
- GValue *container;
- g_return_if_fail (GEDIT_IS_MESSAGE (message));
-
- container = value_lookup (message, key, TRUE);
-
- if (!container)
- {
- g_warning ("%s: Cannot set value for %s, does not exist",
- G_STRLOC,
- key);
- return;
- }
-
- set_value_real (container, value);
-}
-
-/**
- * gedit_message_set_valuesv:
- * @message: the #GeditMessage
- * @keys: keys to set values for
- * @values: values to set
- * @n_values: number of arguments to set values for
- *
- * Set message argument values.
- *
- */
-void
-gedit_message_set_valuesv (GeditMessage *message,
- const gchar **keys,
- GValue *values,
- gint n_values)
-{
- gint i;
-
- g_return_if_fail (GEDIT_IS_MESSAGE (message));
-
- for (i = 0; i < n_values; i++)
- {
- gedit_message_set_value (message, keys[i], &values[i]);
- }
-}
-
-/**
- * gedit_message_get:
- * @message: the #GeditMessage
- * @...: a NULL variable argument list of key/value container pairs
- *
- * Get values of message arguments. The supplied @var_args should contain
- * pairs of keys and pointers to variables which are set to the argument
- * value for the specified key.
- *
- */
-void
-gedit_message_get (GeditMessage *message,
- ...)
-{
- va_list ap;
-
- g_return_if_fail (GEDIT_IS_MESSAGE (message));
-
- va_start (ap, message);
- gedit_message_get_valist (message, ap);
- va_end (ap);
-}
-
-/**
- * gedit_message_get_valist:
- * @message: the #GeditMessage
- * @var_args: a NULL variable argument list of key/value container pairs
- *
- * Get values of message arguments. The supplied @var_args should contain
- * pairs of keys and pointers to variables which are set to the argument
- * value for the specified key.
- *
- */
-void
-gedit_message_get_valist (GeditMessage *message,
- va_list var_args)
-{
- const gchar *key;
-
- g_return_if_fail (GEDIT_IS_MESSAGE (message));
-
- while ((key = va_arg (var_args, const gchar *)) != NULL)
- {
- GValue *container;
- GValue copy = {0,};
- gchar *error = NULL;
-
- container = value_lookup (message, key, FALSE);
-
- if (!container)
- {
- /* skip value */
- va_arg (var_args, gpointer);
- continue;
- }
-
- /* copy the value here, to be sure it isn't tainted */
- g_value_init (&copy, G_VALUE_TYPE (container));
- g_value_copy (container, &copy);
-
- G_VALUE_LCOPY (&copy, var_args, 0, &error);
-
- if (error)
- {
- g_warning ("%s: %s", G_STRLOC, error);
- g_free (error);
-
- /* purposely leak the value here, because it might
- be in a bad state */
- continue;
- }
-
- g_value_unset (&copy);
- }
-}
-
-/**
- * gedit_message_get_value:
- * @message: the #GeditMessage
- * @key: the argument key
- * @value: value return container
- *
- * Get the value of a specific message argument. @value will be initialized
- * with the correct type.
- *
- */
-void
-gedit_message_get_value (GeditMessage *message,
- const gchar *key,
- GValue *value)
-{
- GValue *container;
-
- g_return_if_fail (GEDIT_IS_MESSAGE (message));
-
- container = value_lookup (message, key, FALSE);
-
- if (!container)
- {
- g_warning ("%s: Invalid key `%s'",
- G_STRLOC,
- key);
- return;
- }
-
- g_value_init (value, G_VALUE_TYPE (container));
- set_value_real (value, container);
-}
-
-/**
- * gedit_message_get_key_type:
- * @message: the #GeditMessage
- * @key: the argument key
- *
- * Get the type of a message argument.
- *
- * Return value: the type of @key
- *
- */
-GType
-gedit_message_get_key_type (GeditMessage *message,
- const gchar *key)
-{
- g_return_val_if_fail (GEDIT_IS_MESSAGE (message), G_TYPE_INVALID);
- g_return_val_if_fail (message->priv->type != NULL, G_TYPE_INVALID);
-
- return gedit_message_type_lookup (message->priv->type, key);
-}
-
-/**
- * gedit_message_has_key:
- * @message: the #GeditMessage
- * @key: the argument key
- *
- * Check whether the message has a specific key.
- *
- * Return value: %TRUE if @message has argument @key
- *
- */
-gboolean
-gedit_message_has_key (GeditMessage *message,
- const gchar *key)
-{
- g_return_val_if_fail (GEDIT_IS_MESSAGE (message), FALSE);
-
- return value_lookup (message, key, FALSE) != NULL;
-}
-
-typedef struct
-{
- GeditMessage *message;
- gboolean valid;
-} ValidateInfo;
-
-static void
-validate_key (const gchar *key,
- GType type,
- gboolean required,
- ValidateInfo *info)
-{
- GValue *value;
-
- if (!info->valid || !required)
- return;
-
- value = value_lookup (info->message, key, FALSE);
-
- if (!value)
- info->valid = FALSE;
-}
-
-/**
- * gedit_message_validate:
- * @message: the #GeditMessage
- *
- * Validates the message arguments according to the message type.
- *
- * Return value: %TRUE if the message is valid
- *
- */
-gboolean
-gedit_message_validate (GeditMessage *message)
-{
- ValidateInfo info = {message, TRUE};
-
- g_return_val_if_fail (GEDIT_IS_MESSAGE (message), FALSE);
- g_return_val_if_fail (message->priv->type != NULL, FALSE);
-
- if (!message->priv->valid)
- {
- gedit_message_type_foreach (message->priv->type,
- (GeditMessageTypeForeach)validate_key,
- &info);
-
- message->priv->valid = info.valid;
- }
-
- return message->priv->valid;
-}
-
-// ex:ts=8:noet:
diff --git a/gedit/gedit-message.h b/gedit/gedit-message.h
deleted file mode 100755
index 9d17ac9e..00000000
--- a/gedit/gedit-message.h
+++ /dev/null
@@ -1,71 +0,0 @@
-#ifndef __GEDIT_MESSAGE_H__
-#define __GEDIT_MESSAGE_H__
-
-#include <glib-object.h>
-#include <stdarg.h>
-
-G_BEGIN_DECLS
-
-#define GEDIT_TYPE_MESSAGE (gedit_message_get_type ())
-#define GEDIT_MESSAGE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEDIT_TYPE_MESSAGE, GeditMessage))
-#define GEDIT_MESSAGE_CONST(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEDIT_TYPE_MESSAGE, GeditMessage const))
-#define GEDIT_MESSAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEDIT_TYPE_MESSAGE, GeditMessageClass))
-#define GEDIT_IS_MESSAGE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEDIT_TYPE_MESSAGE))
-#define GEDIT_IS_MESSAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEDIT_TYPE_MESSAGE))
-#define GEDIT_MESSAGE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEDIT_TYPE_MESSAGE, GeditMessageClass))
-
-typedef struct _GeditMessage GeditMessage;
-typedef struct _GeditMessageClass GeditMessageClass;
-typedef struct _GeditMessagePrivate GeditMessagePrivate;
-
-struct _GeditMessage {
- GObject parent;
-
- GeditMessagePrivate *priv;
-};
-
-struct _GeditMessageClass {
- GObjectClass parent_class;
-};
-
-GType gedit_message_get_type (void) G_GNUC_CONST;
-
-struct _GeditMessageType gedit_message_get_message_type (GeditMessage *message);
-
-void gedit_message_get (GeditMessage *message,
- ...) G_GNUC_NULL_TERMINATED;
-void gedit_message_get_valist (GeditMessage *message,
- va_list var_args);
-void gedit_message_get_value (GeditMessage *message,
- const gchar *key,
- GValue *value);
-
-void gedit_message_set (GeditMessage *message,
- ...) G_GNUC_NULL_TERMINATED;
-void gedit_message_set_valist (GeditMessage *message,
- va_list var_args);
-void gedit_message_set_value (GeditMessage *message,
- const gchar *key,
- GValue *value);
-void gedit_message_set_valuesv (GeditMessage *message,
- const gchar **keys,
- GValue *values,
- gint n_values);
-
-const gchar *gedit_message_get_object_path (GeditMessage *message);
-const gchar *gedit_message_get_method (GeditMessage *message);
-
-gboolean gedit_message_has_key (GeditMessage *message,
- const gchar *key);
-
-GType gedit_message_get_key_type (GeditMessage *message,
- const gchar *key);
-
-gboolean gedit_message_validate (GeditMessage *message);
-
-
-G_END_DECLS
-
-#endif /* __GEDIT_MESSAGE_H__ */
-
-// ex:ts=8:noet:
diff --git a/gedit/gedit-metadata-manager.c b/gedit/gedit-metadata-manager.c
deleted file mode 100755
index bdb00fff..00000000
--- a/gedit/gedit-metadata-manager.c
+++ /dev/null
@@ -1,563 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * gedit-metadata-manager.c
- * This file is part of gedit
- *
- * Copyright (C) 2003-2007 Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2003-2007. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <time.h>
-#include <stdlib.h>
-#include <libxml/xmlreader.h>
-#include "gedit-metadata-manager.h"
-#include "gedit-debug.h"
-#include "gedit-dirs.h"
-
-/*
-#define GEDIT_METADATA_VERBOSE_DEBUG 1
-*/
-
-#define METADATA_FILE "gedit-metadata.xml"
-
-#define MAX_ITEMS 50
-
-typedef struct _GeditMetadataManager GeditMetadataManager;
-
-typedef struct _Item Item;
-
-struct _Item
-{
- time_t atime; /* time of last access */
-
- GHashTable *values;
-};
-
-struct _GeditMetadataManager
-{
- gboolean values_loaded; /* It is true if the file
- has been read */
-
- guint timeout_id;
-
- GHashTable *items;
-};
-
-static gboolean gedit_metadata_manager_save (gpointer data);
-
-
-static GeditMetadataManager *gedit_metadata_manager = NULL;
-
-static void
-item_free (gpointer data)
-{
- Item *item;
-
- g_return_if_fail (data != NULL);
-
-#ifdef GEDIT_METADATA_VERBOSE_DEBUG
- gedit_debug (DEBUG_METADATA);
-#endif
-
- item = (Item *)data;
-
- if (item->values != NULL)
- g_hash_table_destroy (item->values);
-
- g_free (item);
-}
-
-static void
-gedit_metadata_manager_arm_timeout (void)
-{
- if (gedit_metadata_manager->timeout_id == 0)
- {
- gedit_metadata_manager->timeout_id =
- g_timeout_add_seconds_full (G_PRIORITY_DEFAULT_IDLE,
- 2,
- (GSourceFunc)gedit_metadata_manager_save,
- NULL,
- NULL);
- }
-}
-
-static gboolean
-gedit_metadata_manager_init (void)
-{
- gedit_debug (DEBUG_METADATA);
-
- if (gedit_metadata_manager != NULL)
- return TRUE;
-
- gedit_metadata_manager = g_new0 (GeditMetadataManager, 1);
-
- gedit_metadata_manager->values_loaded = FALSE;
-
- gedit_metadata_manager->items =
- g_hash_table_new_full (g_str_hash,
- g_str_equal,
- g_free,
- item_free);
-
- return TRUE;
-}
-
-/* This function must be called before exiting gedit */
-void
-gedit_metadata_manager_shutdown (void)
-{
- gedit_debug (DEBUG_METADATA);
-
- if (gedit_metadata_manager == NULL)
- return;
-
- if (gedit_metadata_manager->timeout_id)
- {
- g_source_remove (gedit_metadata_manager->timeout_id);
- gedit_metadata_manager->timeout_id = 0;
- gedit_metadata_manager_save (NULL);
- }
-
- if (gedit_metadata_manager->items != NULL)
- g_hash_table_destroy (gedit_metadata_manager->items);
-
- g_free (gedit_metadata_manager);
- gedit_metadata_manager = NULL;
-}
-
-static void
-parseItem (xmlDocPtr doc, xmlNodePtr cur)
-{
- Item *item;
-
- xmlChar *uri;
- xmlChar *atime;
-
-#ifdef GEDIT_METADATA_VERBOSE_DEBUG
- gedit_debug (DEBUG_METADATA);
-#endif
-
- if (xmlStrcmp (cur->name, (const xmlChar *)"document") != 0)
- return;
-
- uri = xmlGetProp (cur, (const xmlChar *)"uri");
- if (uri == NULL)
- return;
-
- atime = xmlGetProp (cur, (const xmlChar *)"atime");
- if (atime == NULL)
- {
- xmlFree (uri);
- return;
- }
-
- item = g_new0 (Item, 1);
-
- item->atime = g_ascii_strtoull ((char *)atime, NULL, 0);
-
- item->values = g_hash_table_new_full (g_str_hash,
- g_str_equal,
- g_free,
- g_free);
-
- cur = cur->xmlChildrenNode;
-
- while (cur != NULL)
- {
- if (xmlStrcmp (cur->name, (const xmlChar *)"entry") == 0)
- {
- xmlChar *key;
- xmlChar *value;
-
- key = xmlGetProp (cur, (const xmlChar *)"key");
- value = xmlGetProp (cur, (const xmlChar *)"value");
-
- if ((key != NULL) && (value != NULL))
- g_hash_table_insert (item->values,
- g_strdup ((gchar *)key),
- g_strdup ((gchar *)value));
-
- if (key != NULL)
- xmlFree (key);
- if (value != NULL)
- xmlFree (value);
- }
-
- cur = cur->next;
- }
-
- g_hash_table_insert (gedit_metadata_manager->items,
- g_strdup ((gchar *)uri),
- item);
-
- xmlFree (uri);
- xmlFree (atime);
-}
-
-static gchar *
-get_metadata_filename (void)
-{
- gchar *cache_dir;
- gchar *metadata;
-
- cache_dir = gedit_dirs_get_user_cache_dir ();
-
- metadata = g_build_filename (cache_dir,
- METADATA_FILE,
- NULL);
-
- g_free (cache_dir);
-
- return metadata;
-}
-
-static gboolean
-load_values (void)
-{
- xmlDocPtr doc;
- xmlNodePtr cur;
- gchar *file_name;
-
- gedit_debug (DEBUG_METADATA);
-
- g_return_val_if_fail (gedit_metadata_manager != NULL, FALSE);
- g_return_val_if_fail (gedit_metadata_manager->values_loaded == FALSE, FALSE);
-
- gedit_metadata_manager->values_loaded = TRUE;
-
- xmlKeepBlanksDefault (0);
-
- /* FIXME: file locking - Paolo */
- file_name = get_metadata_filename ();
- if ((file_name == NULL) ||
- (!g_file_test (file_name, G_FILE_TEST_EXISTS)))
- {
- g_free (file_name);
- return FALSE;
- }
-
- doc = xmlParseFile (file_name);
- g_free (file_name);
-
- if (doc == NULL)
- {
- return FALSE;
- }
-
- cur = xmlDocGetRootElement (doc);
- if (cur == NULL)
- {
- g_message ("The metadata file '%s' is empty", METADATA_FILE);
- xmlFreeDoc (doc);
-
- return FALSE;
- }
-
- if (xmlStrcmp (cur->name, (const xmlChar *) "metadata"))
- {
- g_message ("File '%s' is of the wrong type", METADATA_FILE);
- xmlFreeDoc (doc);
-
- return FALSE;
- }
-
- cur = xmlDocGetRootElement (doc);
- cur = cur->xmlChildrenNode;
-
- while (cur != NULL)
- {
- parseItem (doc, cur);
-
- cur = cur->next;
- }
-
- xmlFreeDoc (doc);
-
- return TRUE;
-}
-
-gchar *
-gedit_metadata_manager_get (const gchar *uri,
- const gchar *key)
-{
- Item *item;
- gchar *value;
-
- g_return_val_if_fail (uri != NULL, NULL);
- g_return_val_if_fail (key != NULL, NULL);
-
- gedit_debug_message (DEBUG_METADATA, "URI: %s --- key: %s", uri, key );
-
- gedit_metadata_manager_init ();
-
- if (!gedit_metadata_manager->values_loaded)
- {
- gboolean res;
-
- res = load_values ();
-
- if (!res)
- return NULL;
- }
-
- item = (Item *)g_hash_table_lookup (gedit_metadata_manager->items,
- uri);
-
- if (item == NULL)
- return NULL;
-
- item->atime = time (NULL);
-
- if (item->values == NULL)
- return NULL;
-
- value = g_hash_table_lookup (item->values, key);
-
- if (value == NULL)
- return NULL;
- else
- return g_strdup (value);
-}
-
-void
-gedit_metadata_manager_set (const gchar *uri,
- const gchar *key,
- const gchar *value)
-{
- Item *item;
-
- g_return_if_fail (uri != NULL);
- g_return_if_fail (key != NULL);
-
- gedit_debug_message (DEBUG_METADATA, "URI: %s --- key: %s --- value: %s", uri, key, value);
-
- gedit_metadata_manager_init ();
-
- if (!gedit_metadata_manager->values_loaded)
- {
- gboolean res;
-
- res = load_values ();
-
- if (!res)
- return;
- }
-
- item = (Item *)g_hash_table_lookup (gedit_metadata_manager->items,
- uri);
-
- if (item == NULL)
- {
- item = g_new0 (Item, 1);
-
- g_hash_table_insert (gedit_metadata_manager->items,
- g_strdup (uri),
- item);
- }
-
- if (item->values == NULL)
- item->values = g_hash_table_new_full (g_str_hash,
- g_str_equal,
- g_free,
- g_free);
- if (value != NULL)
- g_hash_table_insert (item->values,
- g_strdup (key),
- g_strdup (value));
- else
- g_hash_table_remove (item->values,
- key);
-
- item->atime = time (NULL);
-
- gedit_metadata_manager_arm_timeout ();
-}
-
-static void
-save_values (const gchar *key, const gchar *value, xmlNodePtr parent)
-{
- xmlNodePtr xml_node;
-
-#ifdef GEDIT_METADATA_VERBOSE_DEBUG
- gedit_debug (DEBUG_METADATA);
-#endif
-
- g_return_if_fail (key != NULL);
-
- if (value == NULL)
- return;
-
- xml_node = xmlNewChild (parent,
- NULL,
- (const xmlChar *)"entry",
- NULL);
-
- xmlSetProp (xml_node,
- (const xmlChar *)"key",
- (const xmlChar *)key);
- xmlSetProp (xml_node,
- (const xmlChar *)"value",
- (const xmlChar *)value);
-
-#ifdef GEDIT_METADATA_VERBOSE_DEBUG
- gedit_debug_message (DEBUG_METADATA, "entry: %s = %s", key, value);
-#endif
-}
-
-static void
-save_item (const gchar *key, const gpointer *data, xmlNodePtr parent)
-{
- xmlNodePtr xml_node;
- const Item *item = (const Item *)data;
- gchar *atime;
-
-#ifdef GEDIT_METADATA_VERBOSE_DEBUG
- gedit_debug (DEBUG_METADATA);
-#endif
-
- g_return_if_fail (key != NULL);
-
- if (item == NULL)
- return;
-
- xml_node = xmlNewChild (parent, NULL, (const xmlChar *)"document", NULL);
-
- xmlSetProp (xml_node, (const xmlChar *)"uri", (const xmlChar *)key);
-
-#ifdef GEDIT_METADATA_VERBOSE_DEBUG
- gedit_debug_message (DEBUG_METADATA, "uri: %s", key);
-#endif
-
- atime = g_strdup_printf ("%ld", item->atime);
- xmlSetProp (xml_node, (const xmlChar *)"atime", (const xmlChar *)atime);
-
-#ifdef GEDIT_METADATA_VERBOSE_DEBUG
- gedit_debug_message (DEBUG_METADATA, "atime: %s", atime);
-#endif
-
- g_free (atime);
-
- g_hash_table_foreach (item->values,
- (GHFunc)save_values,
- xml_node);
-}
-
-static void
-get_oldest (const gchar *key, const gpointer value, const gchar ** key_to_remove)
-{
- const Item *item = (const Item *)value;
-
- if (*key_to_remove == NULL)
- {
- *key_to_remove = key;
- }
- else
- {
- const Item *item_to_remove =
- g_hash_table_lookup (gedit_metadata_manager->items,
- *key_to_remove);
-
- g_return_if_fail (item_to_remove != NULL);
-
- if (item->atime < item_to_remove->atime)
- {
- *key_to_remove = key;
- }
- }
-}
-
-static void
-resize_items (void)
-{
- while (g_hash_table_size (gedit_metadata_manager->items) > MAX_ITEMS)
- {
- gpointer key_to_remove = NULL;
-
- g_hash_table_foreach (gedit_metadata_manager->items,
- (GHFunc)get_oldest,
- &key_to_remove);
-
- g_return_if_fail (key_to_remove != NULL);
-
- g_hash_table_remove (gedit_metadata_manager->items,
- key_to_remove);
- }
-}
-
-static gboolean
-gedit_metadata_manager_save (gpointer data)
-{
- xmlDocPtr doc;
- xmlNodePtr root;
- gchar *file_name;
-
- gedit_debug (DEBUG_METADATA);
-
- gedit_metadata_manager->timeout_id = 0;
-
- resize_items ();
-
- xmlIndentTreeOutput = TRUE;
-
- doc = xmlNewDoc ((const xmlChar *)"1.0");
- if (doc == NULL)
- return TRUE;
-
- /* Create metadata root */
- root = xmlNewDocNode (doc, NULL, (const xmlChar *)"metadata", NULL);
- xmlDocSetRootElement (doc, root);
-
- g_hash_table_foreach (gedit_metadata_manager->items,
- (GHFunc)save_item,
- root);
-
- /* FIXME: lock file - Paolo */
- file_name = get_metadata_filename ();
- if (file_name != NULL)
- {
- gchar *cache_dir;
- int res;
-
- /* make sure the cache dir exists */
- cache_dir = gedit_dirs_get_user_cache_dir ();
- res = g_mkdir_with_parents (cache_dir, 0755);
- if (res != -1)
- {
- xmlSaveFormatFile (file_name, doc, 1);
- }
-
- g_free (cache_dir);
- g_free (file_name);
- }
-
- xmlFreeDoc (doc);
-
- gedit_debug_message (DEBUG_METADATA, "DONE");
-
- return FALSE;
-}
-
diff --git a/gedit/gedit-metadata-manager.h b/gedit/gedit-metadata-manager.h
deleted file mode 100755
index 6ee324f6..00000000
--- a/gedit/gedit-metadata-manager.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * gedit-metadata-manager.h
- * This file is part of gedit
- *
- * Copyright (C) 2003 Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2003. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- */
-
-#ifndef __GEDIT_METADATA_MANAGER_H__
-#define __GEDIT_METADATA_MANAGER_H__
-
-#include <glib.h>
-
-G_BEGIN_DECLS
-
-
-/* This function must be called before exiting gedit */
-void gedit_metadata_manager_shutdown (void);
-
-
-gchar *gedit_metadata_manager_get (const gchar *uri,
- const gchar *key);
-void gedit_metadata_manager_set (const gchar *uri,
- const gchar *key,
- const gchar *value);
-
-G_END_DECLS
-
-#endif /* __GEDIT_METADATA_MANAGER_H__ */
diff --git a/gedit/gedit-notebook.c b/gedit/gedit-notebook.c
deleted file mode 100755
index 2578815a..00000000
--- a/gedit/gedit-notebook.c
+++ /dev/null
@@ -1,1099 +0,0 @@
-/*
- * gedit-notebook.c
- * This file is part of gedit
- *
- * Copyright (C) 2005 - Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- */
-
-/* This file is a modified version of the epiphany file ephy-notebook.c
- * Here the relevant copyright:
- *
- * Copyright (C) 2002 Christophe Fergeau
- * Copyright (C) 2003 Marco Pesenti Gritti
- * Copyright (C) 2003, 2004 Christian Persch
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <glib-object.h>
-#include <glib/gi18n.h>
-#include <gtk/gtk.h>
-
-#include "gedit-notebook.h"
-#include "gedit-tab.h"
-#include "gedit-tab-label.h"
-#include "gedit-marshal.h"
-#include "gedit-window.h"
-
-#ifdef BUILD_SPINNER
-#include "gedit-spinner.h"
-#endif
-
-#define AFTER_ALL_TABS -1
-#define NOT_IN_APP_WINDOWS -2
-
-#define GEDIT_NOTEBOOK_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), GEDIT_TYPE_NOTEBOOK, GeditNotebookPrivate))
-
-struct _GeditNotebookPrivate
-{
- GList *focused_pages;
- gulong motion_notify_handler_id;
- gint x_start;
- gint y_start;
- gint drag_in_progress : 1;
- gint always_show_tabs : 1;
- gint close_buttons_sensitive : 1;
- gint tab_drag_and_drop_enabled : 1;
- guint destroy_has_run : 1;
-};
-
-G_DEFINE_TYPE(GeditNotebook, gedit_notebook, GTK_TYPE_NOTEBOOK)
-
-static void gedit_notebook_finalize (GObject *object);
-
-static gboolean gedit_notebook_change_current_page (GtkNotebook *notebook,
- gint offset);
-
-static void move_current_tab_to_another_notebook (GeditNotebook *src,
- GeditNotebook *dest,
- GdkEventMotion *event,
- gint dest_position);
-
-/* Local variables */
-static GdkCursor *cursor = NULL;
-
-/* Signals */
-enum
-{
- TAB_ADDED,
- TAB_REMOVED,
- TABS_REORDERED,
- TAB_DETACHED,
- TAB_CLOSE_REQUEST,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
-static void
-gedit_notebook_destroy (GtkObject *object)
-{
- GeditNotebook *notebook = GEDIT_NOTEBOOK (object);
-
- if (!notebook->priv->destroy_has_run)
- {
- GList *children, *l;
-
- children = gtk_container_get_children (GTK_CONTAINER (notebook));
-
- for (l = children; l != NULL; l = g_list_next (l))
- {
- gedit_notebook_remove_tab (notebook,
- GEDIT_TAB (l->data));
- }
-
- g_list_free (children);
- notebook->priv->destroy_has_run = TRUE;
- }
-
- GTK_OBJECT_CLASS (gedit_notebook_parent_class)->destroy (object);
-}
-
-static void
-gedit_notebook_class_init (GeditNotebookClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- GtkObjectClass *gtkobject_class = GTK_OBJECT_CLASS (klass);
- GtkNotebookClass *notebook_class = GTK_NOTEBOOK_CLASS (klass);
-
- object_class->finalize = gedit_notebook_finalize;
- gtkobject_class->destroy = gedit_notebook_destroy;
-
- notebook_class->change_current_page = gedit_notebook_change_current_page;
-
- signals[TAB_ADDED] =
- g_signal_new ("tab_added",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (GeditNotebookClass, tab_added),
- NULL, NULL,
- g_cclosure_marshal_VOID__OBJECT,
- G_TYPE_NONE,
- 1,
- GEDIT_TYPE_TAB);
- signals[TAB_REMOVED] =
- g_signal_new ("tab_removed",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (GeditNotebookClass, tab_removed),
- NULL, NULL,
- g_cclosure_marshal_VOID__OBJECT,
- G_TYPE_NONE,
- 1,
- GEDIT_TYPE_TAB);
- signals[TAB_DETACHED] =
- g_signal_new ("tab_detached",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (GeditNotebookClass, tab_detached),
- NULL, NULL,
- g_cclosure_marshal_VOID__OBJECT,
- G_TYPE_NONE,
- 1,
- GEDIT_TYPE_TAB);
- signals[TABS_REORDERED] =
- g_signal_new ("tabs_reordered",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (GeditNotebookClass, tabs_reordered),
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE,
- 0);
- signals[TAB_CLOSE_REQUEST] =
- g_signal_new ("tab-close-request",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GeditNotebookClass, tab_close_request),
- NULL, NULL,
- g_cclosure_marshal_VOID__OBJECT,
- G_TYPE_NONE,
- 1,
- GEDIT_TYPE_TAB);
-
- g_type_class_add_private (object_class, sizeof(GeditNotebookPrivate));
-}
-
-static GeditNotebook *
-find_notebook_at_pointer (gint abs_x, gint abs_y)
-{
- GdkWindow *win_at_pointer;
- GdkWindow *toplevel_win;
- gpointer toplevel = NULL;
- gint x, y;
-
- /* FIXME multi-head */
- win_at_pointer = gdk_window_at_pointer (&x, &y);
- if (win_at_pointer == NULL)
- {
- /* We are outside all windows of the same application */
- return NULL;
- }
-
- toplevel_win = gdk_window_get_toplevel (win_at_pointer);
-
- /* get the GtkWidget which owns the toplevel GdkWindow */
- gdk_window_get_user_data (toplevel_win, &toplevel);
-
- /* toplevel should be an GeditWindow */
- if ((toplevel != NULL) &&
- GEDIT_IS_WINDOW (toplevel))
- {
- return GEDIT_NOTEBOOK (_gedit_window_get_notebook
- (GEDIT_WINDOW (toplevel)));
- }
-
- /* We are outside all windows containing a notebook */
- return NULL;
-}
-
-static gboolean
-is_in_notebook_window (GeditNotebook *notebook,
- gint abs_x,
- gint abs_y)
-{
- GeditNotebook *nb_at_pointer;
-
- g_return_val_if_fail (notebook != NULL, FALSE);
-
- nb_at_pointer = find_notebook_at_pointer (abs_x, abs_y);
-
- return (nb_at_pointer == notebook);
-}
-
-static gint
-find_tab_num_at_pos (GeditNotebook *notebook,
- gint abs_x,
- gint abs_y)
-{
- GtkPositionType tab_pos;
- int page_num = 0;
- GtkNotebook *nb = GTK_NOTEBOOK (notebook);
- GtkWidget *page;
-
- tab_pos = gtk_notebook_get_tab_pos (GTK_NOTEBOOK (notebook));
-
- if (GTK_NOTEBOOK (notebook)->first_tab == NULL)
- {
- return AFTER_ALL_TABS;
- }
-
- /* For some reason unfullscreen + quick click can
- cause a wrong click event to be reported to the tab */
- if (!is_in_notebook_window (notebook, abs_x, abs_y))
- {
- return NOT_IN_APP_WINDOWS;
- }
-
- while ((page = gtk_notebook_get_nth_page (nb, page_num)) != NULL)
- {
- GtkWidget *tab;
- gint max_x, max_y;
- gint x_root, y_root;
-
- tab = gtk_notebook_get_tab_label (nb, page);
- g_return_val_if_fail (tab != NULL, AFTER_ALL_TABS);
-
- if (!GTK_WIDGET_MAPPED (GTK_WIDGET (tab)))
- {
- ++page_num;
- continue;
- }
-
- gdk_window_get_origin (GDK_WINDOW (tab->window),
- &x_root, &y_root);
-
- max_x = x_root + tab->allocation.x + tab->allocation.width;
- max_y = y_root + tab->allocation.y + tab->allocation.height;
-
- if (((tab_pos == GTK_POS_TOP) ||
- (tab_pos == GTK_POS_BOTTOM)) &&
- (abs_x <= max_x))
- {
- return page_num;
- }
- else if (((tab_pos == GTK_POS_LEFT) ||
- (tab_pos == GTK_POS_RIGHT)) &&
- (abs_y <= max_y))
- {
- return page_num;
- }
-
- ++page_num;
- }
-
- return AFTER_ALL_TABS;
-}
-
-static gint
-find_notebook_and_tab_at_pos (gint abs_x,
- gint abs_y,
- GeditNotebook **notebook,
- gint *page_num)
-{
- *notebook = find_notebook_at_pointer (abs_x, abs_y);
- if (*notebook == NULL)
- {
- return NOT_IN_APP_WINDOWS;
- }
-
- *page_num = find_tab_num_at_pos (*notebook, abs_x, abs_y);
-
- if (*page_num < 0)
- {
- return *page_num;
- }
- else
- {
- return 0;
- }
-}
-
-/**
- * gedit_notebook_move_tab:
- * @src: a #GeditNotebook
- * @dest: a #GeditNotebook
- * @tab: a #GeditTab
- * @dest_position: the position for @tab
- *
- * Moves @tab from @src to @dest.
- * If dest_position is greater than or equal to the number of tabs
- * of the destination nootebook or negative, tab will be moved to the
- * end of the tabs.
- */
-void
-gedit_notebook_move_tab (GeditNotebook *src,
- GeditNotebook *dest,
- GeditTab *tab,
- gint dest_position)
-{
- g_return_if_fail (GEDIT_IS_NOTEBOOK (src));
- g_return_if_fail (GEDIT_IS_NOTEBOOK (dest));
- g_return_if_fail (src != dest);
- g_return_if_fail (GEDIT_IS_TAB (tab));
-
- /* make sure the tab isn't destroyed while we move it */
- g_object_ref (tab);
- gedit_notebook_remove_tab (src, tab);
- gedit_notebook_add_tab (dest, tab, dest_position, TRUE);
- g_object_unref (tab);
-}
-
-/**
- * gedit_notebook_reorder_tab:
- * @src: a #GeditNotebook
- * @tab: a #GeditTab
- * @dest_position: the position for @tab
- *
- * Reorders the page containing @tab, so that it appears in @dest_position position.
- * If dest_position is greater than or equal to the number of tabs
- * of the destination notebook or negative, tab will be moved to the
- * end of the tabs.
- */
-void
-gedit_notebook_reorder_tab (GeditNotebook *src,
- GeditTab *tab,
- gint dest_position)
-{
- gint old_position;
-
- g_return_if_fail (GEDIT_IS_NOTEBOOK (src));
- g_return_if_fail (GEDIT_IS_TAB (tab));
-
- old_position = gtk_notebook_page_num (GTK_NOTEBOOK (src),
- GTK_WIDGET (tab));
-
- if (old_position == dest_position)
- return;
-
- gtk_notebook_reorder_child (GTK_NOTEBOOK (src),
- GTK_WIDGET (tab),
- dest_position);
-
- if (!src->priv->drag_in_progress)
- {
- g_signal_emit (G_OBJECT (src),
- signals[TABS_REORDERED],
- 0);
- }
-}
-
-static void
-drag_start (GeditNotebook *notebook,
- guint32 time)
-{
- notebook->priv->drag_in_progress = TRUE;
-
- /* get a new cursor, if necessary */
- /* FIXME multi-head */
- if (cursor == NULL)
- cursor = gdk_cursor_new (GDK_FLEUR);
-
- /* grab the pointer */
- gtk_grab_add (GTK_WIDGET (notebook));
-
- /* FIXME multi-head */
- if (!gdk_pointer_is_grabbed ())
- {
- gdk_pointer_grab (gtk_widget_get_window (GTK_WIDGET (notebook)),
- FALSE,
- GDK_BUTTON1_MOTION_MASK | GDK_BUTTON_RELEASE_MASK,
- NULL,
- cursor,
- time);
- }
-}
-
-static void
-drag_stop (GeditNotebook *notebook)
-{
- if (notebook->priv->drag_in_progress)
- {
- g_signal_emit (G_OBJECT (notebook),
- signals[TABS_REORDERED],
- 0);
- }
-
- notebook->priv->drag_in_progress = FALSE;
- if (notebook->priv->motion_notify_handler_id != 0)
- {
- g_signal_handler_disconnect (G_OBJECT (notebook),
- notebook->priv->motion_notify_handler_id);
- notebook->priv->motion_notify_handler_id = 0;
- }
-}
-
-/* This function is only called during dnd, we don't need to emit TABS_REORDERED
- * here, instead we do it on drag_stop
- */
-static void
-move_current_tab (GeditNotebook *notebook,
- gint dest_position)
-{
- gint cur_page_num;
-
- cur_page_num = gtk_notebook_get_current_page (GTK_NOTEBOOK (notebook));
-
- if (dest_position != cur_page_num)
- {
- GtkWidget *cur_tab;
-
- cur_tab = gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook),
- cur_page_num);
-
- gedit_notebook_reorder_tab (GEDIT_NOTEBOOK (notebook),
- GEDIT_TAB (cur_tab),
- dest_position);
- }
-}
-
-static gboolean
-motion_notify_cb (GeditNotebook *notebook,
- GdkEventMotion *event,
- gpointer data)
-{
- GeditNotebook *dest;
- gint page_num;
- gint result;
-
- if (notebook->priv->drag_in_progress == FALSE)
- {
- if (notebook->priv->tab_drag_and_drop_enabled == FALSE)
- return FALSE;
-
- if (gtk_drag_check_threshold (GTK_WIDGET (notebook),
- notebook->priv->x_start,
- notebook->priv->y_start,
- event->x_root,
- event->y_root))
- {
- drag_start (notebook, event->time);
- return TRUE;
- }
-
- return FALSE;
- }
-
- result = find_notebook_and_tab_at_pos ((gint)event->x_root,
- (gint)event->y_root,
- &dest,
- &page_num);
-
- if (result != NOT_IN_APP_WINDOWS)
- {
- if (dest != notebook)
- {
- move_current_tab_to_another_notebook (notebook,
- dest,
- event,
- page_num);
- }
- else
- {
- g_return_val_if_fail (page_num >= -1, FALSE);
- move_current_tab (notebook, page_num);
- }
- }
-
- return FALSE;
-}
-
-static void
-move_current_tab_to_another_notebook (GeditNotebook *src,
- GeditNotebook *dest,
- GdkEventMotion *event,
- gint dest_position)
-{
- GeditTab *tab;
- gint cur_page;
-
- /* This is getting tricky, the tab was dragged in a notebook
- * in another window of the same app, we move the tab
- * to that new notebook, and let this notebook handle the
- * drag
- */
- g_return_if_fail (GEDIT_IS_NOTEBOOK (dest));
- g_return_if_fail (dest != src);
-
- cur_page = gtk_notebook_get_current_page (GTK_NOTEBOOK (src));
- tab = GEDIT_TAB (gtk_notebook_get_nth_page (GTK_NOTEBOOK (src),
- cur_page));
-
- /* stop drag in origin window */
- /* ungrab the pointer if it's grabbed */
- drag_stop (src);
- if (gdk_pointer_is_grabbed ())
- {
- gdk_pointer_ungrab (event->time);
- }
- gtk_grab_remove (GTK_WIDGET (src));
-
- gedit_notebook_move_tab (src, dest, tab, dest_position);
-
- /* start drag handling in dest notebook */
- dest->priv->motion_notify_handler_id =
- g_signal_connect (G_OBJECT (dest),
- "motion-notify-event",
- G_CALLBACK (motion_notify_cb),
- NULL);
-
- drag_start (dest, event->time);
-}
-
-static gboolean
-button_release_cb (GeditNotebook *notebook,
- GdkEventButton *event,
- gpointer data)
-{
- if (notebook->priv->drag_in_progress)
- {
- gint cur_page_num;
- GtkWidget *cur_page;
-
- cur_page_num = gtk_notebook_get_current_page (GTK_NOTEBOOK (notebook));
- cur_page = gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook),
- cur_page_num);
-
- /* CHECK: I don't follow the code here -- Paolo */
- if (!is_in_notebook_window (notebook, event->x_root, event->y_root) &&
- (gtk_notebook_get_n_pages (GTK_NOTEBOOK (notebook)) > 1))
- {
- /* Tab was detached */
- g_signal_emit (G_OBJECT (notebook),
- signals[TAB_DETACHED],
- 0,
- cur_page);
- }
-
- /* ungrab the pointer if it's grabbed */
- if (gdk_pointer_is_grabbed ())
- {
- gdk_pointer_ungrab (event->time);
- }
- gtk_grab_remove (GTK_WIDGET (notebook));
- }
-
- /* This must be called even if a drag isn't happening */
- drag_stop (notebook);
-
- return FALSE;
-}
-
-static gboolean
-button_press_cb (GeditNotebook *notebook,
- GdkEventButton *event,
- gpointer data)
-{
- gint tab_clicked;
-
- if (notebook->priv->drag_in_progress)
- return TRUE;
-
- tab_clicked = find_tab_num_at_pos (notebook,
- event->x_root,
- event->y_root);
-
- if ((event->button == 1) &&
- (event->type == GDK_BUTTON_PRESS) &&
- (tab_clicked >= 0))
- {
- notebook->priv->x_start = event->x_root;
- notebook->priv->y_start = event->y_root;
-
- notebook->priv->motion_notify_handler_id =
- g_signal_connect (G_OBJECT (notebook),
- "motion-notify-event",
- G_CALLBACK (motion_notify_cb),
- NULL);
- }
- else if ((event->type == GDK_BUTTON_PRESS) &&
- (event->button == 3))
- {
- if (tab_clicked == -1)
- {
- // CHECK: do we really need it?
-
- /* consume event, so that we don't pop up the context menu when
- * the mouse if not over a tab label
- */
- return TRUE;
- }
- else
- {
- /* Switch to the page the mouse is over, but don't consume the event */
- gtk_notebook_set_current_page (GTK_NOTEBOOK (notebook),
- tab_clicked);
- }
- }
-
- return FALSE;
-}
-
-/**
- * gedit_notebook_new:
- *
- * Creates a new #GeditNotebook object.
- *
- * Returns: a new #GeditNotebook
- */
-GtkWidget *
-gedit_notebook_new (void)
-{
- return GTK_WIDGET (g_object_new (GEDIT_TYPE_NOTEBOOK, NULL));
-}
-
-static void
-gedit_notebook_switch_page_cb (GtkNotebook *notebook,
- GtkNotebookPage *page,
- guint page_num,
- gpointer data)
-{
- GeditNotebook *nb = GEDIT_NOTEBOOK (notebook);
- GtkWidget *child;
- GeditView *view;
-
- child = gtk_notebook_get_nth_page (notebook, page_num);
-
- /* Remove the old page, we dont want to grow unnecessarily
- * the list */
- if (nb->priv->focused_pages)
- {
- nb->priv->focused_pages =
- g_list_remove (nb->priv->focused_pages, child);
- }
-
- nb->priv->focused_pages = g_list_append (nb->priv->focused_pages,
- child);
-
- /* give focus to the view */
- view = gedit_tab_get_view (GEDIT_TAB (child));
- gtk_widget_grab_focus (GTK_WIDGET (view));
-}
-
-/*
- * update_tabs_visibility: Hide tabs if there is only one tab
- * and the pref is not set.
- */
-static void
-update_tabs_visibility (GeditNotebook *nb,
- gboolean before_inserting)
-{
- gboolean show_tabs;
- guint num;
-
- num = gtk_notebook_get_n_pages (GTK_NOTEBOOK (nb));
-
- if (before_inserting) num++;
-
- show_tabs = (nb->priv->always_show_tabs || num > 1);
-
- gtk_notebook_set_show_tabs (GTK_NOTEBOOK (nb), show_tabs);
-}
-
-static void
-gedit_notebook_init (GeditNotebook *notebook)
-{
- notebook->priv = GEDIT_NOTEBOOK_GET_PRIVATE (notebook);
-
- notebook->priv->close_buttons_sensitive = TRUE;
- notebook->priv->tab_drag_and_drop_enabled = TRUE;
-
- gtk_notebook_set_scrollable (GTK_NOTEBOOK (notebook), TRUE);
- gtk_notebook_set_show_border (GTK_NOTEBOOK (notebook), FALSE);
- gtk_notebook_set_show_tabs (GTK_NOTEBOOK (notebook), FALSE);
-
- notebook->priv->always_show_tabs = TRUE;
-
- g_signal_connect (notebook,
- "button-press-event",
- (GCallback)button_press_cb,
- NULL);
- g_signal_connect (notebook,
- "button-release-event",
- (GCallback)button_release_cb,
- NULL);
- gtk_widget_add_events (GTK_WIDGET (notebook),
- GDK_BUTTON1_MOTION_MASK);
-
- g_signal_connect_after (G_OBJECT (notebook),
- "switch_page",
- G_CALLBACK (gedit_notebook_switch_page_cb),
- NULL);
-}
-
-static void
-gedit_notebook_finalize (GObject *object)
-{
- GeditNotebook *notebook = GEDIT_NOTEBOOK (object);
-
- g_list_free (notebook->priv->focused_pages);
-
- G_OBJECT_CLASS (gedit_notebook_parent_class)->finalize (object);
-}
-
-/*
- * We need to override this because when we don't show the tabs, like in
- * fullscreen we need to have wrap around too
- */
-static gboolean
-gedit_notebook_change_current_page (GtkNotebook *notebook,
- gint offset)
-{
- gboolean wrap_around;
- gint current;
-
- current = gtk_notebook_get_current_page (notebook);
-
- if (current != -1)
- {
- current = current + offset;
-
- g_object_get (gtk_widget_get_settings (GTK_WIDGET (notebook)),
- "gtk-keynav-wrap-around", &wrap_around,
- NULL);
-
- if (wrap_around)
- {
- if (current < 0)
- {
- current = gtk_notebook_get_n_pages (notebook) - 1;
- }
- else if (current >= gtk_notebook_get_n_pages (notebook))
- {
- current = 0;
- }
- }
-
- gtk_notebook_set_current_page (notebook, current);
- }
- else
- {
- gtk_widget_error_bell (GTK_WIDGET (notebook));
- }
-
- return TRUE;
-}
-
-static void
-close_button_clicked_cb (GeditTabLabel *tab_label, GeditNotebook *notebook)
-{
- GeditTab *tab;
-
- tab = gedit_tab_label_get_tab (tab_label);
- g_signal_emit (notebook, signals[TAB_CLOSE_REQUEST], 0, tab);
-}
-
-static GtkWidget *
-create_tab_label (GeditNotebook *nb,
- GeditTab *tab)
-{
- GtkWidget *tab_label;
-
- tab_label = gedit_tab_label_new (tab);
-
- g_signal_connect (tab_label,
- "close-clicked",
- G_CALLBACK (close_button_clicked_cb),
- nb);
-
- g_object_set_data (G_OBJECT (tab), "tab-label", tab_label);
-
- return tab_label;
-}
-
-static void
-remove_tab_label (GeditNotebook *nb,
- GeditTab *tab)
-{
- GtkWidget *tab_label;
-
- tab_label = gedit_tab_label_new (tab);
-
- g_signal_handlers_disconnect_by_func (tab_label,
- G_CALLBACK (close_button_clicked_cb),
- nb);
-
- g_object_set_data (G_OBJECT (tab), "tab-label", NULL);
-}
-
-static GtkWidget *
-get_tab_label (GeditTab *tab)
-{
- GtkWidget *tab_label;
-
- tab_label = GTK_WIDGET (g_object_get_data (G_OBJECT (tab), "tab-label"));
- g_return_val_if_fail (tab_label != NULL, NULL);
-
- return tab_label;
-}
-
-/**
- * gedit_notebook_set_always_show_tabs:
- * @nb: a #GeditNotebook
- * @show_tabs: %TRUE to always show the tabs
- *
- * Sets the visibility of the tabs in the @nb.
- */
-void
-gedit_notebook_set_always_show_tabs (GeditNotebook *nb,
- gboolean show_tabs)
-{
- g_return_if_fail (GEDIT_IS_NOTEBOOK (nb));
-
- nb->priv->always_show_tabs = (show_tabs != FALSE);
-
- update_tabs_visibility (nb, FALSE);
-}
-
-/**
- * gedit_notebook_add_tab:
- * @nb: a #GeditNotebook
- * @tab: a #GeditTab
- * @position: the position where the @tab should be added
- * @jump_to: %TRUE to set the @tab as active
- *
- * Adds the specified @tab to the @nb.
- */
-void
-gedit_notebook_add_tab (GeditNotebook *nb,
- GeditTab *tab,
- gint position,
- gboolean jump_to)
-{
- GtkWidget *tab_label;
-
- g_return_if_fail (GEDIT_IS_NOTEBOOK (nb));
- g_return_if_fail (GEDIT_IS_TAB (tab));
-
- tab_label = create_tab_label (nb, tab);
- gtk_notebook_insert_page (GTK_NOTEBOOK (nb),
- GTK_WIDGET (tab),
- tab_label,
- position);
- update_tabs_visibility (nb, TRUE);
-
- g_signal_emit (G_OBJECT (nb), signals[TAB_ADDED], 0, tab);
-
- /* The signal handler may have reordered the tabs */
- position = gtk_notebook_page_num (GTK_NOTEBOOK (nb),
- GTK_WIDGET (tab));
-
- if (jump_to)
- {
- GeditView *view;
-
- gtk_notebook_set_current_page (GTK_NOTEBOOK (nb), position);
- g_object_set_data (G_OBJECT (tab),
- "jump_to",
- GINT_TO_POINTER (jump_to));
- view = gedit_tab_get_view (tab);
-
- gtk_widget_grab_focus (GTK_WIDGET (view));
- }
-}
-
-static void
-smart_tab_switching_on_closure (GeditNotebook *nb,
- GeditTab *tab)
-{
- gboolean jump_to;
-
- jump_to = GPOINTER_TO_INT (g_object_get_data
- (G_OBJECT (tab), "jump_to"));
-
- if (!jump_to || !nb->priv->focused_pages)
- {
- gtk_notebook_next_page (GTK_NOTEBOOK (nb));
- }
- else
- {
- GList *l;
- GtkWidget *child;
- int page_num;
-
- /* activate the last focused tab */
- l = g_list_last (nb->priv->focused_pages);
- child = GTK_WIDGET (l->data);
- page_num = gtk_notebook_page_num (GTK_NOTEBOOK (nb),
- child);
- gtk_notebook_set_current_page (GTK_NOTEBOOK (nb),
- page_num);
- }
-}
-
-static void
-remove_tab (GeditTab *tab,
- GeditNotebook *nb)
-{
- gint position;
-
- position = gtk_notebook_page_num (GTK_NOTEBOOK (nb), GTK_WIDGET (tab));
-
- /* we ref the tab so that it's still alive while the tabs_removed
- * signal is processed.
- */
- g_object_ref (tab);
-
- remove_tab_label (nb, tab);
- gtk_notebook_remove_page (GTK_NOTEBOOK (nb), position);
- update_tabs_visibility (nb, FALSE);
-
- g_signal_emit (G_OBJECT (nb), signals[TAB_REMOVED], 0, tab);
-
- g_object_unref (tab);
-}
-
-/**
- * gedit_notebook_remove_tab:
- * @nb: a #GeditNotebook
- * @tab: a #GeditTab
- *
- * Removes @tab from @nb.
- */
-void
-gedit_notebook_remove_tab (GeditNotebook *nb,
- GeditTab *tab)
-{
- gint position, curr;
-
- g_return_if_fail (GEDIT_IS_NOTEBOOK (nb));
- g_return_if_fail (GEDIT_IS_TAB (tab));
-
- /* Remove the page from the focused pages list */
- nb->priv->focused_pages = g_list_remove (nb->priv->focused_pages,
- tab);
-
- position = gtk_notebook_page_num (GTK_NOTEBOOK (nb), GTK_WIDGET (tab));
- curr = gtk_notebook_get_current_page (GTK_NOTEBOOK (nb));
-
- if (position == curr)
- {
- smart_tab_switching_on_closure (nb, tab);
- }
-
- remove_tab (tab, nb);
-}
-
-/**
- * gedit_notebook_remove_all_tabs:
- * @nb: a #GeditNotebook
- *
- * Removes all #GeditTab from @nb.
- */
-void
-gedit_notebook_remove_all_tabs (GeditNotebook *nb)
-{
- g_return_if_fail (GEDIT_IS_NOTEBOOK (nb));
-
- g_list_free (nb->priv->focused_pages);
- nb->priv->focused_pages = NULL;
-
- gtk_container_foreach (GTK_CONTAINER (nb),
- (GtkCallback)remove_tab,
- nb);
-}
-
-static void
-set_close_buttons_sensitivity (GeditTab *tab,
- GeditNotebook *nb)
-{
- GtkWidget *tab_label;
-
- tab_label = get_tab_label (tab);
-
- gedit_tab_label_set_close_button_sensitive (GEDIT_TAB_LABEL (tab_label),
- nb->priv->close_buttons_sensitive);
-}
-
-/**
- * gedit_notebook_set_close_buttons_sensitive:
- * @nb: a #GeditNotebook
- * @sensitive: %TRUE to make the buttons sensitive
- *
- * Sets whether the close buttons in the tabs of @nb are sensitive.
- */
-void
-gedit_notebook_set_close_buttons_sensitive (GeditNotebook *nb,
- gboolean sensitive)
-{
- g_return_if_fail (GEDIT_IS_NOTEBOOK (nb));
-
- sensitive = (sensitive != FALSE);
-
- if (sensitive == nb->priv->close_buttons_sensitive)
- return;
-
- nb->priv->close_buttons_sensitive = sensitive;
-
- gtk_container_foreach (GTK_CONTAINER (nb),
- (GtkCallback)set_close_buttons_sensitivity,
- nb);
-}
-
-/**
- * gedit_notebook_get_close_buttons_sensitive:
- * @nb: a #GeditNotebook
- *
- * Whether the close buttons are sensitive.
- *
- * Returns: %TRUE if the close buttons are sensitive
- */
-gboolean
-gedit_notebook_get_close_buttons_sensitive (GeditNotebook *nb)
-{
- g_return_val_if_fail (GEDIT_IS_NOTEBOOK (nb), TRUE);
-
- return nb->priv->close_buttons_sensitive;
-}
-
-/**
- * gedit_notebook_set_tab_drag_and_drop_enabled:
- * @nb: a #GeditNotebook
- * @enable: %TRUE to enable the drag and drop
- *
- * Sets whether drag and drop of tabs in the @nb is enabled.
- */
-void
-gedit_notebook_set_tab_drag_and_drop_enabled (GeditNotebook *nb,
- gboolean enable)
-{
- g_return_if_fail (GEDIT_IS_NOTEBOOK (nb));
-
- enable = (enable != FALSE);
-
- if (enable == nb->priv->tab_drag_and_drop_enabled)
- return;
-
- nb->priv->tab_drag_and_drop_enabled = enable;
-}
-
-/**
- * gedit_notebook_get_tab_drag_and_drop_enabled:
- * @nb: a #GeditNotebook
- *
- * Whether the drag and drop is enabled in the @nb.
- *
- * Returns: %TRUE if the drag and drop is enabled.
- */
-gboolean
-gedit_notebook_get_tab_drag_and_drop_enabled (GeditNotebook *nb)
-{
- g_return_val_if_fail (GEDIT_IS_NOTEBOOK (nb), TRUE);
-
- return nb->priv->tab_drag_and_drop_enabled;
-}
-
diff --git a/gedit/gedit-notebook.h b/gedit/gedit-notebook.h
deleted file mode 100755
index ada7c274..00000000
--- a/gedit/gedit-notebook.h
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * gedit-notebook.h
- * This file is part of gedit
- *
- * Copyright (C) 2005 - Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- */
-
-/* This file is a modified version of the epiphany file ephy-notebook.h
- * Here the relevant copyright:
- *
- * Copyright (C) 2002 Christophe Fergeau
- * Copyright (C) 2003 Marco Pesenti Gritti
- * Copyright (C) 2003, 2004 Christian Persch
- *
- */
-
-#ifndef GEDIT_NOTEBOOK_H
-#define GEDIT_NOTEBOOK_H
-
-#include <gedit/gedit-tab.h>
-
-#include <glib.h>
-#include <gtk/gtk.h>
-
-G_BEGIN_DECLS
-
-/*
- * Type checking and casting macros
- */
-#define GEDIT_TYPE_NOTEBOOK (gedit_notebook_get_type ())
-#define GEDIT_NOTEBOOK(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GEDIT_TYPE_NOTEBOOK, GeditNotebook))
-#define GEDIT_NOTEBOOK_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GEDIT_TYPE_NOTEBOOK, GeditNotebookClass))
-#define GEDIT_IS_NOTEBOOK(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GEDIT_TYPE_NOTEBOOK))
-#define GEDIT_IS_NOTEBOOK_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GEDIT_TYPE_NOTEBOOK))
-#define GEDIT_NOTEBOOK_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GEDIT_TYPE_NOTEBOOK, GeditNotebookClass))
-
-/* Private structure type */
-typedef struct _GeditNotebookPrivate GeditNotebookPrivate;
-
-/*
- * Main object structure
- */
-typedef struct _GeditNotebook GeditNotebook;
-
-struct _GeditNotebook
-{
- GtkNotebook notebook;
-
- /*< private >*/
- GeditNotebookPrivate *priv;
-};
-
-/*
- * Class definition
- */
-typedef struct _GeditNotebookClass GeditNotebookClass;
-
-struct _GeditNotebookClass
-{
- GtkNotebookClass parent_class;
-
- /* Signals */
- void (* tab_added) (GeditNotebook *notebook,
- GeditTab *tab);
- void (* tab_removed) (GeditNotebook *notebook,
- GeditTab *tab);
- void (* tab_detached) (GeditNotebook *notebook,
- GeditTab *tab);
- void (* tabs_reordered) (GeditNotebook *notebook);
- void (* tab_close_request)
- (GeditNotebook *notebook,
- GeditTab *tab);
-};
-
-/*
- * Public methods
- */
-GType gedit_notebook_get_type (void) G_GNUC_CONST;
-
-GtkWidget *gedit_notebook_new (void);
-
-void gedit_notebook_add_tab (GeditNotebook *nb,
- GeditTab *tab,
- gint position,
- gboolean jump_to);
-
-void gedit_notebook_remove_tab (GeditNotebook *nb,
- GeditTab *tab);
-
-void gedit_notebook_remove_all_tabs (GeditNotebook *nb);
-
-void gedit_notebook_reorder_tab (GeditNotebook *src,
- GeditTab *tab,
- gint dest_position);
-
-void gedit_notebook_move_tab (GeditNotebook *src,
- GeditNotebook *dest,
- GeditTab *tab,
- gint dest_position);
-
-/* FIXME: do we really need this function ? */
-void gedit_notebook_set_always_show_tabs
- (GeditNotebook *nb,
- gboolean show_tabs);
-
-void gedit_notebook_set_close_buttons_sensitive
- (GeditNotebook *nb,
- gboolean sensitive);
-
-gboolean gedit_notebook_get_close_buttons_sensitive
- (GeditNotebook *nb);
-
-void gedit_notebook_set_tab_drag_and_drop_enabled
- (GeditNotebook *nb,
- gboolean enable);
-
-gboolean gedit_notebook_get_tab_drag_and_drop_enabled
- (GeditNotebook *nb);
-
-G_END_DECLS
-
-#endif /* GEDIT_NOTEBOOK_H */
diff --git a/gedit/gedit-object-module.c b/gedit/gedit-object-module.c
deleted file mode 100755
index 3c6f09c1..00000000
--- a/gedit/gedit-object-module.c
+++ /dev/null
@@ -1,343 +0,0 @@
-/*
- * gedit-object-module.c
- * This file is part of gedit
- *
- * Copyright (C) 2005 - Paolo Maggi
- * Copyright (C) 2008 - Jesse van den Kieboom
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/* This is a modified version of ephy-module.c from Epiphany source code.
- * Here the original copyright assignment:
- *
- * Copyright (C) 2003 Marco Pesenti Gritti
- * Copyright (C) 2003, 2004 Christian Persch
- *
- */
-
-/*
- * Modified by the gedit Team, 2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id: gedit-module.c 6314 2008-06-05 12:57:53Z pborelli $
- */
-
-#include "config.h"
-
-#include "gedit-object-module.h"
-#include "gedit-debug.h"
-
-typedef GType (*GeditObjectModuleRegisterFunc) (GTypeModule *);
-
-enum {
- PROP_0,
- PROP_MODULE_NAME,
- PROP_PATH,
- PROP_TYPE_REGISTRATION,
- PROP_RESIDENT
-};
-
-struct _GeditObjectModulePrivate
-{
- GModule *library;
-
- GType type;
- gchar *path;
- gchar *module_name;
- gchar *type_registration;
-
- gboolean resident;
-};
-
-G_DEFINE_TYPE (GeditObjectModule, gedit_object_module, G_TYPE_TYPE_MODULE);
-
-static gboolean
-gedit_object_module_load (GTypeModule *gmodule)
-{
- GeditObjectModule *module = GEDIT_OBJECT_MODULE (gmodule);
- GeditObjectModuleRegisterFunc register_func;
- gchar *path;
-
- gedit_debug_message (DEBUG_PLUGINS, "Loading %s module from %s",
- module->priv->module_name, module->priv->path);
-
- path = g_module_build_path (module->priv->path, module->priv->module_name);
- g_return_val_if_fail (path != NULL, FALSE);
- gedit_debug_message (DEBUG_PLUGINS, "Module filename: %s", path);
-
- module->priv->library = g_module_open (path,
- G_MODULE_BIND_LAZY);
- g_free (path);
-
- if (module->priv->library == NULL)
- {
- g_warning ("%s: %s", module->priv->module_name, g_module_error());
-
- return FALSE;
- }
-
- /* extract symbols from the lib */
- if (!g_module_symbol (module->priv->library, module->priv->type_registration,
- (void *) &register_func))
- {
- g_warning ("%s: %s", module->priv->module_name, g_module_error());
- g_module_close (module->priv->library);
-
- return FALSE;
- }
-
- /* symbol can still be NULL even though g_module_symbol
- * returned TRUE */
- if (register_func == NULL)
- {
- g_warning ("Symbol '%s' should not be NULL", module->priv->type_registration);
- g_module_close (module->priv->library);
-
- return FALSE;
- }
-
- module->priv->type = register_func (gmodule);
-
- if (module->priv->type == 0)
- {
- g_warning ("Invalid object contained by module %s", module->priv->module_name);
- return FALSE;
- }
-
- if (module->priv->resident)
- {
- g_module_make_resident (module->priv->library);
- }
-
- return TRUE;
-}
-
-static void
-gedit_object_module_unload (GTypeModule *gmodule)
-{
- GeditObjectModule *module = GEDIT_OBJECT_MODULE (gmodule);
-
- gedit_debug_message (DEBUG_PLUGINS, "Unloading %s", module->priv->path);
-
- g_module_close (module->priv->library);
-
- module->priv->library = NULL;
- module->priv->type = 0;
-}
-
-static void
-gedit_object_module_init (GeditObjectModule *module)
-{
- gedit_debug_message (DEBUG_PLUGINS, "GeditObjectModule %p initialising", module);
-
- module->priv = G_TYPE_INSTANCE_GET_PRIVATE (module,
- GEDIT_TYPE_OBJECT_MODULE,
- GeditObjectModulePrivate);
-}
-
-static void
-gedit_object_module_finalize (GObject *object)
-{
- GeditObjectModule *module = GEDIT_OBJECT_MODULE (object);
-
- gedit_debug_message (DEBUG_PLUGINS, "GeditObjectModule %p finalising", module);
-
- g_free (module->priv->path);
- g_free (module->priv->module_name);
- g_free (module->priv->type_registration);
-
- G_OBJECT_CLASS (gedit_object_module_parent_class)->finalize (object);
-}
-
-static void
-gedit_object_module_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- GeditObjectModule *module = GEDIT_OBJECT_MODULE (object);
-
- switch (prop_id)
- {
- case PROP_MODULE_NAME:
- g_value_set_string (value, module->priv->module_name);
- break;
- case PROP_PATH:
- g_value_set_string (value, module->priv->path);
- break;
- case PROP_TYPE_REGISTRATION:
- g_value_set_string (value, module->priv->type_registration);
- break;
- case PROP_RESIDENT:
- g_value_set_boolean (value, module->priv->resident);
- break;
- default:
- g_return_if_reached ();
- }
-}
-
-static void
-gedit_object_module_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- GeditObjectModule *module = GEDIT_OBJECT_MODULE (object);
-
- switch (prop_id)
- {
- case PROP_MODULE_NAME:
- module->priv->module_name = g_value_dup_string (value);
- g_type_module_set_name (G_TYPE_MODULE (object),
- module->priv->module_name);
- break;
- case PROP_PATH:
- module->priv->path = g_value_dup_string (value);
- break;
- case PROP_TYPE_REGISTRATION:
- module->priv->type_registration = g_value_dup_string (value);
- break;
- case PROP_RESIDENT:
- module->priv->resident = g_value_get_boolean (value);
- break;
- default:
- g_return_if_reached ();
- }
-}
-
-static void
-gedit_object_module_class_init (GeditObjectModuleClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- GTypeModuleClass *module_class = G_TYPE_MODULE_CLASS (klass);
-
- object_class->set_property = gedit_object_module_set_property;
- object_class->get_property = gedit_object_module_get_property;
- object_class->finalize = gedit_object_module_finalize;
-
- module_class->load = gedit_object_module_load;
- module_class->unload = gedit_object_module_unload;
-
- g_object_class_install_property (object_class,
- PROP_MODULE_NAME,
- g_param_spec_string ("module-name",
- "Module Name",
- "The module to load for this object",
- NULL,
- G_PARAM_READWRITE |
- G_PARAM_CONSTRUCT_ONLY));
-
- g_object_class_install_property (object_class,
- PROP_PATH,
- g_param_spec_string ("path",
- "Path",
- "The path to use when loading this module",
- NULL,
- G_PARAM_READWRITE |
- G_PARAM_CONSTRUCT_ONLY));
-
- g_object_class_install_property (object_class,
- PROP_TYPE_REGISTRATION,
- g_param_spec_string ("type-registration",
- "Type Registration",
- "The name of the type registration function",
- NULL,
- G_PARAM_READWRITE |
- G_PARAM_CONSTRUCT_ONLY));
-
- g_object_class_install_property (object_class,
- PROP_RESIDENT,
- g_param_spec_boolean ("resident",
- "Resident",
- "Whether the module is resident",
- FALSE,
- G_PARAM_READWRITE |
- G_PARAM_CONSTRUCT_ONLY));
-
- g_type_class_add_private (klass, sizeof (GeditObjectModulePrivate));
-}
-
-GeditObjectModule *
-gedit_object_module_new (const gchar *module_name,
- const gchar *path,
- const gchar *type_registration,
- gboolean resident)
-{
- return (GeditObjectModule *)g_object_new (GEDIT_TYPE_OBJECT_MODULE,
- "module-name",
- module_name,
- "path",
- path,
- "type-registration",
- type_registration,
- "resident",
- resident,
- NULL);
-}
-
-GObject *
-gedit_object_module_new_object (GeditObjectModule *module,
- const gchar *first_property_name,
- ...)
-{
- va_list var_args;
- GObject *result;
-
- g_return_val_if_fail (module->priv->type != 0, NULL);
-
- gedit_debug_message (DEBUG_PLUGINS, "Creating object of type %s",
- g_type_name (module->priv->type));
-
- va_start (var_args, first_property_name);
- result = g_object_new_valist (module->priv->type, first_property_name, var_args);
- va_end (var_args);
-
- return result;
-}
-
-const gchar *
-gedit_object_module_get_path (GeditObjectModule *module)
-{
- g_return_val_if_fail (GEDIT_IS_OBJECT_MODULE (module), NULL);
-
- return module->priv->path;
-}
-
-const gchar *
-gedit_object_module_get_module_name (GeditObjectModule *module)
-{
- g_return_val_if_fail (GEDIT_IS_OBJECT_MODULE (module), NULL);
-
- return module->priv->module_name;
-}
-
-const gchar *
-gedit_object_module_get_type_registration (GeditObjectModule *module)
-{
- g_return_val_if_fail (GEDIT_IS_OBJECT_MODULE (module), NULL);
-
- return module->priv->type_registration;
-}
-
-GType
-gedit_object_module_get_object_type (GeditObjectModule *module)
-{
- g_return_val_if_fail (GEDIT_IS_OBJECT_MODULE (module), 0);
-
- return module->priv->type;
-}
diff --git a/gedit/gedit-object-module.h b/gedit/gedit-object-module.h
deleted file mode 100755
index 06210794..00000000
--- a/gedit/gedit-object-module.h
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * gedit-object-module.h
- * This file is part of gedit
- *
- * Copyright (C) 2005 - Paolo Maggi
- * Copyright (C) 2008 - Jesse van den Kieboom
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/* This is a modified version of gedit-module.h from Epiphany source code.
- * Here the original copyright assignment:
- *
- * Copyright (C) 2003 Marco Pesenti Gritti
- * Copyright (C) 2003, 2004 Christian Persch
- *
- */
-
-/*
- * Modified by the gedit Team, 2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id: gedit-module.h 6263 2008-05-05 10:52:10Z sfre $
- */
-
-#ifndef __GEDIT_OBJECT_MODULE_H__
-#define __GEDIT_OBJECT_MODULE_H__
-
-#include <glib-object.h>
-#include <gmodule.h>
-#include <stdarg.h>
-
-G_BEGIN_DECLS
-
-#define GEDIT_TYPE_OBJECT_MODULE (gedit_object_module_get_type ())
-#define GEDIT_OBJECT_MODULE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEDIT_TYPE_OBJECT_MODULE, GeditObjectModule))
-#define GEDIT_OBJECT_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEDIT_TYPE_OBJECT_MODULE, GeditObjectModuleClass))
-#define GEDIT_IS_OBJECT_MODULE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEDIT_TYPE_OBJECT_MODULE))
-#define GEDIT_IS_OBJECT_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEDIT_TYPE_OBJECT_MODULE))
-#define GEDIT_OBJECT_MODULE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GEDIT_TYPE_OBJECT_MODULE, GeditObjectModuleClass))
-
-typedef struct _GeditObjectModule GeditObjectModule;
-typedef struct _GeditObjectModulePrivate GeditObjectModulePrivate;
-
-struct _GeditObjectModule
-{
- GTypeModule parent;
-
- GeditObjectModulePrivate *priv;
-};
-
-typedef struct _GeditObjectModuleClass GeditObjectModuleClass;
-
-struct _GeditObjectModuleClass
-{
- GTypeModuleClass parent_class;
-
- /* Virtual class methods */
- void (* garbage_collect) ();
-};
-
-GType gedit_object_module_get_type (void) G_GNUC_CONST;
-
-GeditObjectModule *gedit_object_module_new (const gchar *module_name,
- const gchar *path,
- const gchar *type_registration,
- gboolean resident);
-
-GObject *gedit_object_module_new_object (GeditObjectModule *module,
- const gchar *first_property_name,
- ...);
-
-GType gedit_object_module_get_object_type (GeditObjectModule *module);
-const gchar *gedit_object_module_get_path (GeditObjectModule *module);
-const gchar *gedit_object_module_get_module_name (GeditObjectModule *module);
-const gchar *gedit_object_module_get_type_registration (GeditObjectModule *module);
-
-G_END_DECLS
-
-#endif
diff --git a/gedit/gedit-panel.c b/gedit/gedit-panel.c
deleted file mode 100755
index fb1f9672..00000000
--- a/gedit/gedit-panel.c
+++ /dev/null
@@ -1,950 +0,0 @@
-/*
- * gedit-panel.c
- * This file is part of gedit
- *
- * Copyright (C) 2005 - Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#include "gedit-panel.h"
-
-#include <glib/gi18n.h>
-#include <gtk/gtk.h>
-#include <gdk/gdk.h>
-#include <gdk/gdkkeysyms.h>
-
-#include "gedit-close-button.h"
-#include "gedit-window.h"
-#include "gedit-debug.h"
-
-#define PANEL_ITEM_KEY "GeditPanelItemKey"
-
-#define GEDIT_PANEL_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), GEDIT_TYPE_PANEL, GeditPanelPrivate))
-
-struct _GeditPanelPrivate
-{
- GtkOrientation orientation;
-
- /* Title bar (vertical panel only) */
- GtkWidget *title_image;
- GtkWidget *title_label;
-
- /* Notebook */
- GtkWidget *notebook;
-};
-
-typedef struct _GeditPanelItem GeditPanelItem;
-
-struct _GeditPanelItem
-{
- gchar *name;
- GtkWidget *icon;
-};
-
-/* Properties */
-enum {
- PROP_0,
- PROP_ORIENTATION
-};
-
-/* Signals */
-enum {
- ITEM_ADDED,
- ITEM_REMOVED,
- CLOSE,
- FOCUS_DOCUMENT,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL];
-
-static GObject *gedit_panel_constructor (GType type,
- guint n_construct_properties,
- GObjectConstructParam *construct_properties);
-
-
-G_DEFINE_TYPE(GeditPanel, gedit_panel, GTK_TYPE_VBOX)
-
-static void
-gedit_panel_finalize (GObject *obj)
-{
- if (G_OBJECT_CLASS (gedit_panel_parent_class)->finalize)
- (*G_OBJECT_CLASS (gedit_panel_parent_class)->finalize) (obj);
-}
-
-static void
-gedit_panel_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- GeditPanel *panel = GEDIT_PANEL (object);
-
- switch (prop_id)
- {
- case PROP_ORIENTATION:
- g_value_set_enum(value, panel->priv->orientation);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gedit_panel_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- GeditPanel *panel = GEDIT_PANEL (object);
-
- switch (prop_id)
- {
- case PROP_ORIENTATION:
- panel->priv->orientation = g_value_get_enum (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gedit_panel_close (GeditPanel *panel)
-{
- gtk_widget_hide (GTK_WIDGET (panel));
-}
-
-static void
-gedit_panel_focus_document (GeditPanel *panel)
-{
- GtkWidget *toplevel = gtk_widget_get_toplevel (GTK_WIDGET (panel));
-#if !GTK_CHECK_VERSION (2, 18, 0)
- if (GTK_WIDGET_TOPLEVEL (toplevel) && GEDIT_IS_WINDOW (toplevel))
-#else
- if (gtk_widget_is_toplevel (toplevel) && GEDIT_IS_WINDOW (toplevel))
-#endif
- {
- GeditView *view;
-
- view = gedit_window_get_active_view (GEDIT_WINDOW (toplevel));
- if (view != NULL)
- gtk_widget_grab_focus (GTK_WIDGET (view));
- }
-}
-
-static void
-gedit_panel_grab_focus (GtkWidget *w)
-{
- gint n;
- GtkWidget *tab;
- GeditPanel *panel = GEDIT_PANEL (w);
-
- n = gtk_notebook_get_current_page (GTK_NOTEBOOK (panel->priv->notebook));
- if (n == -1)
- return;
-
- tab = gtk_notebook_get_nth_page (GTK_NOTEBOOK (panel->priv->notebook),
- n);
- g_return_if_fail (tab != NULL);
-
- gtk_widget_grab_focus (tab);
-}
-
-static void
-gedit_panel_class_init (GeditPanelClass *klass)
-{
- GtkBindingSet *binding_set;
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
-
- g_type_class_add_private (klass, sizeof (GeditPanelPrivate));
-
- object_class->constructor = gedit_panel_constructor;
- object_class->finalize = gedit_panel_finalize;
- object_class->get_property = gedit_panel_get_property;
- object_class->set_property = gedit_panel_set_property;
-
- g_object_class_install_property (object_class,
- PROP_ORIENTATION,
- g_param_spec_enum ("orientation",
- "Orientation",
- "The panel's orientation",
- GTK_TYPE_ORIENTATION,
- GTK_ORIENTATION_VERTICAL,
- G_PARAM_WRITABLE |
- G_PARAM_READABLE |
- G_PARAM_CONSTRUCT_ONLY |
- G_PARAM_STATIC_STRINGS));
-
- widget_class->grab_focus = gedit_panel_grab_focus;
-
- klass->close = gedit_panel_close;
- klass->focus_document = gedit_panel_focus_document;
-
- signals[ITEM_ADDED] =
- g_signal_new ("item_added",
- G_OBJECT_CLASS_TYPE (klass),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (GeditPanelClass, item_added),
- NULL, NULL,
- g_cclosure_marshal_VOID__OBJECT,
- G_TYPE_NONE,
- 1,
- GTK_TYPE_WIDGET);
- signals[ITEM_REMOVED] =
- g_signal_new ("item_removed",
- G_OBJECT_CLASS_TYPE (klass),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (GeditPanelClass, item_removed),
- NULL, NULL,
- g_cclosure_marshal_VOID__OBJECT,
- G_TYPE_NONE,
- 1,
- GTK_TYPE_WIDGET);
-
- /* Keybinding signals */
- signals[CLOSE] =
- g_signal_new ("close",
- G_OBJECT_CLASS_TYPE (klass),
- G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
- G_STRUCT_OFFSET (GeditPanelClass, close),
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
- signals[FOCUS_DOCUMENT] =
- g_signal_new ("focus_document",
- G_OBJECT_CLASS_TYPE (klass),
- G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
- G_STRUCT_OFFSET (GeditPanelClass, focus_document),
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
- binding_set = gtk_binding_set_by_class (klass);
-
- gtk_binding_entry_add_signal (binding_set,
- GDK_Escape,
- 0,
- "close",
- 0);
- gtk_binding_entry_add_signal (binding_set,
- GDK_Return,
- GDK_CONTROL_MASK,
- "focus_document",
- 0);
-}
-
-/* This is ugly, since it supports only known
- * storage types of GtkImage, otherwise fall back
- * to the empty icon.
- * See http://bugzilla.mate.org/show_bug.cgi?id=317520.
- */
-static void
-set_gtk_image_from_gtk_image (GtkImage *image,
- GtkImage *source)
-{
- switch (gtk_image_get_storage_type (source))
- {
- case GTK_IMAGE_EMPTY:
- gtk_image_clear (image);
- break;
- case GTK_IMAGE_PIXMAP:
- {
- GdkPixmap *pm;
- GdkBitmap *bm;
-
- gtk_image_get_pixmap (source, &pm, &bm);
- gtk_image_set_from_pixmap (image, pm, bm);
- }
- break;
- case GTK_IMAGE_IMAGE:
- {
- GdkImage *i;
- GdkBitmap *bm;
-
- gtk_image_get_image (source, &i, &bm);
- gtk_image_set_from_image (image, i, bm);
- }
- break;
- case GTK_IMAGE_PIXBUF:
- {
- GdkPixbuf *pb;
-
- pb = gtk_image_get_pixbuf (source);
- gtk_image_set_from_pixbuf (image, pb);
- }
- break;
- case GTK_IMAGE_STOCK:
- {
- gchar *s_id;
- GtkIconSize s;
-
- gtk_image_get_stock (source, &s_id, &s);
- gtk_image_set_from_stock (image, s_id, s);
- }
- break;
- case GTK_IMAGE_ICON_SET:
- {
- GtkIconSet *is;
- GtkIconSize s;
-
- gtk_image_get_icon_set (source, &is, &s);
- gtk_image_set_from_icon_set (image, is, s);
- }
- break;
- case GTK_IMAGE_ANIMATION:
- {
- GdkPixbufAnimation *a;
-
- a = gtk_image_get_animation (source);
- gtk_image_set_from_animation (image, a);
- }
- break;
- case GTK_IMAGE_ICON_NAME:
- {
- const gchar *n;
- GtkIconSize s;
-
- gtk_image_get_icon_name (source, &n, &s);
- gtk_image_set_from_icon_name (image, n, s);
- }
- break;
- default:
- gtk_image_set_from_stock (image,
- GTK_STOCK_FILE,
- GTK_ICON_SIZE_MENU);
- }
-}
-
-static void
-sync_title (GeditPanel *panel,
- GeditPanelItem *item)
-{
- if (panel->priv->orientation != GTK_ORIENTATION_VERTICAL)
- return;
-
- if (item != NULL)
- {
- gtk_label_set_text (GTK_LABEL (panel->priv->title_label),
- item->name);
-
- set_gtk_image_from_gtk_image (GTK_IMAGE (panel->priv->title_image),
- GTK_IMAGE (item->icon));
- }
- else
- {
- gtk_label_set_text (GTK_LABEL (panel->priv->title_label),
- _("Empty"));
-
- gtk_image_set_from_stock (GTK_IMAGE (panel->priv->title_image),
- GTK_STOCK_FILE,
- GTK_ICON_SIZE_MENU);
- }
-}
-
-static void
-notebook_page_changed (GtkNotebook *notebook,
- GtkNotebookPage *page,
- guint page_num,
- GeditPanel *panel)
-{
- GtkWidget *item;
- GeditPanelItem *data;
-
- item = gtk_notebook_get_nth_page (notebook, page_num);
- g_return_if_fail (item != NULL);
-
- data = (GeditPanelItem *)g_object_get_data (G_OBJECT (item),
- PANEL_ITEM_KEY);
- g_return_if_fail (data != NULL);
-
- sync_title (panel, data);
-}
-
-static void
-panel_show (GeditPanel *panel,
- gpointer user_data)
-{
- gint page;
- GtkNotebook *nb;
-
- nb = GTK_NOTEBOOK (panel->priv->notebook);
-
- page = gtk_notebook_get_current_page (nb);
-
- if (page != -1)
- notebook_page_changed (nb, NULL, page, panel);
-}
-
-static void
-gedit_panel_init (GeditPanel *panel)
-{
- panel->priv = GEDIT_PANEL_GET_PRIVATE (panel);
-}
-
-static void
-close_button_clicked_cb (GtkWidget *widget,
- GtkWidget *panel)
-{
- gtk_widget_hide (panel);
-}
-
-static GtkWidget *
-create_close_button (GeditPanel *panel)
-{
- GtkWidget *button;
-
- button = gedit_close_button_new ();
-
- gtk_widget_set_tooltip_text (button, _("Hide panel"));
-
- g_signal_connect (button,
- "clicked",
- G_CALLBACK (close_button_clicked_cb),
- panel);
-
- return button;
-}
-
-static void
-build_notebook_for_panel (GeditPanel *panel)
-{
- /* Create the panel notebook */
- panel->priv->notebook = gtk_notebook_new ();
-
- gtk_notebook_set_tab_pos (GTK_NOTEBOOK (panel->priv->notebook),
- GTK_POS_BOTTOM);
- gtk_notebook_set_scrollable (GTK_NOTEBOOK (panel->priv->notebook),
- TRUE);
- gtk_notebook_popup_enable (GTK_NOTEBOOK (panel->priv->notebook));
-
- gtk_widget_show (GTK_WIDGET (panel->priv->notebook));
-
- g_signal_connect (panel->priv->notebook,
- "switch-page",
- G_CALLBACK (notebook_page_changed),
- panel);
-}
-
-static void
-build_horizontal_panel (GeditPanel *panel)
-{
- GtkWidget *box;
- GtkWidget *sidebar;
- GtkWidget *close_button;
-
- box = gtk_hbox_new(FALSE, 0);
-
- gtk_box_pack_start (GTK_BOX (box),
- panel->priv->notebook,
- TRUE,
- TRUE,
- 0);
-
- /* Toolbar, close button and first separator */
- sidebar = gtk_vbox_new(FALSE, 6);
- gtk_container_set_border_width (GTK_CONTAINER (sidebar), 4);
-
- gtk_box_pack_start (GTK_BOX (box),
- sidebar,
- FALSE,
- FALSE,
- 0);
-
- close_button = create_close_button (panel);
-
- gtk_box_pack_start (GTK_BOX (sidebar),
- close_button,
- FALSE,
- FALSE,
- 0);
-
- gtk_widget_show_all (box);
-
- gtk_box_pack_start (GTK_BOX (panel),
- box,
- TRUE,
- TRUE,
- 0);
-}
-
-static void
-build_vertical_panel (GeditPanel *panel)
-{
- GtkWidget *close_button;
- GtkWidget *title_hbox;
- GtkWidget *icon_name_hbox;
- GtkWidget *dummy_label;
-
- /* Create title hbox */
- title_hbox = gtk_hbox_new (FALSE, 6);
- gtk_container_set_border_width (GTK_CONTAINER (title_hbox), 5);
-
- gtk_box_pack_start (GTK_BOX (panel), title_hbox, FALSE, FALSE, 0);
-
- icon_name_hbox = gtk_hbox_new (FALSE, 0);
- gtk_box_pack_start (GTK_BOX (title_hbox),
- icon_name_hbox,
- TRUE,
- TRUE,
- 0);
-
- panel->priv->title_image =
- gtk_image_new_from_stock (GTK_STOCK_FILE,
- GTK_ICON_SIZE_MENU);
- gtk_box_pack_start (GTK_BOX (icon_name_hbox),
- panel->priv->title_image,
- FALSE,
- TRUE,
- 0);
-
- dummy_label = gtk_label_new (" ");
-
- gtk_box_pack_start (GTK_BOX (icon_name_hbox),
- dummy_label,
- FALSE,
- FALSE,
- 0);
-
- panel->priv->title_label = gtk_label_new (_("Empty"));
- gtk_misc_set_alignment (GTK_MISC (panel->priv->title_label), 0, 0.5);
- gtk_label_set_ellipsize(GTK_LABEL (panel->priv->title_label), PANGO_ELLIPSIZE_END);
-
- gtk_box_pack_start (GTK_BOX (icon_name_hbox),
- panel->priv->title_label,
- TRUE,
- TRUE,
- 0);
-
- close_button = create_close_button (panel);
-
- gtk_box_pack_start (GTK_BOX (title_hbox),
- close_button,
- FALSE,
- FALSE,
- 0);
-
- gtk_widget_show_all (title_hbox);
-
- gtk_box_pack_start (GTK_BOX (panel),
- panel->priv->notebook,
- TRUE,
- TRUE,
- 0);
-}
-
-static GObject *
-gedit_panel_constructor (GType type,
- guint n_construct_properties,
- GObjectConstructParam *construct_properties)
-{
-
- /* Invoke parent constructor. */
- GeditPanelClass *klass = GEDIT_PANEL_CLASS (g_type_class_peek (GEDIT_TYPE_PANEL));
- GObjectClass *parent_class = G_OBJECT_CLASS (g_type_class_peek_parent (klass));
- GObject *obj = parent_class->constructor (type,
- n_construct_properties,
- construct_properties);
-
- /* Build the panel, now that we know the orientation
- (_init has been called previously) */
- GeditPanel *panel = GEDIT_PANEL (obj);
-
- build_notebook_for_panel (panel);
- if (panel->priv->orientation == GTK_ORIENTATION_HORIZONTAL)
- build_horizontal_panel (panel);
- else
- build_vertical_panel (panel);
-
- g_signal_connect (panel,
- "show",
- G_CALLBACK (panel_show),
- NULL);
-
- return obj;
-}
-
-/**
- * gedit_panel_new:
- * @orientation: a #GtkOrientation
- *
- * Creates a new #GeditPanel with the given @orientation. You shouldn't create
- * a new panel use gedit_window_get_side_panel() or gedit_window_get_bottom_panel()
- * instead.
- *
- * Returns: a new #GeditPanel object.
- */
-GtkWidget *
-gedit_panel_new (GtkOrientation orientation)
-{
- return GTK_WIDGET (g_object_new (GEDIT_TYPE_PANEL, "orientation", orientation, NULL));
-}
-
-static GtkWidget *
-build_tab_label (GeditPanel *panel,
- GtkWidget *item,
- const gchar *name,
- GtkWidget *icon)
-{
- GtkWidget *hbox, *label_hbox, *label_ebox;
- GtkWidget *label;
-
- /* set hbox spacing and label padding (see below) so that there's an
- * equal amount of space around the label */
- hbox = gtk_hbox_new (FALSE, 4);
-
- label_ebox = gtk_event_box_new ();
- gtk_event_box_set_visible_window (GTK_EVENT_BOX (label_ebox), FALSE);
- gtk_box_pack_start (GTK_BOX (hbox), label_ebox, TRUE, TRUE, 0);
-
- label_hbox = gtk_hbox_new (FALSE, 4);
- gtk_container_add (GTK_CONTAINER (label_ebox), label_hbox);
-
- /* setup icon */
- gtk_box_pack_start (GTK_BOX (label_hbox), icon, FALSE, FALSE, 0);
-
- /* setup label */
- label = gtk_label_new (name);
- gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
- gtk_misc_set_padding (GTK_MISC (label), 0, 0);
- gtk_box_pack_start (GTK_BOX (label_hbox), label, TRUE, TRUE, 0);
-
- gtk_widget_set_tooltip_text (label_ebox, name);
-
- gtk_widget_show_all (hbox);
-
- if (panel->priv->orientation == GTK_ORIENTATION_VERTICAL)
- gtk_widget_hide(label);
-
- g_object_set_data (G_OBJECT (item), "label", label);
- g_object_set_data (G_OBJECT (item), "hbox", hbox);
-
- return hbox;
-}
-
-/**
- * gedit_panel_add_item:
- * @panel: a #GeditPanel
- * @item: the #GtkWidget to add to the @panel
- * @name: the name to be shown in the @panel
- * @image: the image to be shown in the @panel
- *
- * Adds a new item to the @panel.
- */
-void
-gedit_panel_add_item (GeditPanel *panel,
- GtkWidget *item,
- const gchar *name,
- GtkWidget *image)
-{
- GeditPanelItem *data;
- GtkWidget *tab_label;
- GtkWidget *menu_label;
- gint w, h;
-
- g_return_if_fail (GEDIT_IS_PANEL (panel));
- g_return_if_fail (GTK_IS_WIDGET (item));
- g_return_if_fail (name != NULL);
- g_return_if_fail (image == NULL || GTK_IS_IMAGE (image));
-
- data = g_new (GeditPanelItem, 1);
-
- data->name = g_strdup (name);
-
- if (image == NULL)
- {
- /* default to empty */
- data->icon = gtk_image_new_from_stock (GTK_STOCK_FILE,
- GTK_ICON_SIZE_MENU);
- }
- else
- {
- data->icon = image;
- }
-
- gtk_icon_size_lookup (GTK_ICON_SIZE_MENU, &w, &h);
- gtk_widget_set_size_request (data->icon, w, h);
-
- g_object_set_data (G_OBJECT (item),
- PANEL_ITEM_KEY,
- data);
-
- tab_label = build_tab_label (panel, item, data->name, data->icon);
-
- menu_label = gtk_label_new (name);
- gtk_misc_set_alignment (GTK_MISC (menu_label), 0.0, 0.5);
-
- if (!GTK_WIDGET_VISIBLE (item))
- gtk_widget_show (item);
-
- gtk_notebook_append_page_menu (GTK_NOTEBOOK (panel->priv->notebook),
- item,
- tab_label,
- menu_label);
-
- g_signal_emit (G_OBJECT (panel), signals[ITEM_ADDED], 0, item);
-}
-
-/**
- * gedit_panel_add_item_with_stock_icon:
- * @panel: a #GeditPanel
- * @item: the #GtkWidget to add to the @panel
- * @name: the name to be shown in the @panel
- * @stock_id: a stock id
- *
- * Same as gedit_panel_add_item() but using an image from stock.
- */
-void
-gedit_panel_add_item_with_stock_icon (GeditPanel *panel,
- GtkWidget *item,
- const gchar *name,
- const gchar *stock_id)
-{
- GtkWidget *icon = NULL;
-
- if (stock_id != NULL)
- {
- icon = gtk_image_new_from_stock (stock_id,
- GTK_ICON_SIZE_MENU);
- }
-
- gedit_panel_add_item (panel, item, name, icon);
-}
-
-/**
- * gedit_panel_remove_item:
- * @panel: a #GeditPanel
- * @item: the item to be removed from the panel
- *
- * Removes the widget @item from the panel if it is in the @panel and returns
- * TRUE if there was not any problem.
- *
- * Returns: TRUE if it was well removed.
- */
-gboolean
-gedit_panel_remove_item (GeditPanel *panel,
- GtkWidget *item)
-{
- GeditPanelItem *data;
- gint page_num;
-
- g_return_val_if_fail (GEDIT_IS_PANEL (panel), FALSE);
- g_return_val_if_fail (GTK_IS_WIDGET (item), FALSE);
-
- page_num = gtk_notebook_page_num (GTK_NOTEBOOK (panel->priv->notebook),
- item);
-
- if (page_num == -1)
- return FALSE;
-
- data = (GeditPanelItem *)g_object_get_data (G_OBJECT (item),
- PANEL_ITEM_KEY);
- g_return_val_if_fail (data != NULL, FALSE);
-
- g_free (data->name);
- g_free (data);
-
- g_object_set_data (G_OBJECT (item),
- PANEL_ITEM_KEY,
- NULL);
-
- /* ref the item to keep it alive during signal emission */
- g_object_ref (G_OBJECT (item));
-
- gtk_notebook_remove_page (GTK_NOTEBOOK (panel->priv->notebook),
- page_num);
-
- /* if we removed all the pages, reset the title */
- if (gtk_notebook_get_n_pages (GTK_NOTEBOOK (panel->priv->notebook)) == 0)
- sync_title (panel, NULL);
-
- g_signal_emit (G_OBJECT (panel), signals[ITEM_REMOVED], 0, item);
-
- g_object_unref (G_OBJECT (item));
-
- return TRUE;
-}
-
-/**
- * gedit_panel_activate_item:
- * @panel: a #GeditPanel
- * @item: the item to be activated
- *
- * Switches to the page that contains @item.
- *
- * Returns: TRUE if it was activated
- */
-gboolean
-gedit_panel_activate_item (GeditPanel *panel,
- GtkWidget *item)
-{
- gint page_num;
-
- g_return_val_if_fail (GEDIT_IS_PANEL (panel), FALSE);
- g_return_val_if_fail (GTK_IS_WIDGET (item), FALSE);
-
- page_num = gtk_notebook_page_num (GTK_NOTEBOOK (panel->priv->notebook),
- item);
-
- if (page_num == -1)
- return FALSE;
-
- gtk_notebook_set_current_page (GTK_NOTEBOOK (panel->priv->notebook),
- page_num);
-
- return TRUE;
-}
-
-/**
- * gedit_panel_item_is_active:
- * @panel: a #GeditPanel
- * @item: a widget contained in #GeditPanel
- *
- * Wheter @item is the one current active in @panel
- *
- * Returns: TRUE if the widget is active
- */
-gboolean
-gedit_panel_item_is_active (GeditPanel *panel,
- GtkWidget *item)
-{
- gint cur_page;
- gint page_num;
-
- g_return_val_if_fail (GEDIT_IS_PANEL (panel), FALSE);
- g_return_val_if_fail (GTK_IS_WIDGET (item), FALSE);
-
- page_num = gtk_notebook_page_num (GTK_NOTEBOOK (panel->priv->notebook),
- item);
-
- if (page_num == -1)
- return FALSE;
-
- cur_page = gtk_notebook_get_current_page (
- GTK_NOTEBOOK (panel->priv->notebook));
-
- return (page_num == cur_page);
-}
-
-/**
- * gedit_panel_get_orientation:
- * @panel: a #GeditPanel
- *
- * Gets the orientation of the @panel.
- *
- * Returns: the #GtkOrientation of #GeditPanel
- */
-GtkOrientation
-gedit_panel_get_orientation (GeditPanel *panel)
-{
- g_return_val_if_fail (GEDIT_IS_PANEL (panel), GTK_ORIENTATION_VERTICAL);
-
- return panel->priv->orientation;
-}
-
-/**
- * gedit_panel_get_n_items:
- * @panel: a #GeditPanel
- *
- * Gets the number of items in a @panel.
- *
- * Returns: the number of items contained in #GeditPanel
- */
-gint
-gedit_panel_get_n_items (GeditPanel *panel)
-{
- g_return_val_if_fail (GEDIT_IS_PANEL (panel), -1);
-
- return gtk_notebook_get_n_pages (GTK_NOTEBOOK (panel->priv->notebook));
-}
-
-gint
-_gedit_panel_get_active_item_id (GeditPanel *panel)
-{
- gint cur_page;
- GtkWidget *item;
- GeditPanelItem *data;
-
- g_return_val_if_fail (GEDIT_IS_PANEL (panel), 0);
-
- cur_page = gtk_notebook_get_current_page (
- GTK_NOTEBOOK (panel->priv->notebook));
- if (cur_page == -1)
- return 0;
-
- item = gtk_notebook_get_nth_page (
- GTK_NOTEBOOK (panel->priv->notebook),
- cur_page);
-
- /* FIXME: for now we use as the hash of the name as id.
- * However the name is not guaranteed to be unique and
- * it is a translated string, so it's subotimal, but should
- * be good enough for now since we don't want to add an
- * ad hoc id argument.
- */
-
- data = (GeditPanelItem *)g_object_get_data (G_OBJECT (item),
- PANEL_ITEM_KEY);
- g_return_val_if_fail (data != NULL, 0);
-
- return g_str_hash (data->name);
-}
-
-void
-_gedit_panel_set_active_item_by_id (GeditPanel *panel,
- gint id)
-{
- gint n, i;
-
- g_return_if_fail (GEDIT_IS_PANEL (panel));
-
- if (id == 0)
- return;
-
- n = gtk_notebook_get_n_pages (
- GTK_NOTEBOOK (panel->priv->notebook));
-
- for (i = 0; i < n; i++)
- {
- GtkWidget *item;
- GeditPanelItem *data;
-
- item = gtk_notebook_get_nth_page (
- GTK_NOTEBOOK (panel->priv->notebook), i);
-
- data = (GeditPanelItem *)g_object_get_data (G_OBJECT (item),
- PANEL_ITEM_KEY);
- g_return_if_fail (data != NULL);
-
- if (g_str_hash (data->name) == id)
- {
- gtk_notebook_set_current_page (
- GTK_NOTEBOOK (panel->priv->notebook), i);
-
- return;
- }
- }
-}
diff --git a/gedit/gedit-panel.h b/gedit/gedit-panel.h
deleted file mode 100755
index 87b0536c..00000000
--- a/gedit/gedit-panel.h
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * gedit-panel.h
- * This file is part of gedit
- *
- * Copyright (C) 2005 - Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifndef __GEDIT_PANEL_H__
-#define __GEDIT_PANEL_H__
-
-#include <gtk/gtk.h>
-
-G_BEGIN_DECLS
-
-/*
- * Type checking and casting macros
- */
-#define GEDIT_TYPE_PANEL (gedit_panel_get_type())
-#define GEDIT_PANEL(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GEDIT_TYPE_PANEL, GeditPanel))
-#define GEDIT_PANEL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GEDIT_TYPE_PANEL, GeditPanelClass))
-#define GEDIT_IS_PANEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GEDIT_TYPE_PANEL))
-#define GEDIT_IS_PANEL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEDIT_TYPE_PANEL))
-#define GEDIT_PANEL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GEDIT_TYPE_PANEL, GeditPanelClass))
-
-/* Private structure type */
-typedef struct _GeditPanelPrivate GeditPanelPrivate;
-
-/*
- * Main object structure
- */
-typedef struct _GeditPanel GeditPanel;
-
-struct _GeditPanel
-{
- GtkVBox vbox;
-
- /*< private > */
- GeditPanelPrivate *priv;
-};
-
-/*
- * Class definition
- */
-typedef struct _GeditPanelClass GeditPanelClass;
-
-struct _GeditPanelClass
-{
- GtkVBoxClass parent_class;
-
- void (* item_added) (GeditPanel *panel,
- GtkWidget *item);
- void (* item_removed) (GeditPanel *panel,
- GtkWidget *item);
-
- /* Keybinding signals */
- void (* close) (GeditPanel *panel);
- void (* focus_document) (GeditPanel *panel);
-
- /* Padding for future expansion */
- void (*_gedit_reserved1) (void);
- void (*_gedit_reserved2) (void);
- void (*_gedit_reserved3) (void);
- void (*_gedit_reserved4) (void);
-};
-
-/*
- * Public methods
- */
-GType gedit_panel_get_type (void) G_GNUC_CONST;
-
-GtkWidget *gedit_panel_new (GtkOrientation orientation);
-
-void gedit_panel_add_item (GeditPanel *panel,
- GtkWidget *item,
- const gchar *name,
- GtkWidget *image);
-
-void gedit_panel_add_item_with_stock_icon (GeditPanel *panel,
- GtkWidget *item,
- const gchar *name,
- const gchar *stock_id);
-
-gboolean gedit_panel_remove_item (GeditPanel *panel,
- GtkWidget *item);
-
-gboolean gedit_panel_activate_item (GeditPanel *panel,
- GtkWidget *item);
-
-gboolean gedit_panel_item_is_active (GeditPanel *panel,
- GtkWidget *item);
-
-GtkOrientation gedit_panel_get_orientation (GeditPanel *panel);
-
-gint gedit_panel_get_n_items (GeditPanel *panel);
-
-
-/*
- * Non exported functions
- */
-gint _gedit_panel_get_active_item_id (GeditPanel *panel);
-
-void _gedit_panel_set_active_item_by_id (GeditPanel *panel,
- gint id);
-
-G_END_DECLS
-
-#endif /* __GEDIT_PANEL_H__ */
diff --git a/gedit/gedit-plugin-info-priv.h b/gedit/gedit-plugin-info-priv.h
deleted file mode 100755
index 247b51c5..00000000
--- a/gedit/gedit-plugin-info-priv.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * gedit-plugin-info-priv.h
- * This file is part of gedit
- *
- * Copyright (C) 2002-2005 - Paolo Maggi
- * Copyright (C) 2007 - Paolo Maggi, Steve Frécinaux
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2002-2007. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifndef __GEDIT_PLUGIN_INFO_PRIV_H__
-#define __GEDIT_PLUGIN_INFO_PRIV_H__
-
-#include "gedit-plugin-info.h"
-#include "gedit-plugin.h"
-
-struct _GeditPluginInfo
-{
- gint refcount;
-
- GeditPlugin *plugin;
- gchar *file;
-
- gchar *module_name;
- gchar *loader;
- gchar **dependencies;
-
- gchar *name;
- gchar *desc;
- gchar *icon_name;
- gchar **authors;
- gchar *copyright;
- gchar *website;
- gchar *version;
-
- /* A plugin is unavailable if it is not possible to activate it
- due to an error loading the plugin module (e.g. for Python plugins
- when the interpreter has not been correctly initializated) */
- gint available : 1;
-};
-
-GeditPluginInfo *_gedit_plugin_info_new (const gchar *file);
-void _gedit_plugin_info_ref (GeditPluginInfo *info);
-void _gedit_plugin_info_unref (GeditPluginInfo *info);
-
-
-#endif /* __GEDIT_PLUGIN_INFO_PRIV_H__ */
diff --git a/gedit/gedit-plugin-info.c b/gedit/gedit-plugin-info.c
deleted file mode 100755
index 31411c42..00000000
--- a/gedit/gedit-plugin-info.c
+++ /dev/null
@@ -1,394 +0,0 @@
-/*
- * gedit-plugin-info.c
- * This file is part of gedit
- *
- * Copyright (C) 2002-2005 - Paolo Maggi
- * Copyright (C) 2007 - Paolo Maggi, Steve Frécinaux
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2002-2007. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <string.h>
-#include <glib/gi18n.h>
-#include <glib.h>
-
-#include "gedit-plugin-info.h"
-#include "gedit-plugin-info-priv.h"
-#include "gedit-debug.h"
-#include "gedit-plugin.h"
-
-void
-_gedit_plugin_info_ref (GeditPluginInfo *info)
-{
- g_atomic_int_inc (&info->refcount);
-}
-
-static GeditPluginInfo *
-gedit_plugin_info_copy (GeditPluginInfo *info)
-{
- _gedit_plugin_info_ref (info);
- return info;
-}
-
-void
-_gedit_plugin_info_unref (GeditPluginInfo *info)
-{
- if (!g_atomic_int_dec_and_test (&info->refcount))
- return;
-
- if (info->plugin != NULL)
- {
- gedit_debug_message (DEBUG_PLUGINS, "Unref plugin %s", info->name);
-
- g_object_unref (info->plugin);
- }
-
- g_free (info->file);
- g_free (info->module_name);
- g_strfreev (info->dependencies);
- g_free (info->name);
- g_free (info->desc);
- g_free (info->icon_name);
- g_free (info->website);
- g_free (info->copyright);
- g_free (info->loader);
- g_free (info->version);
- g_strfreev (info->authors);
-
- g_free (info);
-}
-
-/**
- * gedit_plugin_info_get_type:
- *
- * Retrieves the #GType object which is associated with the #GeditPluginInfo
- * class.
- *
- * Return value: the GType associated with #GeditPluginInfo.
- **/
-GType
-gedit_plugin_info_get_type (void)
-{
- static GType the_type = 0;
-
- if (G_UNLIKELY (!the_type))
- the_type = g_boxed_type_register_static (
- "GeditPluginInfo",
- (GBoxedCopyFunc) gedit_plugin_info_copy,
- (GBoxedFreeFunc) _gedit_plugin_info_unref);
-
- return the_type;
-}
-
-/**
- * gedit_plugin_info_new:
- * @filename: the filename where to read the plugin information
- *
- * Creates a new #GeditPluginInfo from a file on the disk.
- *
- * Return value: a newly created #GeditPluginInfo.
- */
-GeditPluginInfo *
-_gedit_plugin_info_new (const gchar *file)
-{
- GeditPluginInfo *info;
- GKeyFile *plugin_file = NULL;
- gchar *str;
-
- g_return_val_if_fail (file != NULL, NULL);
-
- gedit_debug_message (DEBUG_PLUGINS, "Loading plugin: %s", file);
-
- info = g_new0 (GeditPluginInfo, 1);
- info->refcount = 1;
- info->file = g_strdup (file);
-
- plugin_file = g_key_file_new ();
- if (!g_key_file_load_from_file (plugin_file, file, G_KEY_FILE_NONE, NULL))
- {
- g_warning ("Bad plugin file: %s", file);
- goto error;
- }
-
- if (!g_key_file_has_key (plugin_file,
- "Gedit Plugin",
- "IAge",
- NULL))
- {
- gedit_debug_message (DEBUG_PLUGINS,
- "IAge key does not exist in file: %s", file);
- goto error;
- }
-
- /* Check IAge=2 */
- if (g_key_file_get_integer (plugin_file,
- "Gedit Plugin",
- "IAge",
- NULL) != 2)
- {
- gedit_debug_message (DEBUG_PLUGINS,
- "Wrong IAge in file: %s", file);
- goto error;
- }
-
- /* Get module name */
- str = g_key_file_get_string (plugin_file,
- "Gedit Plugin",
- "Module",
- NULL);
-
- if ((str != NULL) && (*str != '\0'))
- {
- info->module_name = str;
- }
- else
- {
- g_warning ("Could not find 'Module' in %s", file);
- goto error;
- }
-
- /* Get the dependency list */
- info->dependencies = g_key_file_get_string_list (plugin_file,
- "Gedit Plugin",
- "Depends",
- NULL,
- NULL);
- if (info->dependencies == NULL)
- {
- gedit_debug_message (DEBUG_PLUGINS, "Could not find 'Depends' in %s", file);
- info->dependencies = g_new0 (gchar *, 1);
- }
-
- /* Get the loader for this plugin */
- str = g_key_file_get_string (plugin_file,
- "Gedit Plugin",
- "Loader",
- NULL);
-
- if ((str != NULL) && (*str != '\0'))
- {
- info->loader = str;
- }
- else
- {
- /* default to the C loader */
- info->loader = g_strdup("c");
- }
-
- /* Get Name */
- str = g_key_file_get_locale_string (plugin_file,
- "Gedit Plugin",
- "Name",
- NULL, NULL);
- if (str)
- info->name = str;
- else
- {
- g_warning ("Could not find 'Name' in %s", file);
- goto error;
- }
-
- /* Get Description */
- str = g_key_file_get_locale_string (plugin_file,
- "Gedit Plugin",
- "Description",
- NULL, NULL);
- if (str)
- info->desc = str;
- else
- gedit_debug_message (DEBUG_PLUGINS, "Could not find 'Description' in %s", file);
-
- /* Get Icon */
- str = g_key_file_get_locale_string (plugin_file,
- "Gedit Plugin",
- "Icon",
- NULL, NULL);
- if (str)
- info->icon_name = str;
- else
- gedit_debug_message (DEBUG_PLUGINS, "Could not find 'Icon' in %s, using 'gedit-plugin'", file);
-
-
- /* Get Authors */
- info->authors = g_key_file_get_string_list (plugin_file,
- "Gedit Plugin",
- "Authors",
- NULL,
- NULL);
- if (info->authors == NULL)
- gedit_debug_message (DEBUG_PLUGINS, "Could not find 'Authors' in %s", file);
-
-
- /* Get Copyright */
- str = g_key_file_get_string (plugin_file,
- "Gedit Plugin",
- "Copyright",
- NULL);
- if (str)
- info->copyright = str;
- else
- gedit_debug_message (DEBUG_PLUGINS, "Could not find 'Copyright' in %s", file);
-
- /* Get Website */
- str = g_key_file_get_string (plugin_file,
- "Gedit Plugin",
- "Website",
- NULL);
- if (str)
- info->website = str;
- else
- gedit_debug_message (DEBUG_PLUGINS, "Could not find 'Website' in %s", file);
-
- /* Get Version */
- str = g_key_file_get_string (plugin_file,
- "Gedit Plugin",
- "Version",
- NULL);
- if (str)
- info->version = str;
- else
- gedit_debug_message (DEBUG_PLUGINS, "Could not find 'Version' in %s", file);
-
- g_key_file_free (plugin_file);
-
- /* If we know nothing about the availability of the plugin,
- set it as available */
- info->available = TRUE;
-
- return info;
-
-error:
- g_free (info->file);
- g_free (info->module_name);
- g_free (info->name);
- g_free (info->loader);
- g_free (info);
- g_key_file_free (plugin_file);
-
- return NULL;
-}
-
-gboolean
-gedit_plugin_info_is_active (GeditPluginInfo *info)
-{
- g_return_val_if_fail (info != NULL, FALSE);
-
- return info->available && info->plugin != NULL;
-}
-
-gboolean
-gedit_plugin_info_is_available (GeditPluginInfo *info)
-{
- g_return_val_if_fail (info != NULL, FALSE);
-
- return info->available != FALSE;
-}
-
-gboolean
-gedit_plugin_info_is_configurable (GeditPluginInfo *info)
-{
- gedit_debug_message (DEBUG_PLUGINS, "Is '%s' configurable?", info->name);
-
- g_return_val_if_fail (info != NULL, FALSE);
-
- if (info->plugin == NULL || !info->available)
- return FALSE;
-
- return gedit_plugin_is_configurable (info->plugin);
-}
-
-const gchar *
-gedit_plugin_info_get_module_name (GeditPluginInfo *info)
-{
- g_return_val_if_fail (info != NULL, NULL);
-
- return info->module_name;
-}
-
-const gchar *
-gedit_plugin_info_get_name (GeditPluginInfo *info)
-{
- g_return_val_if_fail (info != NULL, NULL);
-
- return info->name;
-}
-
-const gchar *
-gedit_plugin_info_get_description (GeditPluginInfo *info)
-{
- g_return_val_if_fail (info != NULL, NULL);
-
- return info->desc;
-}
-
-const gchar *
-gedit_plugin_info_get_icon_name (GeditPluginInfo *info)
-{
- g_return_val_if_fail (info != NULL, NULL);
-
- /* use the gedit-plugin icon as a default if the plugin does not
- have its own */
- if (info->icon_name != NULL &&
- gtk_icon_theme_has_icon (gtk_icon_theme_get_default (),
- info->icon_name))
- return info->icon_name;
- else
- return "gedit-plugin";
-}
-
-const gchar **
-gedit_plugin_info_get_authors (GeditPluginInfo *info)
-{
- g_return_val_if_fail (info != NULL, (const gchar **)NULL);
-
- return (const gchar **) info->authors;
-}
-
-const gchar *
-gedit_plugin_info_get_website (GeditPluginInfo *info)
-{
- g_return_val_if_fail (info != NULL, NULL);
-
- return info->website;
-}
-
-const gchar *
-gedit_plugin_info_get_copyright (GeditPluginInfo *info)
-{
- g_return_val_if_fail (info != NULL, NULL);
-
- return info->copyright;
-}
-
-const gchar *
-gedit_plugin_info_get_version (GeditPluginInfo *info)
-{
- g_return_val_if_fail (info != NULL, NULL);
-
- return info->version;
-}
diff --git a/gedit/gedit-plugin-info.h b/gedit/gedit-plugin-info.h
deleted file mode 100755
index ac9e2fa7..00000000
--- a/gedit/gedit-plugin-info.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * gedit-plugin-info.h
- * This file is part of gedit
- *
- * Copyright (C) 2002-2005 - Paolo Maggi
- * Copyright (C) 2007 - Paolo Maggi, Steve Frécinaux
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2002-2007. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifndef __GEDIT_PLUGIN_INFO_H__
-#define __GEDIT_PLUGIN_INFO_H__
-
-#include <glib-object.h>
-
-G_BEGIN_DECLS
-
-#define GEDIT_TYPE_PLUGIN_INFO (gedit_plugin_info_get_type ())
-#define GEDIT_PLUGIN_INFO(obj) ((GeditPluginInfo *) (obj))
-
-typedef struct _GeditPluginInfo GeditPluginInfo;
-
-GType gedit_plugin_info_get_type (void) G_GNUC_CONST;
-
-gboolean gedit_plugin_info_is_active (GeditPluginInfo *info);
-gboolean gedit_plugin_info_is_available (GeditPluginInfo *info);
-gboolean gedit_plugin_info_is_configurable (GeditPluginInfo *info);
-
-const gchar *gedit_plugin_info_get_module_name (GeditPluginInfo *info);
-
-const gchar *gedit_plugin_info_get_name (GeditPluginInfo *info);
-const gchar *gedit_plugin_info_get_description (GeditPluginInfo *info);
-const gchar *gedit_plugin_info_get_icon_name (GeditPluginInfo *info);
-const gchar **gedit_plugin_info_get_authors (GeditPluginInfo *info);
-const gchar *gedit_plugin_info_get_website (GeditPluginInfo *info);
-const gchar *gedit_plugin_info_get_copyright (GeditPluginInfo *info);
-const gchar *gedit_plugin_info_get_version (GeditPluginInfo *info);
-
-G_END_DECLS
-
-#endif /* __GEDIT_PLUGIN_INFO_H__ */
-
diff --git a/gedit/gedit-plugin-loader.c b/gedit/gedit-plugin-loader.c
deleted file mode 100755
index 2dccde49..00000000
--- a/gedit/gedit-plugin-loader.c
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * gedit-plugin-loader.c
- * This file is part of gedit
- *
- * Copyright (C) 2008 - Jesse van den Kieboom
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#include "gedit-plugin-loader.h"
-
-static void
-gedit_plugin_loader_base_init (gpointer g_class)
-{
- static gboolean initialized = FALSE;
-
- if (G_UNLIKELY (!initialized))
- {
- /* create interface signals here. */
- initialized = TRUE;
- }
-}
-
-GType
-gedit_plugin_loader_get_type (void)
-{
- static GType type = 0;
-
- if (G_UNLIKELY (type == 0))
- {
- static const GTypeInfo info =
- {
- sizeof (GeditPluginLoaderInterface),
- gedit_plugin_loader_base_init, /* base_init */
- NULL, /* base_finalize */
- NULL, /* class_init */
- NULL, /* class_finalize */
- NULL, /* class_data */
- 0,
- 0, /* n_preallocs */
- NULL /* instance_init */
- };
-
- type = g_type_register_static (G_TYPE_INTERFACE, "GeditPluginLoader", &info, 0);
- }
-
- return type;
-}
-
-const gchar *
-gedit_plugin_loader_type_get_id (GType type)
-{
- GTypeClass *klass;
- GeditPluginLoaderInterface *iface;
-
- klass = g_type_class_ref (type);
-
- if (klass == NULL)
- {
- g_warning ("Could not get class info for plugin loader");
- return NULL;
- }
-
- iface = g_type_interface_peek (klass, GEDIT_TYPE_PLUGIN_LOADER);
-
- if (iface == NULL)
- {
- g_warning ("Could not get plugin loader interface");
- g_type_class_unref (klass);
-
- return NULL;
- }
-
- g_return_val_if_fail (iface->get_id != NULL, NULL);
- return iface->get_id ();
-}
-
-GeditPlugin *
-gedit_plugin_loader_load (GeditPluginLoader *loader,
- GeditPluginInfo *info,
- const gchar *path)
-{
- GeditPluginLoaderInterface *iface;
-
- g_return_val_if_fail (GEDIT_IS_PLUGIN_LOADER (loader), NULL);
-
- iface = GEDIT_PLUGIN_LOADER_GET_INTERFACE (loader);
- g_return_val_if_fail (iface->load != NULL, NULL);
-
- return iface->load (loader, info, path);
-}
-
-void
-gedit_plugin_loader_unload (GeditPluginLoader *loader,
- GeditPluginInfo *info)
-{
- GeditPluginLoaderInterface *iface;
-
- g_return_if_fail (GEDIT_IS_PLUGIN_LOADER (loader));
-
- iface = GEDIT_PLUGIN_LOADER_GET_INTERFACE (loader);
- g_return_if_fail (iface->unload != NULL);
-
- iface->unload (loader, info);
-}
-
-void
-gedit_plugin_loader_garbage_collect (GeditPluginLoader *loader)
-{
- GeditPluginLoaderInterface *iface;
-
- g_return_if_fail (GEDIT_IS_PLUGIN_LOADER (loader));
-
- iface = GEDIT_PLUGIN_LOADER_GET_INTERFACE (loader);
-
- if (iface->garbage_collect != NULL)
- iface->garbage_collect (loader);
-}
diff --git a/gedit/gedit-plugin-loader.h b/gedit/gedit-plugin-loader.h
deleted file mode 100755
index a064e5ec..00000000
--- a/gedit/gedit-plugin-loader.h
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * gedit-plugin-loader.h
- * This file is part of gedit
- *
- * Copyright (C) 2008 - Jesse van den Kieboom
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#ifndef __GEDIT_PLUGIN_LOADER_H__
-#define __GEDIT_PLUGIN_LOADER_H__
-
-#include <glib-object.h>
-#include <gedit/gedit-plugin.h>
-#include <gedit/gedit-plugin-info.h>
-
-G_BEGIN_DECLS
-
-#define GEDIT_TYPE_PLUGIN_LOADER (gedit_plugin_loader_get_type ())
-#define GEDIT_PLUGIN_LOADER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEDIT_TYPE_PLUGIN_LOADER, GeditPluginLoader))
-#define GEDIT_IS_PLUGIN_LOADER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEDIT_TYPE_PLUGIN_LOADER))
-#define GEDIT_PLUGIN_LOADER_GET_INTERFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), GEDIT_TYPE_PLUGIN_LOADER, GeditPluginLoaderInterface))
-
-typedef struct _GeditPluginLoader GeditPluginLoader; /* dummy object */
-typedef struct _GeditPluginLoaderInterface GeditPluginLoaderInterface;
-
-struct _GeditPluginLoaderInterface {
- GTypeInterface parent;
-
- const gchar *(*get_id) (void);
-
- GeditPlugin *(*load) (GeditPluginLoader *loader,
- GeditPluginInfo *info,
- const gchar *path);
-
- void (*unload) (GeditPluginLoader *loader,
- GeditPluginInfo *info);
-
- void (*garbage_collect) (GeditPluginLoader *loader);
-};
-
-GType gedit_plugin_loader_get_type (void);
-
-const gchar *gedit_plugin_loader_type_get_id (GType type);
-GeditPlugin *gedit_plugin_loader_load (GeditPluginLoader *loader,
- GeditPluginInfo *info,
- const gchar *path);
-void gedit_plugin_loader_unload (GeditPluginLoader *loader,
- GeditPluginInfo *info);
-void gedit_plugin_loader_garbage_collect (GeditPluginLoader *loader);
-
-/**
- * GEDIT_PLUGIN_LOADER_IMPLEMENT_INTERFACE(TYPE_IFACE, iface_init):
- *
- * Utility macro used to register interfaces for gobject types in plugin loaders.
- */
-#define GEDIT_PLUGIN_LOADER_IMPLEMENT_INTERFACE(TYPE_IFACE, iface_init) \
- const GInterfaceInfo g_implement_interface_info = \
- { \
- (GInterfaceInitFunc) iface_init, \
- NULL, \
- NULL \
- }; \
- \
- g_type_module_add_interface (type_module, \
- g_define_type_id, \
- TYPE_IFACE, \
- &g_implement_interface_info);
-
-/**
- * GEDIT_PLUGIN_LOADER_REGISTER_TYPE(PluginLoaderName, plugin_loader_name, PARENT_TYPE, loader_interface_init):
- *
- * Utility macro used to register plugin loaders.
- */
-#define GEDIT_PLUGIN_LOADER_REGISTER_TYPE(PluginLoaderName, plugin_loader_name, PARENT_TYPE, loader_iface_init) \
- G_DEFINE_DYNAMIC_TYPE_EXTENDED (PluginLoaderName, \
- plugin_loader_name, \
- PARENT_TYPE, \
- 0, \
- GEDIT_PLUGIN_LOADER_IMPLEMENT_INTERFACE(GEDIT_TYPE_PLUGIN_LOADER, loader_iface_init)); \
- \
- \
-G_MODULE_EXPORT GType \
-register_gedit_plugin_loader (GTypeModule *type_module) \
-{ \
- plugin_loader_name##_register_type (type_module); \
- \
- return plugin_loader_name##_get_type(); \
-}
-
-G_END_DECLS
-
-#endif /* __GEDIT_PLUGIN_LOADER_H__ */
diff --git a/gedit/gedit-plugin-manager.c b/gedit/gedit-plugin-manager.c
deleted file mode 100755
index b72abad9..00000000
--- a/gedit/gedit-plugin-manager.c
+++ /dev/null
@@ -1,889 +0,0 @@
-/*
- * gedit-plugin-manager.c
- * This file is part of gedit
- *
- * Copyright (C) 2002 Paolo Maggi and James Willcox
- * Copyright (C) 2003-2006 Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 1998-2006. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <string.h>
-
-#include <glib/gi18n.h>
-
-#include "gedit-plugin-manager.h"
-#include "gedit-utils.h"
-#include "gedit-plugins-engine.h"
-#include "gedit-plugin.h"
-#include "gedit-debug.h"
-
-enum
-{
- ACTIVE_COLUMN,
- AVAILABLE_COLUMN,
- INFO_COLUMN,
- N_COLUMNS
-};
-
-#define PLUGIN_MANAGER_NAME_TITLE _("Plugin")
-#define PLUGIN_MANAGER_ACTIVE_TITLE _("Enabled")
-
-#define GEDIT_PLUGIN_MANAGER_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), GEDIT_TYPE_PLUGIN_MANAGER, GeditPluginManagerPrivate))
-
-struct _GeditPluginManagerPrivate
-{
- GtkWidget *tree;
-
- GtkWidget *about_button;
- GtkWidget *configure_button;
-
- GeditPluginsEngine *engine;
-
- GtkWidget *about;
-
- GtkWidget *popup_menu;
-};
-
-G_DEFINE_TYPE(GeditPluginManager, gedit_plugin_manager, GTK_TYPE_VBOX)
-
-static GeditPluginInfo *plugin_manager_get_selected_plugin (GeditPluginManager *pm);
-static void plugin_manager_toggle_active (GeditPluginManager *pm, GtkTreeIter *iter, GtkTreeModel *model);
-static void gedit_plugin_manager_finalize (GObject *object);
-
-static void
-gedit_plugin_manager_class_init (GeditPluginManagerClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->finalize = gedit_plugin_manager_finalize;
-
- g_type_class_add_private (object_class, sizeof (GeditPluginManagerPrivate));
-}
-
-static void
-about_button_cb (GtkWidget *button,
- GeditPluginManager *pm)
-{
- GeditPluginInfo *info;
-
- gedit_debug (DEBUG_PLUGINS);
-
- info = plugin_manager_get_selected_plugin (pm);
-
- g_return_if_fail (info != NULL);
-
- /* if there is another about dialog already open destroy it */
- if (pm->priv->about)
- gtk_widget_destroy (pm->priv->about);
-
- pm->priv->about = g_object_new (GTK_TYPE_ABOUT_DIALOG,
- "program-name", gedit_plugin_info_get_name (info),
- "copyright", gedit_plugin_info_get_copyright (info),
- "authors", gedit_plugin_info_get_authors (info),
- "comments", gedit_plugin_info_get_description (info),
- "website", gedit_plugin_info_get_website (info),
- "logo-icon-name", gedit_plugin_info_get_icon_name (info),
- "version", gedit_plugin_info_get_version (info),
- NULL);
-
- gtk_window_set_destroy_with_parent (GTK_WINDOW (pm->priv->about),
- TRUE);
-
- g_signal_connect (pm->priv->about,
- "response",
- G_CALLBACK (gtk_widget_destroy),
- NULL);
- g_signal_connect (pm->priv->about,
- "destroy",
- G_CALLBACK (gtk_widget_destroyed),
- &pm->priv->about);
-
- gtk_window_set_transient_for (GTK_WINDOW (pm->priv->about),
- GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET(pm))));
- gtk_widget_show (pm->priv->about);
-}
-
-static void
-configure_button_cb (GtkWidget *button,
- GeditPluginManager *pm)
-{
- GeditPluginInfo *info;
- GtkWindow *toplevel;
-
- gedit_debug (DEBUG_PLUGINS);
-
- info = plugin_manager_get_selected_plugin (pm);
-
- g_return_if_fail (info != NULL);
-
- gedit_debug_message (DEBUG_PLUGINS, "Configuring: %s\n",
- gedit_plugin_info_get_name (info));
-
- toplevel = GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET(pm)));
-
- gedit_plugins_engine_configure_plugin (pm->priv->engine,
- info, toplevel);
-
- gedit_debug_message (DEBUG_PLUGINS, "Done");
-}
-
-static void
-plugin_manager_view_info_cell_cb (GtkTreeViewColumn *tree_column,
- GtkCellRenderer *cell,
- GtkTreeModel *tree_model,
- GtkTreeIter *iter,
- gpointer data)
-{
- GeditPluginInfo *info;
- gchar *text;
-
- g_return_if_fail (tree_model != NULL);
- g_return_if_fail (tree_column != NULL);
-
- gtk_tree_model_get (tree_model, iter, INFO_COLUMN, &info, -1);
-
- if (info == NULL)
- return;
-
- text = g_markup_printf_escaped ("<b>%s</b>\n%s",
- gedit_plugin_info_get_name (info),
- gedit_plugin_info_get_description (info));
- g_object_set (G_OBJECT (cell),
- "markup", text,
- "sensitive", gedit_plugin_info_is_available (info),
- NULL);
-
- g_free (text);
-}
-
-static void
-plugin_manager_view_icon_cell_cb (GtkTreeViewColumn *tree_column,
- GtkCellRenderer *cell,
- GtkTreeModel *tree_model,
- GtkTreeIter *iter,
- gpointer data)
-{
- GeditPluginInfo *info;
-
- g_return_if_fail (tree_model != NULL);
- g_return_if_fail (tree_column != NULL);
-
- gtk_tree_model_get (tree_model, iter, INFO_COLUMN, &info, -1);
-
- if (info == NULL)
- return;
-
- g_object_set (G_OBJECT (cell),
- "icon-name", gedit_plugin_info_get_icon_name (info),
- "sensitive", gedit_plugin_info_is_available (info),
- NULL);
-}
-
-
-static void
-active_toggled_cb (GtkCellRendererToggle *cell,
- gchar *path_str,
- GeditPluginManager *pm)
-{
- GtkTreeIter iter;
- GtkTreePath *path;
- GtkTreeModel *model;
-
- gedit_debug (DEBUG_PLUGINS);
-
- path = gtk_tree_path_new_from_string (path_str);
-
- model = gtk_tree_view_get_model (GTK_TREE_VIEW (pm->priv->tree));
- g_return_if_fail (model != NULL);
-
- gtk_tree_model_get_iter (model, &iter, path);
-
- if (&iter != NULL)
- plugin_manager_toggle_active (pm, &iter, model);
-
- gtk_tree_path_free (path);
-}
-
-static void
-cursor_changed_cb (GtkTreeView *view,
- gpointer data)
-{
- GeditPluginManager *pm = data;
- GeditPluginInfo *info;
-
- gedit_debug (DEBUG_PLUGINS);
-
- info = plugin_manager_get_selected_plugin (pm);
-
- gtk_widget_set_sensitive (GTK_WIDGET (pm->priv->about_button),
- info != NULL);
- gtk_widget_set_sensitive (GTK_WIDGET (pm->priv->configure_button),
- (info != NULL) &&
- gedit_plugin_info_is_configurable (info));
-}
-
-static void
-row_activated_cb (GtkTreeView *tree_view,
- GtkTreePath *path,
- GtkTreeViewColumn *column,
- gpointer data)
-{
- GeditPluginManager *pm = data;
- GtkTreeIter iter;
- GtkTreeModel *model;
-
- gedit_debug (DEBUG_PLUGINS);
-
- model = gtk_tree_view_get_model (GTK_TREE_VIEW (pm->priv->tree));
-
- g_return_if_fail (model != NULL);
-
- gtk_tree_model_get_iter (model, &iter, path);
-
- g_return_if_fail (&iter != NULL);
-
- plugin_manager_toggle_active (pm, &iter, model);
-}
-
-static void
-plugin_manager_populate_lists (GeditPluginManager *pm)
-{
- const GList *plugins;
- GtkListStore *model;
- GtkTreeIter iter;
-
- gedit_debug (DEBUG_PLUGINS);
-
- plugins = gedit_plugins_engine_get_plugin_list (pm->priv->engine);
-
- model = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (pm->priv->tree)));
-
- while (plugins)
- {
- GeditPluginInfo *info;
- info = (GeditPluginInfo *)plugins->data;
-
- gtk_list_store_append (model, &iter);
- gtk_list_store_set (model, &iter,
- ACTIVE_COLUMN, gedit_plugin_info_is_active (info),
- AVAILABLE_COLUMN, gedit_plugin_info_is_available (info),
- INFO_COLUMN, info,
- -1);
-
- plugins = plugins->next;
- }
-
- if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (model), &iter))
- {
- GtkTreeSelection *selection;
- GeditPluginInfo* info;
-
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (pm->priv->tree));
- g_return_if_fail (selection != NULL);
-
- gtk_tree_selection_select_iter (selection, &iter);
-
- gtk_tree_model_get (GTK_TREE_MODEL (model), &iter,
- INFO_COLUMN, &info, -1);
-
- gtk_widget_set_sensitive (GTK_WIDGET (pm->priv->configure_button),
- gedit_plugin_info_is_configurable (info));
- }
-}
-
-static gboolean
-plugin_manager_set_active (GeditPluginManager *pm,
- GtkTreeIter *iter,
- GtkTreeModel *model,
- gboolean active)
-{
- GeditPluginInfo *info;
- gboolean res = TRUE;
-
- gedit_debug (DEBUG_PLUGINS);
-
- gtk_tree_model_get (model, iter, INFO_COLUMN, &info, -1);
-
- g_return_val_if_fail (info != NULL, FALSE);
-
- if (active)
- {
- /* activate the plugin */
- if (!gedit_plugins_engine_activate_plugin (pm->priv->engine, info)) {
- gedit_debug_message (DEBUG_PLUGINS, "Could not activate %s.\n",
- gedit_plugin_info_get_name (info));
-
- res = FALSE;
- }
- }
- else
- {
- /* deactivate the plugin */
- if (!gedit_plugins_engine_deactivate_plugin (pm->priv->engine, info)) {
- gedit_debug_message (DEBUG_PLUGINS, "Could not deactivate %s.\n",
- gedit_plugin_info_get_name (info));
-
- res = FALSE;
- }
- }
-
- return res;
-}
-
-static void
-plugin_manager_toggle_active (GeditPluginManager *pm,
- GtkTreeIter *iter,
- GtkTreeModel *model)
-{
- gboolean active;
-
- gedit_debug (DEBUG_PLUGINS);
-
- gtk_tree_model_get (model, iter, ACTIVE_COLUMN, &active, -1);
-
- active ^= 1;
-
- plugin_manager_set_active (pm, iter, model, active);
-}
-
-static GeditPluginInfo *
-plugin_manager_get_selected_plugin (GeditPluginManager *pm)
-{
- GeditPluginInfo *info = NULL;
- GtkTreeModel *model;
- GtkTreeIter iter;
- GtkTreeSelection *selection;
-
- gedit_debug (DEBUG_PLUGINS);
-
- model = gtk_tree_view_get_model (GTK_TREE_VIEW (pm->priv->tree));
- g_return_val_if_fail (model != NULL, NULL);
-
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (pm->priv->tree));
- g_return_val_if_fail (selection != NULL, NULL);
-
- if (gtk_tree_selection_get_selected (selection, NULL, &iter))
- {
- gtk_tree_model_get (model, &iter, INFO_COLUMN, &info, -1);
- }
-
- return info;
-}
-
-static void
-plugin_manager_set_active_all (GeditPluginManager *pm,
- gboolean active)
-{
- GtkTreeModel *model;
- GtkTreeIter iter;
-
- gedit_debug (DEBUG_PLUGINS);
-
- model = gtk_tree_view_get_model (GTK_TREE_VIEW (pm->priv->tree));
-
- g_return_if_fail (model != NULL);
-
- gtk_tree_model_get_iter_first (model, &iter);
-
- do {
- plugin_manager_set_active (pm, &iter, model, active);
- }
- while (gtk_tree_model_iter_next (model, &iter));
-}
-
-/* Callback used as the interactive search comparison function */
-static gboolean
-name_search_cb (GtkTreeModel *model,
- gint column,
- const gchar *key,
- GtkTreeIter *iter,
- gpointer data)
-{
- GeditPluginInfo *info;
- gchar *normalized_string;
- gchar *normalized_key;
- gchar *case_normalized_string;
- gchar *case_normalized_key;
- gint key_len;
- gboolean retval;
-
- gtk_tree_model_get (model, iter, INFO_COLUMN, &info, -1);
- if (!info)
- return FALSE;
-
- normalized_string = g_utf8_normalize (gedit_plugin_info_get_name (info), -1, G_NORMALIZE_ALL);
- normalized_key = g_utf8_normalize (key, -1, G_NORMALIZE_ALL);
- case_normalized_string = g_utf8_casefold (normalized_string, -1);
- case_normalized_key = g_utf8_casefold (normalized_key, -1);
-
- key_len = strlen (case_normalized_key);
-
- /* Oddly enough, this callback must return whether to stop the search
- * because we found a match, not whether we actually matched.
- */
- retval = (strncmp (case_normalized_key, case_normalized_string, key_len) != 0);
-
- g_free (normalized_key);
- g_free (normalized_string);
- g_free (case_normalized_key);
- g_free (case_normalized_string);
-
- return retval;
-}
-
-static void
-enable_plugin_menu_cb (GtkMenu *menu,
- GeditPluginManager *pm)
-{
- GtkTreeModel *model;
- GtkTreeIter iter;
- GtkTreeSelection *selection;
-
- model = gtk_tree_view_get_model (GTK_TREE_VIEW (pm->priv->tree));
- g_return_if_fail (model != NULL);
-
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (pm->priv->tree));
- g_return_if_fail (selection != NULL);
-
- if (gtk_tree_selection_get_selected (selection, NULL, &iter))
- plugin_manager_toggle_active (pm, &iter, model);
-}
-
-static void
-enable_all_menu_cb (GtkMenu *menu,
- GeditPluginManager *pm)
-{
- plugin_manager_set_active_all (pm, TRUE);
-}
-
-static void
-disable_all_menu_cb (GtkMenu *menu,
- GeditPluginManager *pm)
-{
- plugin_manager_set_active_all (pm, FALSE);
-}
-
-static GtkWidget *
-create_tree_popup_menu (GeditPluginManager *pm)
-{
- GtkWidget *menu;
- GtkWidget *item;
- GtkWidget *image;
- GeditPluginInfo *info;
-
- info = plugin_manager_get_selected_plugin (pm);
-
- menu = gtk_menu_new ();
-
- item = gtk_image_menu_item_new_with_mnemonic (_("_About"));
- image = gtk_image_new_from_stock (GTK_STOCK_ABOUT,
- GTK_ICON_SIZE_MENU);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image);
- g_signal_connect (item, "activate",
- G_CALLBACK (about_button_cb), pm);
- gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
-
- item = gtk_image_menu_item_new_with_mnemonic (_("C_onfigure"));
- image = gtk_image_new_from_stock (GTK_STOCK_PREFERENCES,
- GTK_ICON_SIZE_MENU);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image);
- g_signal_connect (item, "activate",
- G_CALLBACK (configure_button_cb), pm);
- gtk_widget_set_sensitive (item, gedit_plugin_info_is_configurable (info));
- gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
-
- item = gtk_check_menu_item_new_with_mnemonic (_("A_ctivate"));
- gtk_widget_set_sensitive (item, gedit_plugin_info_is_available (info));
- gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (item),
- gedit_plugin_info_is_active (info));
- g_signal_connect (item, "toggled",
- G_CALLBACK (enable_plugin_menu_cb), pm);
- gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
-
- item = gtk_separator_menu_item_new ();
- gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
-
- item = gtk_menu_item_new_with_mnemonic (_("Ac_tivate All"));
- g_signal_connect (item, "activate",
- G_CALLBACK (enable_all_menu_cb), pm);
- gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
-
- item = gtk_menu_item_new_with_mnemonic (_("_Deactivate All"));
- g_signal_connect (item, "activate",
- G_CALLBACK (disable_all_menu_cb), pm);
- gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
-
- gtk_widget_show_all (menu);
-
- return menu;
-}
-
-static void
-tree_popup_menu_detach (GeditPluginManager *pm,
- GtkMenu *menu)
-{
- pm->priv->popup_menu = NULL;
-}
-
-static void
-show_tree_popup_menu (GtkTreeView *tree,
- GeditPluginManager *pm,
- GdkEventButton *event)
-{
- if (pm->priv->popup_menu)
- gtk_widget_destroy (pm->priv->popup_menu);
-
- pm->priv->popup_menu = create_tree_popup_menu (pm);
-
- gtk_menu_attach_to_widget (GTK_MENU (pm->priv->popup_menu),
- GTK_WIDGET (pm),
- (GtkMenuDetachFunc) tree_popup_menu_detach);
-
- if (event != NULL)
- {
- gtk_menu_popup (GTK_MENU (pm->priv->popup_menu), NULL, NULL,
- NULL, NULL,
- event->button, event->time);
- }
- else
- {
- gtk_menu_popup (GTK_MENU (pm->priv->popup_menu), NULL, NULL,
- gedit_utils_menu_position_under_tree_view, tree,
- 0, gtk_get_current_event_time ());
-
- gtk_menu_shell_select_first (GTK_MENU_SHELL (pm->priv->popup_menu),
- FALSE);
- }
-}
-
-static gboolean
-button_press_event_cb (GtkWidget *tree,
- GdkEventButton *event,
- GeditPluginManager *pm)
-{
- /* We want the treeview selection to be updated before showing the menu.
- * This code is evil, thanks to Federico Mena Quintero's black magic.
- * See: http://mail.mate.org/archives/gtk-devel-list/2006-February/msg00168.html
- * FIXME: Let's remove it asap.
- */
-
- static gboolean in_press = FALSE;
- gboolean handled;
-
- if (in_press)
- return FALSE; /* we re-entered */
-
- if (GDK_BUTTON_PRESS != event->type || 3 != event->button)
- return FALSE; /* let the normal handler run */
-
- in_press = TRUE;
- handled = gtk_widget_event (tree, (GdkEvent *) event);
- in_press = FALSE;
-
- if (!handled)
- return FALSE;
-
- /* The selection is fully updated by now */
- show_tree_popup_menu (GTK_TREE_VIEW (tree), pm, event);
- return TRUE;
-}
-
-static gboolean
-popup_menu_cb (GtkTreeView *tree,
- GeditPluginManager *pm)
-{
- show_tree_popup_menu (tree, pm, NULL);
- return TRUE;
-}
-
-static gint
-model_name_sort_func (GtkTreeModel *model,
- GtkTreeIter *iter1,
- GtkTreeIter *iter2,
- gpointer user_data)
-{
- GeditPluginInfo *info1, *info2;
-
- gtk_tree_model_get (model, iter1, INFO_COLUMN, &info1, -1);
- gtk_tree_model_get (model, iter2, INFO_COLUMN, &info2, -1);
-
- return g_utf8_collate (gedit_plugin_info_get_name (info1),
- gedit_plugin_info_get_name (info2));
-}
-
-static void
-plugin_manager_construct_tree (GeditPluginManager *pm)
-{
- GtkTreeViewColumn *column;
- GtkCellRenderer *cell;
- GtkListStore *model;
-
- gedit_debug (DEBUG_PLUGINS);
-
- model = gtk_list_store_new (N_COLUMNS,
- G_TYPE_BOOLEAN,
- G_TYPE_BOOLEAN,
- G_TYPE_POINTER);
-
- gtk_tree_view_set_model (GTK_TREE_VIEW (pm->priv->tree),
- GTK_TREE_MODEL (model));
- g_object_unref (model);
-
- gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (pm->priv->tree), TRUE);
- gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (pm->priv->tree), FALSE);
-
- /* first column */
- cell = gtk_cell_renderer_toggle_new ();
- g_object_set (cell, "xpad", 6, NULL);
- g_signal_connect (cell,
- "toggled",
- G_CALLBACK (active_toggled_cb),
- pm);
- column = gtk_tree_view_column_new_with_attributes (PLUGIN_MANAGER_ACTIVE_TITLE,
- cell,
- "active",
- ACTIVE_COLUMN,
- "activatable",
- AVAILABLE_COLUMN,
- "sensitive",
- AVAILABLE_COLUMN,
- NULL);
- gtk_tree_view_append_column (GTK_TREE_VIEW (pm->priv->tree), column);
-
- /* second column */
- column = gtk_tree_view_column_new ();
- gtk_tree_view_column_set_title (column, PLUGIN_MANAGER_NAME_TITLE);
- gtk_tree_view_column_set_resizable (column, TRUE);
-
- cell = gtk_cell_renderer_pixbuf_new ();
- gtk_tree_view_column_pack_start (column, cell, FALSE);
- g_object_set (cell, "stock-size", GTK_ICON_SIZE_SMALL_TOOLBAR, NULL);
- gtk_tree_view_column_set_cell_data_func (column, cell,
- plugin_manager_view_icon_cell_cb,
- pm, NULL);
-
- cell = gtk_cell_renderer_text_new ();
- gtk_tree_view_column_pack_start (column, cell, TRUE);
- g_object_set (cell, "ellipsize", PANGO_ELLIPSIZE_END, NULL);
- gtk_tree_view_column_set_cell_data_func (column, cell,
- plugin_manager_view_info_cell_cb,
- pm, NULL);
-
-
- gtk_tree_view_column_set_spacing (column, 6);
- gtk_tree_view_append_column (GTK_TREE_VIEW (pm->priv->tree), column);
-
- /* Sort on the plugin names */
- gtk_tree_sortable_set_default_sort_func (GTK_TREE_SORTABLE (model),
- model_name_sort_func,
- NULL,
- NULL);
- gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (model),
- GTK_TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID,
- GTK_SORT_ASCENDING);
-
- /* Enable search for our non-string column */
- gtk_tree_view_set_search_column (GTK_TREE_VIEW (pm->priv->tree),
- INFO_COLUMN);
- gtk_tree_view_set_search_equal_func (GTK_TREE_VIEW (pm->priv->tree),
- name_search_cb,
- NULL,
- NULL);
-
- g_signal_connect (pm->priv->tree,
- "cursor_changed",
- G_CALLBACK (cursor_changed_cb),
- pm);
- g_signal_connect (pm->priv->tree,
- "row_activated",
- G_CALLBACK (row_activated_cb),
- pm);
-
- g_signal_connect (pm->priv->tree,
- "button-press-event",
- G_CALLBACK (button_press_event_cb),
- pm);
- g_signal_connect (pm->priv->tree,
- "popup-menu",
- G_CALLBACK (popup_menu_cb),
- pm);
- gtk_widget_show (pm->priv->tree);
-}
-
-static void
-plugin_toggled_cb (GeditPluginsEngine *engine,
- GeditPluginInfo *info,
- GeditPluginManager *pm)
-{
- GtkTreeSelection *selection;
- GtkTreeModel *model;
- GtkTreeIter iter;
- gboolean info_found = FALSE;
-
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (pm->priv->tree));
-
- if (gtk_tree_selection_get_selected (selection, &model, &iter))
- {
- /* There is an item selected: it's probably the one we want! */
- GeditPluginInfo *tinfo;
- gtk_tree_model_get (model, &iter, INFO_COLUMN, &tinfo, -1);
- info_found = info == tinfo;
- }
-
- if (!info_found)
- {
- gtk_tree_model_get_iter_first (model, &iter);
-
- do
- {
- GeditPluginInfo *tinfo;
- gtk_tree_model_get (model, &iter, INFO_COLUMN, &tinfo, -1);
- info_found = info == tinfo;
- }
- while (!info_found && gtk_tree_model_iter_next (model, &iter));
- }
-
- if (!info_found)
- {
- g_warning ("GeditPluginManager: plugin '%s' not found in the tree model",
- gedit_plugin_info_get_name (info));
- return;
- }
-
- gtk_list_store_set (GTK_LIST_STORE (model), &iter, ACTIVE_COLUMN, gedit_plugin_info_is_active (info), -1);
-}
-
-static void
-gedit_plugin_manager_init (GeditPluginManager *pm)
-{
- GtkWidget *label;
- GtkWidget *viewport;
- GtkWidget *hbuttonbox;
-
- gedit_debug (DEBUG_PLUGINS);
-
- pm->priv = GEDIT_PLUGIN_MANAGER_GET_PRIVATE (pm);
-
- /*
- * Always we create the manager, firstly we rescan the plugins directory
- */
- gedit_plugins_engine_rescan_plugins (gedit_plugins_engine_get_default ());
-
- gtk_box_set_spacing (GTK_BOX (pm), 6);
-
- label = gtk_label_new_with_mnemonic (_("Active _Plugins:"));
- gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
- gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
-
- gtk_box_pack_start (GTK_BOX (pm), label, FALSE, TRUE, 0);
-
- viewport = gtk_scrolled_window_new (NULL, NULL);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (viewport),
- GTK_POLICY_AUTOMATIC,
- GTK_POLICY_AUTOMATIC);
- gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (viewport),
- GTK_SHADOW_IN);
-
- gtk_box_pack_start (GTK_BOX (pm), viewport, TRUE, TRUE, 0);
-
- pm->priv->tree = gtk_tree_view_new ();
- gtk_container_add (GTK_CONTAINER (viewport), pm->priv->tree);
-
- gtk_label_set_mnemonic_widget (GTK_LABEL (label), pm->priv->tree);
-
- hbuttonbox = gtk_hbutton_box_new ();
- gtk_box_pack_start (GTK_BOX (pm), hbuttonbox, FALSE, FALSE, 0);
- gtk_button_box_set_layout (GTK_BUTTON_BOX (hbuttonbox), GTK_BUTTONBOX_END);
- gtk_box_set_spacing (GTK_BOX (hbuttonbox), 8);
-
- pm->priv->about_button = gedit_gtk_button_new_with_stock_icon (_("_About Plugin"),
- GTK_STOCK_ABOUT);
- gtk_container_add (GTK_CONTAINER (hbuttonbox), pm->priv->about_button);
-
- pm->priv->configure_button = gedit_gtk_button_new_with_stock_icon (_("C_onfigure Plugin"),
- GTK_STOCK_PREFERENCES);
- gtk_container_add (GTK_CONTAINER (hbuttonbox), pm->priv->configure_button);
-
- /* setup a window of a sane size. */
- gtk_widget_set_size_request (GTK_WIDGET (viewport), 270, 100);
-
- g_signal_connect (pm->priv->about_button,
- "clicked",
- G_CALLBACK (about_button_cb),
- pm);
- g_signal_connect (pm->priv->configure_button,
- "clicked",
- G_CALLBACK (configure_button_cb),
- pm);
-
- plugin_manager_construct_tree (pm);
-
- /* get the plugin engine and populate the treeview */
- pm->priv->engine = gedit_plugins_engine_get_default ();
-
- g_signal_connect_after (pm->priv->engine,
- "activate-plugin",
- G_CALLBACK (plugin_toggled_cb),
- pm);
- g_signal_connect_after (pm->priv->engine,
- "deactivate-plugin",
- G_CALLBACK (plugin_toggled_cb),
- pm);
-
- if (gedit_plugins_engine_get_plugin_list (pm->priv->engine) != NULL)
- {
- plugin_manager_populate_lists (pm);
- }
- else
- {
- gtk_widget_set_sensitive (pm->priv->about_button, FALSE);
- gtk_widget_set_sensitive (pm->priv->configure_button, FALSE);
- }
-}
-
-static void
-gedit_plugin_manager_finalize (GObject *object)
-{
- GeditPluginManager *pm = GEDIT_PLUGIN_MANAGER (object);
-
- g_signal_handlers_disconnect_by_func (pm->priv->engine,
- plugin_toggled_cb,
- pm);
-
- if (pm->priv->popup_menu)
- gtk_widget_destroy (pm->priv->popup_menu);
-
- G_OBJECT_CLASS (gedit_plugin_manager_parent_class)->finalize (object);
-
-}
-
-GtkWidget *gedit_plugin_manager_new (void)
-{
- return g_object_new (GEDIT_TYPE_PLUGIN_MANAGER,0);
-}
diff --git a/gedit/gedit-plugin-manager.h b/gedit/gedit-plugin-manager.h
deleted file mode 100755
index 53392ba5..00000000
--- a/gedit/gedit-plugin-manager.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * gedit-plugin-manager.h
- * This file is part of gedit
- *
- * Copyright (C) 2002-2005 Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2002-2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifndef __GEDIT_PLUGIN_MANAGER_H__
-#define __GEDIT_PLUGIN_MANAGER_H__
-
-#include <gtk/gtk.h>
-
-G_BEGIN_DECLS
-
-/*
- * Type checking and casting macros
- */
-#define GEDIT_TYPE_PLUGIN_MANAGER (gedit_plugin_manager_get_type())
-#define GEDIT_PLUGIN_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GEDIT_TYPE_PLUGIN_MANAGER, GeditPluginManager))
-#define GEDIT_PLUGIN_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GEDIT_TYPE_PLUGIN_MANAGER, GeditPluginManagerClass))
-#define GEDIT_IS_PLUGIN_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GEDIT_TYPE_PLUGIN_MANAGER))
-#define GEDIT_IS_PLUGIN_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEDIT_TYPE_PLUGIN_MANAGER))
-#define GEDIT_PLUGIN_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GEDIT_TYPE_PLUGIN_MANAGER, GeditPluginManagerClass))
-
-/* Private structure type */
-typedef struct _GeditPluginManagerPrivate GeditPluginManagerPrivate;
-
-/*
- * Main object structure
- */
-typedef struct _GeditPluginManager GeditPluginManager;
-
-struct _GeditPluginManager
-{
- GtkVBox vbox;
-
- /*< private > */
- GeditPluginManagerPrivate *priv;
-};
-
-/*
- * Class definition
- */
-typedef struct _GeditPluginManagerClass GeditPluginManagerClass;
-
-struct _GeditPluginManagerClass
-{
- GtkVBoxClass parent_class;
-};
-
-/*
- * Public methods
- */
-GType gedit_plugin_manager_get_type (void) G_GNUC_CONST;
-
-GtkWidget *gedit_plugin_manager_new (void);
-
-G_END_DECLS
-
-#endif /* __GEDIT_PLUGIN_MANAGER_H__ */
diff --git a/gedit/gedit-plugin.c b/gedit/gedit-plugin.c
deleted file mode 100755
index 2b00e3fd..00000000
--- a/gedit/gedit-plugin.c
+++ /dev/null
@@ -1,334 +0,0 @@
-/*
- * gedit-plugin.h
- * This file is part of gedit
- *
- * Copyright (C) 2002-2005 Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2002-2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "gedit-plugin.h"
-#include "gedit-dirs.h"
-
-/* properties */
-enum {
- PROP_0,
- PROP_INSTALL_DIR,
- PROP_DATA_DIR_NAME,
- PROP_DATA_DIR
-};
-
-typedef struct _GeditPluginPrivate GeditPluginPrivate;
-
-struct _GeditPluginPrivate
-{
- gchar *install_dir;
- gchar *data_dir_name;
-};
-
-#define GEDIT_PLUGIN_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), GEDIT_TYPE_PLUGIN, GeditPluginPrivate))
-
-G_DEFINE_TYPE(GeditPlugin, gedit_plugin, G_TYPE_OBJECT)
-
-static void
-dummy (GeditPlugin *plugin, GeditWindow *window)
-{
- /* Empty */
-}
-
-static GtkWidget *
-create_configure_dialog (GeditPlugin *plugin)
-{
- return NULL;
-}
-
-static gboolean
-is_configurable (GeditPlugin *plugin)
-{
- return (GEDIT_PLUGIN_GET_CLASS (plugin)->create_configure_dialog !=
- create_configure_dialog);
-}
-
-static void
-gedit_plugin_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- switch (prop_id)
- {
- case PROP_INSTALL_DIR:
- g_value_take_string (value, gedit_plugin_get_install_dir (GEDIT_PLUGIN (object)));
- break;
- case PROP_DATA_DIR:
- g_value_take_string (value, gedit_plugin_get_data_dir (GEDIT_PLUGIN (object)));
- break;
- default:
- g_return_if_reached ();
- }
-}
-
-static void
-gedit_plugin_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- GeditPluginPrivate *priv = GEDIT_PLUGIN_GET_PRIVATE (object);
-
- switch (prop_id)
- {
- case PROP_INSTALL_DIR:
- priv->install_dir = g_value_dup_string (value);
- break;
- case PROP_DATA_DIR_NAME:
- priv->data_dir_name = g_value_dup_string (value);
- break;
- default:
- g_return_if_reached ();
- }
-}
-
-static void
-gedit_plugin_finalize (GObject *object)
-{
- GeditPluginPrivate *priv = GEDIT_PLUGIN_GET_PRIVATE (object);
-
- g_free (priv->install_dir);
- g_free (priv->data_dir_name);
-
- G_OBJECT_CLASS (gedit_plugin_parent_class)->finalize (object);
-}
-
-static void
-gedit_plugin_class_init (GeditPluginClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- klass->activate = dummy;
- klass->deactivate = dummy;
- klass->update_ui = dummy;
-
- klass->create_configure_dialog = create_configure_dialog;
- klass->is_configurable = is_configurable;
-
- object_class->get_property = gedit_plugin_get_property;
- object_class->set_property = gedit_plugin_set_property;
- object_class->finalize = gedit_plugin_finalize;
-
- g_object_class_install_property (object_class,
- PROP_INSTALL_DIR,
- g_param_spec_string ("install-dir",
- "Install Directory",
- "The directory where the plugin is installed",
- NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
-
- /* the basename of the data dir is set at construction time by the plugin loader
- * while the full path is constructed on the fly to take into account relocability
- * that's why we have a writeonly prop and a readonly prop */
- g_object_class_install_property (object_class,
- PROP_DATA_DIR_NAME,
- g_param_spec_string ("data-dir-name",
- "Basename of the data directory",
- "The basename of the directory where the plugin should look for its data files",
- NULL,
- G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
- g_object_class_install_property (object_class,
- PROP_DATA_DIR,
- g_param_spec_string ("data-dir",
- "Data Directory",
- "The full path of the directory where the plugin should look for its data files",
- NULL,
- G_PARAM_READABLE));
-
- g_type_class_add_private (klass, sizeof (GeditPluginPrivate));
-}
-
-static void
-gedit_plugin_init (GeditPlugin *plugin)
-{
- /* Empty */
-}
-
-/**
- * gedit_plugin_get_install_dir:
- * @plugin: a #GeditPlugin
- *
- * Get the path of the directory where the plugin is installed.
- *
- * Return value: a newly allocated string with the path of the
- * directory where the plugin is installed
- */
-gchar *
-gedit_plugin_get_install_dir (GeditPlugin *plugin)
-{
- g_return_val_if_fail (GEDIT_IS_PLUGIN (plugin), NULL);
-
- return g_strdup (GEDIT_PLUGIN_GET_PRIVATE (plugin)->install_dir);
-}
-
-/**
- * gedit_plugin_get_data_dir:
- * @plugin: a #GeditPlugin
- *
- * Get the path of the directory where the plugin should look for
- * its data files.
- *
- * Return value: a newly allocated string with the path of the
- * directory where the plugin should look for its data files
- */
-gchar *
-gedit_plugin_get_data_dir (GeditPlugin *plugin)
-{
- GeditPluginPrivate *priv;
- gchar *gedit_lib_dir;
- gchar *data_dir;
-
- g_return_val_if_fail (GEDIT_IS_PLUGIN (plugin), NULL);
-
- priv = GEDIT_PLUGIN_GET_PRIVATE (plugin);
-
- /* If it's a "user" plugin the data dir is
- * install_dir/data_dir_name if instead it's a
- * "system" plugin the data dir is under gedit_data_dir,
- * so it's under $prefix/share/gedit-2/plugins/data_dir_name
- * where data_dir_name usually it's the name of the plugin
- */
- gedit_lib_dir = gedit_dirs_get_gedit_lib_dir ();
-
- /* CHECK: is checking the prefix enough or should we be more
- * careful about normalizing paths etc? */
- if (g_str_has_prefix (priv->install_dir, gedit_lib_dir))
- {
- gchar *gedit_data_dir;
-
- gedit_data_dir = gedit_dirs_get_gedit_data_dir ();
-
- data_dir = g_build_filename (gedit_data_dir,
- "plugins",
- priv->data_dir_name,
- NULL);
-
- g_free (gedit_data_dir);
- }
- else
- {
- data_dir = g_build_filename (priv->install_dir,
- priv->data_dir_name,
- NULL);
- }
-
- g_free (gedit_lib_dir);
-
- return data_dir;
-}
-
-/**
- * gedit_plugin_activate:
- * @plugin: a #GeditPlugin
- * @window: a #GeditWindow
- *
- * Activates the plugin.
- */
-void
-gedit_plugin_activate (GeditPlugin *plugin,
- GeditWindow *window)
-{
- g_return_if_fail (GEDIT_IS_PLUGIN (plugin));
- g_return_if_fail (GEDIT_IS_WINDOW (window));
-
- GEDIT_PLUGIN_GET_CLASS (plugin)->activate (plugin, window);
-}
-
-/**
- * gedit_plugin_deactivate:
- * @plugin: a #GeditPlugin
- * @window: a #GeditWindow
- *
- * Deactivates the plugin.
- */
-void
-gedit_plugin_deactivate (GeditPlugin *plugin,
- GeditWindow *window)
-{
- g_return_if_fail (GEDIT_IS_PLUGIN (plugin));
- g_return_if_fail (GEDIT_IS_WINDOW (window));
-
- GEDIT_PLUGIN_GET_CLASS (plugin)->deactivate (plugin, window);
-}
-
-/**
- * gedit_plugin_update_ui:
- * @plugin: a #GeditPlugin
- * @window: a #GeditWindow
- *
- * Triggers an update of the user interface to take into account state changes
- * caused by the plugin.
- */
-void
-gedit_plugin_update_ui (GeditPlugin *plugin,
- GeditWindow *window)
-{
- g_return_if_fail (GEDIT_IS_PLUGIN (plugin));
- g_return_if_fail (GEDIT_IS_WINDOW (window));
-
- GEDIT_PLUGIN_GET_CLASS (plugin)->update_ui (plugin, window);
-}
-
-/**
- * gedit_plugin_is_configurable:
- * @plugin: a #GeditPlugin
- *
- * Whether the plugin is configurable.
- *
- * Returns: TRUE if the plugin is configurable:
- */
-gboolean
-gedit_plugin_is_configurable (GeditPlugin *plugin)
-{
- g_return_val_if_fail (GEDIT_IS_PLUGIN (plugin), FALSE);
-
- return GEDIT_PLUGIN_GET_CLASS (plugin)->is_configurable (plugin);
-}
-
-/**
- * gedit_plugin_create_configure_dialog:
- * @plugin: a #GeditPlugin
- *
- * Creates the configure dialog widget for the plugin.
- *
- * Returns: the configure dialog widget for the plugin.
- */
-GtkWidget *
-gedit_plugin_create_configure_dialog (GeditPlugin *plugin)
-{
- g_return_val_if_fail (GEDIT_IS_PLUGIN (plugin), NULL);
-
- return GEDIT_PLUGIN_GET_CLASS (plugin)->create_configure_dialog (plugin);
-}
diff --git a/gedit/gedit-plugin.h b/gedit/gedit-plugin.h
deleted file mode 100755
index 8cf41d80..00000000
--- a/gedit/gedit-plugin.h
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
- * gedit-plugin.h
- * This file is part of gedit
- *
- * Copyright (C) 2002-2005 - Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2002-2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifndef __GEDIT_PLUGIN_H__
-#define __GEDIT_PLUGIN_H__
-
-#include <glib-object.h>
-
-#include <gedit/gedit-window.h>
-#include <gedit/gedit-debug.h>
-
-/* TODO: add a .h file that includes all the .h files normally needed to
- * develop a plugin */
-
-G_BEGIN_DECLS
-
-/*
- * Type checking and casting macros
- */
-#define GEDIT_TYPE_PLUGIN (gedit_plugin_get_type())
-#define GEDIT_PLUGIN(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GEDIT_TYPE_PLUGIN, GeditPlugin))
-#define GEDIT_PLUGIN_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GEDIT_TYPE_PLUGIN, GeditPluginClass))
-#define GEDIT_IS_PLUGIN(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GEDIT_TYPE_PLUGIN))
-#define GEDIT_IS_PLUGIN_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEDIT_TYPE_PLUGIN))
-#define GEDIT_PLUGIN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GEDIT_TYPE_PLUGIN, GeditPluginClass))
-
-/*
- * Main object structure
- */
-typedef struct _GeditPlugin GeditPlugin;
-
-struct _GeditPlugin
-{
- GObject parent;
-};
-
-/*
- * Class definition
- */
-typedef struct _GeditPluginClass GeditPluginClass;
-
-struct _GeditPluginClass
-{
- GObjectClass parent_class;
-
- /* Virtual public methods */
-
- void (*activate) (GeditPlugin *plugin,
- GeditWindow *window);
- void (*deactivate) (GeditPlugin *plugin,
- GeditWindow *window);
-
- void (*update_ui) (GeditPlugin *plugin,
- GeditWindow *window);
-
- GtkWidget *(*create_configure_dialog)
- (GeditPlugin *plugin);
-
- /* Plugins should not override this, it's handled automatically by
- the GeditPluginClass */
- gboolean (*is_configurable)
- (GeditPlugin *plugin);
-
- /* Padding for future expansion */
- void (*_gedit_reserved1) (void);
- void (*_gedit_reserved2) (void);
- void (*_gedit_reserved3) (void);
- void (*_gedit_reserved4) (void);
-};
-
-/*
- * Public methods
- */
-GType gedit_plugin_get_type (void) G_GNUC_CONST;
-
-gchar *gedit_plugin_get_install_dir (GeditPlugin *plugin);
-gchar *gedit_plugin_get_data_dir (GeditPlugin *plugin);
-
-void gedit_plugin_activate (GeditPlugin *plugin,
- GeditWindow *window);
-void gedit_plugin_deactivate (GeditPlugin *plugin,
- GeditWindow *window);
-
-void gedit_plugin_update_ui (GeditPlugin *plugin,
- GeditWindow *window);
-
-gboolean gedit_plugin_is_configurable (GeditPlugin *plugin);
-GtkWidget *gedit_plugin_create_configure_dialog
- (GeditPlugin *plugin);
-
-/**
- * GEDIT_PLUGIN_REGISTER_TYPE_WITH_CODE(PluginName, plugin_name, CODE):
- *
- * Utility macro used to register plugins with additional code.
- */
-#define GEDIT_PLUGIN_REGISTER_TYPE_WITH_CODE(PluginName, plugin_name, CODE) \
- G_DEFINE_DYNAMIC_TYPE_EXTENDED (PluginName, \
- plugin_name, \
- GEDIT_TYPE_PLUGIN, \
- 0, \
- GTypeModule *module G_GNUC_UNUSED = type_module; /* back compat */ \
- CODE) \
- \
-/* This is not very nice, but G_DEFINE_DYNAMIC wants it and our old macro \
- * did not support it */ \
-static void \
-plugin_name##_class_finalize (PluginName##Class *klass) \
-{ \
-} \
- \
- \
-G_MODULE_EXPORT GType \
-register_gedit_plugin (GTypeModule *type_module) \
-{ \
- plugin_name##_register_type (type_module); \
- \
- return plugin_name##_get_type(); \
-}
-
-/**
- * GEDIT_PLUGIN_REGISTER_TYPE(PluginName, plugin_name):
- *
- * Utility macro used to register plugins.
- */
-#define GEDIT_PLUGIN_REGISTER_TYPE(PluginName, plugin_name) \
- GEDIT_PLUGIN_REGISTER_TYPE_WITH_CODE(PluginName, plugin_name, ;)
-
-/**
- * GEDIT_PLUGIN_DEFINE_TYPE_WITH_CODE(ObjectName, object_name, PARENT_TYPE, CODE):
- *
- * Utility macro used to register gobject types in plugins with additional code.
- *
- * Deprecated: use G_DEFINE_DYNAMIC_TYPE_EXTENDED instead
- */
-#define GEDIT_PLUGIN_DEFINE_TYPE_WITH_CODE(ObjectName, object_name, PARENT_TYPE, CODE) \
- \
-static GType g_define_type_id = 0; \
- \
-GType \
-object_name##_get_type (void) \
-{ \
- return g_define_type_id; \
-} \
- \
-static void object_name##_init (ObjectName *self); \
-static void object_name##_class_init (ObjectName##Class *klass); \
-static gpointer object_name##_parent_class = NULL; \
-static void object_name##_class_intern_init (gpointer klass) \
-{ \
- object_name##_parent_class = g_type_class_peek_parent (klass); \
- object_name##_class_init ((ObjectName##Class *) klass); \
-} \
- \
-GType \
-object_name##_register_type (GTypeModule *type_module) \
-{ \
- GTypeModule *module G_GNUC_UNUSED = type_module; /* back compat */ \
- static const GTypeInfo our_info = \
- { \
- sizeof (ObjectName##Class), \
- NULL, /* base_init */ \
- NULL, /* base_finalize */ \
- (GClassInitFunc) object_name##_class_intern_init, \
- NULL, \
- NULL, /* class_data */ \
- sizeof (ObjectName), \
- 0, /* n_preallocs */ \
- (GInstanceInitFunc) object_name##_init \
- }; \
- \
- g_define_type_id = g_type_module_register_type (type_module, \
- PARENT_TYPE, \
- #ObjectName, \
- &our_info, \
- 0); \
- \
- CODE \
- \
- return g_define_type_id; \
-}
-
-
-/**
- * GEDIT_PLUGIN_DEFINE_TYPE(ObjectName, object_name, PARENT_TYPE):
- *
- * Utility macro used to register gobject types in plugins.
- *
- * Deprecated: use G_DEFINE_DYNAMIC instead
- */
-#define GEDIT_PLUGIN_DEFINE_TYPE(ObjectName, object_name, PARENT_TYPE) \
- GEDIT_PLUGIN_DEFINE_TYPE_WITH_CODE(ObjectName, object_name, PARENT_TYPE, ;)
-
-/**
- * GEDIT_PLUGIN_IMPLEMENT_INTERFACE(TYPE_IFACE, iface_init):
- *
- * Utility macro used to register interfaces for gobject types in plugins.
- */
-#define GEDIT_PLUGIN_IMPLEMENT_INTERFACE(object_name, TYPE_IFACE, iface_init) \
- const GInterfaceInfo object_name##_interface_info = \
- { \
- (GInterfaceInitFunc) iface_init, \
- NULL, \
- NULL \
- }; \
- \
- g_type_module_add_interface (type_module, \
- g_define_type_id, \
- TYPE_IFACE, \
- &object_name##_interface_info);
-
-G_END_DECLS
-
-#endif /* __GEDIT_PLUGIN_H__ */
diff --git a/gedit/gedit-plugins-engine.c b/gedit/gedit-plugins-engine.c
deleted file mode 100755
index 1a34692b..00000000
--- a/gedit/gedit-plugins-engine.c
+++ /dev/null
@@ -1,861 +0,0 @@
-/*
- * gedit-plugins-engine.c
- * This file is part of gedit
- *
- * Copyright (C) 2002-2005 Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2002-2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <string.h>
-
-#include <glib/gi18n.h>
-
-#include "gedit-plugins-engine.h"
-#include "gedit-plugin-info-priv.h"
-#include "gedit-plugin.h"
-#include "gedit-debug.h"
-#include "gedit-app.h"
-#include "gedit-prefs-manager.h"
-#include "gedit-plugin-loader.h"
-#include "gedit-object-module.h"
-#include "gedit-dirs.h"
-
-#define GEDIT_PLUGINS_ENGINE_BASE_KEY "/apps/gedit-2/plugins"
-#define GEDIT_PLUGINS_ENGINE_KEY GEDIT_PLUGINS_ENGINE_BASE_KEY "/active-plugins"
-
-#define PLUGIN_EXT ".gedit-plugin"
-#define LOADER_EXT G_MODULE_SUFFIX
-
-typedef struct
-{
- GeditPluginLoader *loader;
- GeditObjectModule *module;
-} LoaderInfo;
-
-/* Signals */
-enum
-{
- ACTIVATE_PLUGIN,
- DEACTIVATE_PLUGIN,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL];
-
-G_DEFINE_TYPE(GeditPluginsEngine, gedit_plugins_engine, G_TYPE_OBJECT)
-
-struct _GeditPluginsEnginePrivate
-{
- GList *plugin_list;
- GHashTable *loaders;
-
- gboolean activate_from_prefs;
-};
-
-GeditPluginsEngine *default_engine = NULL;
-
-static void gedit_plugins_engine_activate_plugin_real (GeditPluginsEngine *engine,
- GeditPluginInfo *info);
-static void gedit_plugins_engine_deactivate_plugin_real (GeditPluginsEngine *engine,
- GeditPluginInfo *info);
-
-typedef gboolean (*LoadDirCallback)(GeditPluginsEngine *engine, const gchar *filename, gpointer userdata);
-
-static gboolean
-load_dir_real (GeditPluginsEngine *engine,
- const gchar *dir,
- const gchar *suffix,
- LoadDirCallback callback,
- gpointer userdata)
-{
- GError *error = NULL;
- GDir *d;
- const gchar *dirent;
- gboolean ret = TRUE;
-
- g_return_val_if_fail (dir != NULL, TRUE);
-
- gedit_debug_message (DEBUG_PLUGINS, "DIR: %s", dir);
-
- d = g_dir_open (dir, 0, &error);
- if (!d)
- {
- g_warning ("%s", error->message);
- g_error_free (error);
- return TRUE;
- }
-
- while ((dirent = g_dir_read_name (d)))
- {
- gchar *filename;
-
- if (!g_str_has_suffix (dirent, suffix))
- continue;
-
- filename = g_build_filename (dir, dirent, NULL);
-
- ret = callback (engine, filename, userdata);
-
- g_free (filename);
-
- if (!ret)
- break;
- }
-
- g_dir_close (d);
- return ret;
-}
-
-static gboolean
-load_plugin_info (GeditPluginsEngine *engine,
- const gchar *filename,
- gpointer userdata)
-{
- GeditPluginInfo *info;
-
- info = _gedit_plugin_info_new (filename);
-
- if (info == NULL)
- return TRUE;
-
- /* If a plugin with this name has already been loaded
- * drop this one (user plugins override system plugins) */
- if (gedit_plugins_engine_get_plugin_info (engine, gedit_plugin_info_get_module_name (info)) != NULL)
- {
- gedit_debug_message (DEBUG_PLUGINS, "Two or more plugins named '%s'. "
- "Only the first will be considered.\n",
- gedit_plugin_info_get_module_name (info));
-
- _gedit_plugin_info_unref (info);
-
- return TRUE;
- }
-
- engine->priv->plugin_list = g_list_prepend (engine->priv->plugin_list, info);
-
- gedit_debug_message (DEBUG_PLUGINS, "Plugin %s loaded", info->name);
- return TRUE;
-}
-
-static void
-load_all_plugins (GeditPluginsEngine *engine)
-{
- gchar *plugin_dir;
- const gchar *pdirs_env = NULL;
-
- /* load user plugins */
- plugin_dir = gedit_dirs_get_user_plugins_dir ();
- if (g_file_test (plugin_dir, G_FILE_TEST_IS_DIR))
- {
- load_dir_real (engine,
- plugin_dir,
- PLUGIN_EXT,
- load_plugin_info,
- NULL);
-
- }
- g_free (plugin_dir);
-
- /* load system plugins */
- pdirs_env = g_getenv ("GEDIT_PLUGINS_PATH");
-
- gedit_debug_message (DEBUG_PLUGINS, "GEDIT_PLUGINS_PATH=%s", pdirs_env);
-
- if (pdirs_env != NULL)
- {
- gchar **pdirs;
- gint i;
-
- pdirs = g_strsplit (pdirs_env, G_SEARCHPATH_SEPARATOR_S, 0);
-
- for (i = 0; pdirs[i] != NULL; i++)
- {
- if (!load_dir_real (engine,
- pdirs[i],
- PLUGIN_EXT,
- load_plugin_info,
- NULL))
- {
- break;
- }
- }
-
- g_strfreev (pdirs);
- }
- else
- {
- plugin_dir = gedit_dirs_get_gedit_plugins_dir ();
-
- load_dir_real (engine,
- plugin_dir,
- PLUGIN_EXT,
- load_plugin_info,
- NULL);
-
- g_free (plugin_dir);
- }
-}
-
-static guint
-hash_lowercase (gconstpointer data)
-{
- gchar *lowercase;
- guint ret;
-
- lowercase = g_ascii_strdown ((const gchar *)data, -1);
- ret = g_str_hash (lowercase);
- g_free (lowercase);
-
- return ret;
-}
-
-static gboolean
-equal_lowercase (gconstpointer a, gconstpointer b)
-{
- return g_ascii_strcasecmp ((const gchar *)a, (const gchar *)b) == 0;
-}
-
-static void
-loader_destroy (LoaderInfo *info)
-{
- if (!info)
- return;
-
- if (info->loader)
- g_object_unref (info->loader);
-
- g_free (info);
-}
-
-static void
-add_loader (GeditPluginsEngine *engine,
- const gchar *loader_id,
- GeditObjectModule *module)
-{
- LoaderInfo *info;
-
- info = g_new (LoaderInfo, 1);
- info->loader = NULL;
- info->module = module;
-
- g_hash_table_insert (engine->priv->loaders, g_strdup (loader_id), info);
-}
-
-static void
-gedit_plugins_engine_init (GeditPluginsEngine *engine)
-{
- gedit_debug (DEBUG_PLUGINS);
-
- if (!g_module_supported ())
- {
- g_warning ("gedit is not able to initialize the plugins engine.");
- return;
- }
-
- engine->priv = G_TYPE_INSTANCE_GET_PRIVATE (engine,
- GEDIT_TYPE_PLUGINS_ENGINE,
- GeditPluginsEnginePrivate);
-
- load_all_plugins (engine);
-
- /* make sure that the first reactivation will read active plugins
- from the prefs */
- engine->priv->activate_from_prefs = TRUE;
-
- /* mapping from loadername -> loader object */
- engine->priv->loaders = g_hash_table_new_full (hash_lowercase,
- equal_lowercase,
- (GDestroyNotify)g_free,
- (GDestroyNotify)loader_destroy);
-}
-
-static void
-loader_garbage_collect (const char *id, LoaderInfo *info)
-{
- if (info->loader)
- gedit_plugin_loader_garbage_collect (info->loader);
-}
-
-void
-gedit_plugins_engine_garbage_collect (GeditPluginsEngine *engine)
-{
- g_hash_table_foreach (engine->priv->loaders,
- (GHFunc) loader_garbage_collect,
- NULL);
-}
-
-static void
-gedit_plugins_engine_finalize (GObject *object)
-{
- GeditPluginsEngine *engine = GEDIT_PLUGINS_ENGINE (object);
- GList *item;
-
- gedit_debug (DEBUG_PLUGINS);
-
- /* Firs deactivate all plugins */
- for (item = engine->priv->plugin_list; item; item = item->next)
- {
- GeditPluginInfo *info = GEDIT_PLUGIN_INFO (item->data);
-
- if (gedit_plugin_info_is_active (info))
- gedit_plugins_engine_deactivate_plugin_real (engine, info);
- }
-
- /* unref the loaders */
- g_hash_table_destroy (engine->priv->loaders);
-
- /* and finally free the infos */
- for (item = engine->priv->plugin_list; item; item = item->next)
- {
- GeditPluginInfo *info = GEDIT_PLUGIN_INFO (item->data);
-
- _gedit_plugin_info_unref (info);
- }
-
- g_list_free (engine->priv->plugin_list);
-
- G_OBJECT_CLASS (gedit_plugins_engine_parent_class)->finalize (object);
-}
-
-static void
-gedit_plugins_engine_class_init (GeditPluginsEngineClass *klass)
-{
- GType the_type = G_TYPE_FROM_CLASS (klass);
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->finalize = gedit_plugins_engine_finalize;
- klass->activate_plugin = gedit_plugins_engine_activate_plugin_real;
- klass->deactivate_plugin = gedit_plugins_engine_deactivate_plugin_real;
-
- signals[ACTIVATE_PLUGIN] =
- g_signal_new ("activate-plugin",
- the_type,
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GeditPluginsEngineClass, activate_plugin),
- NULL, NULL,
- g_cclosure_marshal_VOID__BOXED,
- G_TYPE_NONE,
- 1,
- GEDIT_TYPE_PLUGIN_INFO | G_SIGNAL_TYPE_STATIC_SCOPE);
-
- signals[DEACTIVATE_PLUGIN] =
- g_signal_new ("deactivate-plugin",
- the_type,
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GeditPluginsEngineClass, deactivate_plugin),
- NULL, NULL,
- g_cclosure_marshal_VOID__BOXED,
- G_TYPE_NONE,
- 1,
- GEDIT_TYPE_PLUGIN_INFO | G_SIGNAL_TYPE_STATIC_SCOPE);
-
- g_type_class_add_private (klass, sizeof (GeditPluginsEnginePrivate));
-}
-
-static gboolean
-load_loader (GeditPluginsEngine *engine,
- const gchar *filename,
- gpointer data)
-{
- GeditObjectModule *module;
- gchar *base;
- gchar *path;
- const gchar *id;
- GType type;
-
- /* try to load in the module */
- path = g_path_get_dirname (filename);
- base = g_path_get_basename (filename);
-
- /* for now they are all resident */
- module = gedit_object_module_new (base,
- path,
- "register_gedit_plugin_loader",
- TRUE);
-
- g_free (base);
- g_free (path);
-
- /* make sure to load the type definition */
- if (!g_type_module_use (G_TYPE_MODULE (module)))
- {
- g_object_unref (module);
- g_warning ("Plugin loader module `%s' could not be loaded", filename);
-
- return TRUE;
- }
-
- /* get the exported type and check the name as exported by the
- * loader interface */
- type = gedit_object_module_get_object_type (module);
- id = gedit_plugin_loader_type_get_id (type);
-
- add_loader (engine, id, module);
- g_type_module_unuse (G_TYPE_MODULE (module));
-
- return TRUE;
-}
-
-static void
-ensure_loader (LoaderInfo *info)
-{
- if (info->loader == NULL && info->module != NULL)
- {
- /* create a new loader object */
- GeditPluginLoader *loader;
- loader = (GeditPluginLoader *)gedit_object_module_new_object (info->module, NULL);
-
- if (loader == NULL || !GEDIT_IS_PLUGIN_LOADER (loader))
- {
- g_warning ("Loader object is not a valid GeditPluginLoader instance");
-
- if (loader != NULL && G_IS_OBJECT (loader))
- g_object_unref (loader);
- }
- else
- {
- info->loader = loader;
- }
- }
-}
-
-static GeditPluginLoader *
-get_plugin_loader (GeditPluginsEngine *engine, GeditPluginInfo *info)
-{
- const gchar *loader_id;
- LoaderInfo *loader_info;
-
- loader_id = info->loader;
-
- loader_info = (LoaderInfo *)g_hash_table_lookup (
- engine->priv->loaders,
- loader_id);
-
- if (loader_info == NULL)
- {
- gchar *loader_dir;
-
- loader_dir = gedit_dirs_get_gedit_plugin_loaders_dir ();
-
- /* loader could not be found in the hash, try to find it by
- scanning */
- load_dir_real (engine,
- loader_dir,
- LOADER_EXT,
- (LoadDirCallback)load_loader,
- NULL);
- g_free (loader_dir);
-
- loader_info = (LoaderInfo *)g_hash_table_lookup (
- engine->priv->loaders,
- loader_id);
- }
-
- if (loader_info == NULL)
- {
- /* cache non-existent so we don't scan again */
- add_loader (engine, loader_id, NULL);
- return NULL;
- }
-
- ensure_loader (loader_info);
- return loader_info->loader;
-}
-
-GeditPluginsEngine *
-gedit_plugins_engine_get_default (void)
-{
- if (default_engine != NULL)
- return default_engine;
-
- default_engine = GEDIT_PLUGINS_ENGINE (g_object_new (GEDIT_TYPE_PLUGINS_ENGINE, NULL));
- g_object_add_weak_pointer (G_OBJECT (default_engine),
- (gpointer) &default_engine);
- return default_engine;
-}
-
-const GList *
-gedit_plugins_engine_get_plugin_list (GeditPluginsEngine *engine)
-{
- gedit_debug (DEBUG_PLUGINS);
-
- return engine->priv->plugin_list;
-}
-
-static gint
-compare_plugin_info_and_name (GeditPluginInfo *info,
- const gchar *module_name)
-{
- return strcmp (gedit_plugin_info_get_module_name (info), module_name);
-}
-
-GeditPluginInfo *
-gedit_plugins_engine_get_plugin_info (GeditPluginsEngine *engine,
- const gchar *name)
-{
- GList *l = g_list_find_custom (engine->priv->plugin_list,
- name,
- (GCompareFunc) compare_plugin_info_and_name);
-
- return l == NULL ? NULL : (GeditPluginInfo *) l->data;
-}
-
-static void
-save_active_plugin_list (GeditPluginsEngine *engine)
-{
- GSList *active_plugins = NULL;
- GList *l;
-
- for (l = engine->priv->plugin_list; l != NULL; l = l->next)
- {
- GeditPluginInfo *info = (GeditPluginInfo *) l->data;
-
- if (gedit_plugin_info_is_active (info))
- {
- active_plugins = g_slist_prepend (active_plugins,
- (gpointer)gedit_plugin_info_get_module_name (info));
- }
- }
-
- gedit_prefs_manager_set_active_plugins (active_plugins);
-
- g_slist_free (active_plugins);
-}
-
-static gboolean
-load_plugin (GeditPluginsEngine *engine,
- GeditPluginInfo *info)
-{
- GeditPluginLoader *loader;
- gchar *path;
-
- if (gedit_plugin_info_is_active (info))
- return TRUE;
-
- if (!gedit_plugin_info_is_available (info))
- return FALSE;
-
- loader = get_plugin_loader (engine, info);
-
- if (loader == NULL)
- {
- g_warning ("Could not find loader `%s' for plugin `%s'", info->loader, info->name);
- info->available = FALSE;
- return FALSE;
- }
-
- path = g_path_get_dirname (info->file);
- g_return_val_if_fail (path != NULL, FALSE);
-
- info->plugin = gedit_plugin_loader_load (loader, info, path);
-
- g_free (path);
-
- if (info->plugin == NULL)
- {
- g_warning ("Error loading plugin '%s'", info->name);
- info->available = FALSE;
- return FALSE;
- }
-
- return TRUE;
-}
-
-static void
-gedit_plugins_engine_activate_plugin_real (GeditPluginsEngine *engine,
- GeditPluginInfo *info)
-{
- const GList *wins;
-
- if (!load_plugin (engine, info))
- return;
-
- for (wins = gedit_app_get_windows (gedit_app_get_default ());
- wins != NULL;
- wins = wins->next)
- {
- gedit_plugin_activate (info->plugin, GEDIT_WINDOW (wins->data));
- }
-}
-
-gboolean
-gedit_plugins_engine_activate_plugin (GeditPluginsEngine *engine,
- GeditPluginInfo *info)
-{
- gedit_debug (DEBUG_PLUGINS);
-
- g_return_val_if_fail (info != NULL, FALSE);
-
- if (!gedit_plugin_info_is_available (info))
- return FALSE;
-
- if (gedit_plugin_info_is_active (info))
- return TRUE;
-
- g_signal_emit (engine, signals[ACTIVATE_PLUGIN], 0, info);
-
- if (gedit_plugin_info_is_active (info))
- save_active_plugin_list (engine);
-
- return gedit_plugin_info_is_active (info);
-}
-
-static void
-call_plugin_deactivate (GeditPlugin *plugin,
- GeditWindow *window)
-{
- gedit_plugin_deactivate (plugin, window);
-
- /* ensure update of ui manager, because we suspect it does something
- with expected static strings in the type module (when unloaded the
- strings don't exist anymore, and ui manager updates in an idle
- func) */
- gtk_ui_manager_ensure_update (gedit_window_get_ui_manager (window));
-}
-
-static void
-gedit_plugins_engine_deactivate_plugin_real (GeditPluginsEngine *engine,
- GeditPluginInfo *info)
-{
- const GList *wins;
- GeditPluginLoader *loader;
-
- if (!gedit_plugin_info_is_active (info) ||
- !gedit_plugin_info_is_available (info))
- return;
-
- for (wins = gedit_app_get_windows (gedit_app_get_default ());
- wins != NULL;
- wins = wins->next)
- {
- call_plugin_deactivate (info->plugin, GEDIT_WINDOW (wins->data));
- }
-
- /* first unref the plugin (the loader still has one) */
- g_object_unref (info->plugin);
-
- /* find the loader and tell it to gc and unload the plugin */
- loader = get_plugin_loader (engine, info);
-
- gedit_plugin_loader_garbage_collect (loader);
- gedit_plugin_loader_unload (loader, info);
-
- info->plugin = NULL;
-}
-
-gboolean
-gedit_plugins_engine_deactivate_plugin (GeditPluginsEngine *engine,
- GeditPluginInfo *info)
-{
- gedit_debug (DEBUG_PLUGINS);
-
- g_return_val_if_fail (info != NULL, FALSE);
-
- if (!gedit_plugin_info_is_active (info))
- return TRUE;
-
- g_signal_emit (engine, signals[DEACTIVATE_PLUGIN], 0, info);
- if (!gedit_plugin_info_is_active (info))
- save_active_plugin_list (engine);
-
- return !gedit_plugin_info_is_active (info);
-}
-
-void
-gedit_plugins_engine_activate_plugins (GeditPluginsEngine *engine,
- GeditWindow *window)
-{
- GSList *active_plugins = NULL;
- GList *pl;
-
- gedit_debug (DEBUG_PLUGINS);
-
- g_return_if_fail (GEDIT_IS_PLUGINS_ENGINE (engine));
- g_return_if_fail (GEDIT_IS_WINDOW (window));
-
- /* the first time, we get the 'active' plugins from mateconf */
- if (engine->priv->activate_from_prefs)
- {
- active_plugins = gedit_prefs_manager_get_active_plugins ();
- }
-
- for (pl = engine->priv->plugin_list; pl; pl = pl->next)
- {
- GeditPluginInfo *info = (GeditPluginInfo*)pl->data;
-
- if (engine->priv->activate_from_prefs &&
- g_slist_find_custom (active_plugins,
- gedit_plugin_info_get_module_name (info),
- (GCompareFunc)strcmp) == NULL)
- continue;
-
- /* If plugin is not active, don't try to activate/load it */
- if (!engine->priv->activate_from_prefs &&
- !gedit_plugin_info_is_active (info))
- continue;
-
- if (load_plugin (engine, info))
- gedit_plugin_activate (info->plugin,
- window);
- }
-
- if (engine->priv->activate_from_prefs)
- {
- g_slist_foreach (active_plugins, (GFunc) g_free, NULL);
- g_slist_free (active_plugins);
- engine->priv->activate_from_prefs = FALSE;
- }
-
- gedit_debug_message (DEBUG_PLUGINS, "End");
-
- /* also call update_ui after activation */
- gedit_plugins_engine_update_plugins_ui (engine, window);
-}
-
-void
-gedit_plugins_engine_deactivate_plugins (GeditPluginsEngine *engine,
- GeditWindow *window)
-{
- GList *pl;
-
- gedit_debug (DEBUG_PLUGINS);
-
- g_return_if_fail (GEDIT_IS_PLUGINS_ENGINE (engine));
- g_return_if_fail (GEDIT_IS_WINDOW (window));
-
- for (pl = engine->priv->plugin_list; pl; pl = pl->next)
- {
- GeditPluginInfo *info = (GeditPluginInfo*)pl->data;
-
- /* check if the plugin is actually active */
- if (!gedit_plugin_info_is_active (info))
- continue;
-
- /* call deactivate for the plugin for this window */
- gedit_plugin_deactivate (info->plugin, window);
- }
-
- gedit_debug_message (DEBUG_PLUGINS, "End");
-}
-
-void
-gedit_plugins_engine_update_plugins_ui (GeditPluginsEngine *engine,
- GeditWindow *window)
-{
- GList *pl;
-
- gedit_debug (DEBUG_PLUGINS);
-
- g_return_if_fail (GEDIT_IS_PLUGINS_ENGINE (engine));
- g_return_if_fail (GEDIT_IS_WINDOW (window));
-
- /* call update_ui for all active plugins */
- for (pl = engine->priv->plugin_list; pl; pl = pl->next)
- {
- GeditPluginInfo *info = (GeditPluginInfo*)pl->data;
-
- if (!gedit_plugin_info_is_active (info))
- continue;
-
- gedit_debug_message (DEBUG_PLUGINS, "Updating UI of %s", info->name);
- gedit_plugin_update_ui (info->plugin, window);
- }
-}
-
-void
-gedit_plugins_engine_configure_plugin (GeditPluginsEngine *engine,
- GeditPluginInfo *info,
- GtkWindow *parent)
-{
- GtkWidget *conf_dlg;
-
- GtkWindowGroup *wg;
-
- gedit_debug (DEBUG_PLUGINS);
-
- g_return_if_fail (info != NULL);
-
- conf_dlg = gedit_plugin_create_configure_dialog (info->plugin);
- g_return_if_fail (conf_dlg != NULL);
- gtk_window_set_transient_for (GTK_WINDOW (conf_dlg),
- parent);
-
- wg = gtk_window_get_group (parent);
- if (wg == NULL)
- {
- wg = gtk_window_group_new ();
- gtk_window_group_add_window (wg, parent);
- }
-
- gtk_window_group_add_window (wg,
- GTK_WINDOW (conf_dlg));
-
- gtk_window_set_modal (GTK_WINDOW (conf_dlg), TRUE);
- gtk_widget_show (conf_dlg);
-}
-
-void
-gedit_plugins_engine_active_plugins_changed (GeditPluginsEngine *engine)
-{
- gboolean to_activate;
- GSList *active_plugins;
- GList *pl;
-
- gedit_debug (DEBUG_PLUGINS);
-
- active_plugins = gedit_prefs_manager_get_active_plugins ();
-
- for (pl = engine->priv->plugin_list; pl; pl = pl->next)
- {
- GeditPluginInfo *info = (GeditPluginInfo*)pl->data;
-
- if (!gedit_plugin_info_is_available (info))
- continue;
-
- to_activate = (g_slist_find_custom (active_plugins,
- gedit_plugin_info_get_module_name (info),
- (GCompareFunc)strcmp) != NULL);
-
- if (!gedit_plugin_info_is_active (info) && to_activate)
- g_signal_emit (engine, signals[ACTIVATE_PLUGIN], 0, info);
- else if (gedit_plugin_info_is_active (info) && !to_activate)
- g_signal_emit (engine, signals[DEACTIVATE_PLUGIN], 0, info);
- }
-
- g_slist_foreach (active_plugins, (GFunc) g_free, NULL);
- g_slist_free (active_plugins);
-}
-
-void
-gedit_plugins_engine_rescan_plugins (GeditPluginsEngine *engine)
-{
- gedit_debug (DEBUG_PLUGINS);
-
- load_all_plugins (engine);
-}
diff --git a/gedit/gedit-plugins-engine.h b/gedit/gedit-plugins-engine.h
deleted file mode 100755
index f2ebff63..00000000
--- a/gedit/gedit-plugins-engine.h
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * gedit-plugins-engine.h
- * This file is part of gedit
- *
- * Copyright (C) 2002-2005 - Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2002-2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifndef __GEDIT_PLUGINS_ENGINE_H__
-#define __GEDIT_PLUGINS_ENGINE_H__
-
-#include <glib.h>
-#include "gedit-window.h"
-#include "gedit-plugin-info.h"
-#include "gedit-plugin.h"
-
-G_BEGIN_DECLS
-
-#define GEDIT_TYPE_PLUGINS_ENGINE (gedit_plugins_engine_get_type ())
-#define GEDIT_PLUGINS_ENGINE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GEDIT_TYPE_PLUGINS_ENGINE, GeditPluginsEngine))
-#define GEDIT_PLUGINS_ENGINE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GEDIT_TYPE_PLUGINS_ENGINE, GeditPluginsEngineClass))
-#define GEDIT_IS_PLUGINS_ENGINE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GEDIT_TYPE_PLUGINS_ENGINE))
-#define GEDIT_IS_PLUGINS_ENGINE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEDIT_TYPE_PLUGINS_ENGINE))
-#define GEDIT_PLUGINS_ENGINE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GEDIT_TYPE_PLUGINS_ENGINE, GeditPluginsEngineClass))
-
-typedef struct _GeditPluginsEngine GeditPluginsEngine;
-typedef struct _GeditPluginsEnginePrivate GeditPluginsEnginePrivate;
-
-struct _GeditPluginsEngine
-{
- GObject parent;
- GeditPluginsEnginePrivate *priv;
-};
-
-typedef struct _GeditPluginsEngineClass GeditPluginsEngineClass;
-
-struct _GeditPluginsEngineClass
-{
- GObjectClass parent_class;
-
- void (* activate_plugin) (GeditPluginsEngine *engine,
- GeditPluginInfo *info);
-
- void (* deactivate_plugin) (GeditPluginsEngine *engine,
- GeditPluginInfo *info);
-};
-
-GType gedit_plugins_engine_get_type (void) G_GNUC_CONST;
-
-GeditPluginsEngine *gedit_plugins_engine_get_default (void);
-
-void gedit_plugins_engine_garbage_collect (GeditPluginsEngine *engine);
-
-const GList *gedit_plugins_engine_get_plugin_list (GeditPluginsEngine *engine);
-
-GeditPluginInfo *gedit_plugins_engine_get_plugin_info (GeditPluginsEngine *engine,
- const gchar *name);
-
-/* plugin load and unloading (overall, for all windows) */
-gboolean gedit_plugins_engine_activate_plugin (GeditPluginsEngine *engine,
- GeditPluginInfo *info);
-gboolean gedit_plugins_engine_deactivate_plugin (GeditPluginsEngine *engine,
- GeditPluginInfo *info);
-
-void gedit_plugins_engine_configure_plugin (GeditPluginsEngine *engine,
- GeditPluginInfo *info,
- GtkWindow *parent);
-
-/* plugin activation/deactivation per window, private to GeditWindow */
-void gedit_plugins_engine_activate_plugins (GeditPluginsEngine *engine,
- GeditWindow *window);
-void gedit_plugins_engine_deactivate_plugins (GeditPluginsEngine *engine,
- GeditWindow *window);
-void gedit_plugins_engine_update_plugins_ui (GeditPluginsEngine *engine,
- GeditWindow *window);
-
-/* private for mateconf notification */
-void gedit_plugins_engine_active_plugins_changed
- (GeditPluginsEngine *engine);
-
-void gedit_plugins_engine_rescan_plugins (GeditPluginsEngine *engine);
-
-G_END_DECLS
-
-#endif /* __GEDIT_PLUGINS_ENGINE_H__ */
diff --git a/gedit/gedit-prefs-manager-app.c b/gedit/gedit-prefs-manager-app.c
deleted file mode 100755
index ce35db8d..00000000
--- a/gedit/gedit-prefs-manager-app.c
+++ /dev/null
@@ -1,1620 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * gedit-prefs-manager.c
- * This file is part of gedit
- *
- * Copyright (C) 2002-2005 Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2002-2003. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <string.h>
-
-#include "gedit-prefs-manager.h"
-#include "gedit-prefs-manager-private.h"
-#include "gedit-prefs-manager-app.h"
-#include "gedit-app.h"
-#include "gedit-debug.h"
-#include "gedit-view.h"
-#include "gedit-window.h"
-#include "gedit-window-private.h"
-#include "gedit-plugins-engine.h"
-#include "gedit-style-scheme-manager.h"
-#include "gedit-dirs.h"
-
-static void gedit_prefs_manager_editor_font_changed (MateConfClient *client,
- guint cnxn_id,
- MateConfEntry *entry,
- gpointer user_data);
-
-static void gedit_prefs_manager_system_font_changed (MateConfClient *client,
- guint cnxn_id,
- MateConfEntry *entry,
- gpointer user_data);
-
-static void gedit_prefs_manager_tabs_size_changed (MateConfClient *client,
- guint cnxn_id,
- MateConfEntry *entry,
- gpointer user_data);
-
-static void gedit_prefs_manager_wrap_mode_changed (MateConfClient *client,
- guint cnxn_id,
- MateConfEntry *entry,
- gpointer user_data);
-
-static void gedit_prefs_manager_line_numbers_changed (MateConfClient *client,
- guint cnxn_id,
- MateConfEntry *entry,
- gpointer user_data);
-
-static void gedit_prefs_manager_auto_indent_changed (MateConfClient *client,
- guint cnxn_id,
- MateConfEntry *entry,
- gpointer user_data);
-
-static void gedit_prefs_manager_undo_changed (MateConfClient *client,
- guint cnxn_id,
- MateConfEntry *entry,
- gpointer user_data);
-
-static void gedit_prefs_manager_right_margin_changed (MateConfClient *client,
- guint cnxn_id,
- MateConfEntry *entry,
- gpointer user_data);
-
-static void gedit_prefs_manager_smart_home_end_changed (MateConfClient *client,
- guint cnxn_id,
- MateConfEntry *entry,
- gpointer user_data);
-
-static void gedit_prefs_manager_hl_current_line_changed (MateConfClient *client,
- guint cnxn_id,
- MateConfEntry *entry,
- gpointer user_data);
-
-static void gedit_prefs_manager_bracket_matching_changed(MateConfClient *client,
- guint cnxn_id,
- MateConfEntry *entry,
- gpointer user_data);
-
-static void gedit_prefs_manager_syntax_hl_enable_changed(MateConfClient *client,
- guint cnxn_id,
- MateConfEntry *entry,
- gpointer user_data);
-
-static void gedit_prefs_manager_search_hl_enable_changed(MateConfClient *client,
- guint cnxn_id,
- MateConfEntry *entry,
- gpointer user_data);
-
-static void gedit_prefs_manager_source_style_scheme_changed
- (MateConfClient *client,
- guint cnxn_id,
- MateConfEntry *entry,
- gpointer user_data);
-
-static void gedit_prefs_manager_max_recents_changed (MateConfClient *client,
- guint cnxn_id,
- MateConfEntry *entry,
- gpointer user_data);
-
-static void gedit_prefs_manager_auto_save_changed (MateConfClient *client,
- guint cnxn_id,
- MateConfEntry *entry,
- gpointer user_data);
-
-static void gedit_prefs_manager_active_plugins_changed (MateConfClient *client,
- guint cnxn_id,
- MateConfEntry *entry,
- gpointer user_data);
-
-static void gedit_prefs_manager_lockdown_changed (MateConfClient *client,
- guint cnxn_id,
- MateConfEntry *entry,
- gpointer user_data);
-
-/* GUI state is serialized to a .desktop file, not in mateconf */
-
-#define GEDIT_STATE_DEFAULT_WINDOW_STATE 0
-#define GEDIT_STATE_DEFAULT_WINDOW_WIDTH 650
-#define GEDIT_STATE_DEFAULT_WINDOW_HEIGHT 500
-#define GEDIT_STATE_DEFAULT_SIDE_PANEL_SIZE 200
-#define GEDIT_STATE_DEFAULT_BOTTOM_PANEL_SIZE 140
-
-#define GEDIT_STATE_FILE_LOCATION "gedit-2"
-
-#define GEDIT_STATE_WINDOW_GROUP "window"
-#define GEDIT_STATE_WINDOW_STATE "state"
-#define GEDIT_STATE_WINDOW_HEIGHT "height"
-#define GEDIT_STATE_WINDOW_WIDTH "width"
-#define GEDIT_STATE_SIDE_PANEL_SIZE "side_panel_size"
-#define GEDIT_STATE_BOTTOM_PANEL_SIZE "bottom_panel_size"
-#define GEDIT_STATE_SIDE_PANEL_ACTIVE_PAGE "side_panel_active_page"
-#define GEDIT_STATE_BOTTOM_PANEL_ACTIVE_PAGE "bottom_panel_active_page"
-
-#define GEDIT_STATE_FILEFILTER_GROUP "filefilter"
-#define GEDIT_STATE_FILEFILTER_ID "id"
-
-static gint window_state = -1;
-static gint window_height = -1;
-static gint window_width = -1;
-static gint side_panel_size = -1;
-static gint bottom_panel_size = -1;
-static gint side_panel_active_page = -1;
-static gint bottom_panel_active_page = -1;
-static gint active_file_filter = -1;
-
-
-static gchar *
-get_state_filename (void)
-{
- gchar *config_dir;
- gchar *filename = NULL;
-
- config_dir = gedit_dirs_get_user_config_dir ();
-
- if (config_dir != NULL)
- {
- filename = g_build_filename (config_dir,
- GEDIT_STATE_FILE_LOCATION,
- NULL);
- g_free (config_dir);
- }
-
- return filename;
-}
-
-static GKeyFile *
-get_gedit_state_file (void)
-{
- static GKeyFile *state_file = NULL;
-
- if (state_file == NULL)
- {
- gchar *filename;
- GError *err = NULL;
-
- state_file = g_key_file_new ();
-
- filename = get_state_filename ();
-
- if (!g_key_file_load_from_file (state_file,
- filename,
- G_KEY_FILE_NONE,
- &err))
- {
- if (err->domain != G_FILE_ERROR ||
- err->code != G_FILE_ERROR_NOENT)
- {
- g_warning ("Could not load gedit state file: %s\n",
- err->message);
- }
-
- g_error_free (err);
- }
-
- g_free (filename);
- }
-
- return state_file;
-}
-
-static void
-gedit_state_get_int (const gchar *group,
- const gchar *key,
- gint defval,
- gint *result)
-{
- GKeyFile *state_file;
- gint res;
- GError *err = NULL;
-
- state_file = get_gedit_state_file ();
- res = g_key_file_get_integer (state_file,
- group,
- key,
- &err);
-
- if (err != NULL)
- {
- if ((err->domain != G_KEY_FILE_ERROR) ||
- ((err->code != G_KEY_FILE_ERROR_GROUP_NOT_FOUND &&
- err->code != G_KEY_FILE_ERROR_KEY_NOT_FOUND)))
- {
- g_warning ("Could not get state value %s::%s : %s\n",
- group,
- key,
- err->message);
- }
-
- *result = defval;
- g_error_free (err);
- }
- else
- {
- *result = res;
- }
-}
-
-static void
-gedit_state_set_int (const gchar *group,
- const gchar *key,
- gint value)
-{
- GKeyFile *state_file;
-
- state_file = get_gedit_state_file ();
- g_key_file_set_integer (state_file,
- group,
- key,
- value);
-}
-
-static gboolean
-gedit_state_file_sync (void)
-{
- GKeyFile *state_file;
- gchar *config_dir;
- gchar *filename = NULL;
- gchar *content = NULL;
- gsize length;
- gint res;
- GError *err = NULL;
- gboolean ret = FALSE;
-
- state_file = get_gedit_state_file ();
- g_return_val_if_fail (state_file != NULL, FALSE);
-
- config_dir = gedit_dirs_get_user_config_dir ();
- if (config_dir == NULL)
- {
- g_warning ("Could not get config directory\n");
- return ret;
- }
-
- res = g_mkdir_with_parents (config_dir, 0755);
- if (res < 0)
- {
- g_warning ("Could not create config directory\n");
- goto out;
- }
-
- content = g_key_file_to_data (state_file,
- &length,
- &err);
-
- if (err != NULL)
- {
- g_warning ("Could not get data from state file: %s\n",
- err->message);
- goto out;
- }
-
- if (content != NULL)
- {
- filename = get_state_filename ();
- if (!g_file_set_contents (filename,
- content,
- length,
- &err))
- {
- g_warning ("Could not write gedit state file: %s\n",
- err->message);
- goto out;
- }
- }
-
- ret = TRUE;
-
- out:
- if (err != NULL)
- g_error_free (err);
-
- g_free (config_dir);
- g_free (filename);
- g_free (content);
-
- return ret;
-}
-
-/* Window state */
-gint
-gedit_prefs_manager_get_window_state (void)
-{
- if (window_state == -1)
- {
- gedit_state_get_int (GEDIT_STATE_WINDOW_GROUP,
- GEDIT_STATE_WINDOW_STATE,
- GEDIT_STATE_DEFAULT_WINDOW_STATE,
- &window_state);
- }
-
- return window_state;
-}
-
-void
-gedit_prefs_manager_set_window_state (gint ws)
-{
- g_return_if_fail (ws > -1);
-
- window_state = ws;
-
- gedit_state_set_int (GEDIT_STATE_WINDOW_GROUP,
- GEDIT_STATE_WINDOW_STATE,
- ws);
-}
-
-gboolean
-gedit_prefs_manager_window_state_can_set (void)
-{
- return TRUE;
-}
-
-/* Window size */
-void
-gedit_prefs_manager_get_window_size (gint *width, gint *height)
-{
- g_return_if_fail (width != NULL && height != NULL);
-
- if (window_width == -1)
- {
- gedit_state_get_int (GEDIT_STATE_WINDOW_GROUP,
- GEDIT_STATE_WINDOW_WIDTH,
- GEDIT_STATE_DEFAULT_WINDOW_WIDTH,
- &window_width);
- }
-
- if (window_height == -1)
- {
- gedit_state_get_int (GEDIT_STATE_WINDOW_GROUP,
- GEDIT_STATE_WINDOW_HEIGHT,
- GEDIT_STATE_DEFAULT_WINDOW_HEIGHT,
- &window_height);
- }
-
- *width = window_width;
- *height = window_height;
-}
-
-void
-gedit_prefs_manager_get_default_window_size (gint *width, gint *height)
-{
- g_return_if_fail (width != NULL && height != NULL);
-
- *width = GEDIT_STATE_DEFAULT_WINDOW_WIDTH;
- *height = GEDIT_STATE_DEFAULT_WINDOW_HEIGHT;
-}
-
-void
-gedit_prefs_manager_set_window_size (gint width, gint height)
-{
- g_return_if_fail (width > -1 && height > -1);
-
- window_width = width;
- window_height = height;
-
- gedit_state_set_int (GEDIT_STATE_WINDOW_GROUP,
- GEDIT_STATE_WINDOW_WIDTH,
- width);
- gedit_state_set_int (GEDIT_STATE_WINDOW_GROUP,
- GEDIT_STATE_WINDOW_HEIGHT,
- height);
-}
-
-gboolean
-gedit_prefs_manager_window_size_can_set (void)
-{
- return TRUE;
-}
-
-/* Side panel */
-gint
-gedit_prefs_manager_get_side_panel_size (void)
-{
- if (side_panel_size == -1)
- {
- gedit_state_get_int (GEDIT_STATE_WINDOW_GROUP,
- GEDIT_STATE_SIDE_PANEL_SIZE,
- GEDIT_STATE_DEFAULT_SIDE_PANEL_SIZE,
- &side_panel_size);
- }
-
- return side_panel_size;
-}
-
-gint
-gedit_prefs_manager_get_default_side_panel_size (void)
-{
- return GEDIT_STATE_DEFAULT_SIDE_PANEL_SIZE;
-}
-
-void
-gedit_prefs_manager_set_side_panel_size (gint ps)
-{
- g_return_if_fail (ps > -1);
-
- if (side_panel_size == ps)
- return;
-
- side_panel_size = ps;
- gedit_state_set_int (GEDIT_STATE_WINDOW_GROUP,
- GEDIT_STATE_SIDE_PANEL_SIZE,
- ps);
-}
-
-gboolean
-gedit_prefs_manager_side_panel_size_can_set (void)
-{
- return TRUE;
-}
-
-gint
-gedit_prefs_manager_get_side_panel_active_page (void)
-{
- if (side_panel_active_page == -1)
- {
- gedit_state_get_int (GEDIT_STATE_WINDOW_GROUP,
- GEDIT_STATE_SIDE_PANEL_ACTIVE_PAGE,
- 0,
- &side_panel_active_page);
- }
-
- return side_panel_active_page;
-}
-
-void
-gedit_prefs_manager_set_side_panel_active_page (gint id)
-{
- if (side_panel_active_page == id)
- return;
-
- side_panel_active_page = id;
- gedit_state_set_int (GEDIT_STATE_WINDOW_GROUP,
- GEDIT_STATE_SIDE_PANEL_ACTIVE_PAGE,
- id);
-}
-
-gboolean
-gedit_prefs_manager_side_panel_active_page_can_set (void)
-{
- return TRUE;
-}
-
-/* Bottom panel */
-gint
-gedit_prefs_manager_get_bottom_panel_size (void)
-{
- if (bottom_panel_size == -1)
- {
- gedit_state_get_int (GEDIT_STATE_WINDOW_GROUP,
- GEDIT_STATE_BOTTOM_PANEL_SIZE,
- GEDIT_STATE_DEFAULT_BOTTOM_PANEL_SIZE,
- &bottom_panel_size);
- }
-
- return bottom_panel_size;
-}
-
-gint
-gedit_prefs_manager_get_default_bottom_panel_size (void)
-{
- return GEDIT_STATE_DEFAULT_BOTTOM_PANEL_SIZE;
-}
-
-void
-gedit_prefs_manager_set_bottom_panel_size (gint ps)
-{
- g_return_if_fail (ps > -1);
-
- if (bottom_panel_size == ps)
- return;
-
- bottom_panel_size = ps;
- gedit_state_set_int (GEDIT_STATE_WINDOW_GROUP,
- GEDIT_STATE_BOTTOM_PANEL_SIZE,
- ps);
-}
-
-gboolean
-gedit_prefs_manager_bottom_panel_size_can_set (void)
-{
- return TRUE;
-}
-
-gint
-gedit_prefs_manager_get_bottom_panel_active_page (void)
-{
- if (bottom_panel_active_page == -1)
- {
- gedit_state_get_int (GEDIT_STATE_WINDOW_GROUP,
- GEDIT_STATE_BOTTOM_PANEL_ACTIVE_PAGE,
- 0,
- &bottom_panel_active_page);
- }
-
- return bottom_panel_active_page;
-}
-
-void
-gedit_prefs_manager_set_bottom_panel_active_page (gint id)
-{
- if (bottom_panel_active_page == id)
- return;
-
- bottom_panel_active_page = id;
- gedit_state_set_int (GEDIT_STATE_WINDOW_GROUP,
- GEDIT_STATE_BOTTOM_PANEL_ACTIVE_PAGE,
- id);
-}
-
-gboolean
-gedit_prefs_manager_bottom_panel_active_page_can_set (void)
-{
- return TRUE;
-}
-
-/* File filter */
-gint
-gedit_prefs_manager_get_active_file_filter (void)
-{
- if (active_file_filter == -1)
- {
- gedit_state_get_int (GEDIT_STATE_FILEFILTER_GROUP,
- GEDIT_STATE_FILEFILTER_ID,
- 0,
- &active_file_filter);
- }
-
- return active_file_filter;
-}
-
-void
-gedit_prefs_manager_set_active_file_filter (gint id)
-{
- g_return_if_fail (id >= 0);
-
- if (active_file_filter == id)
- return;
-
- active_file_filter = id;
- gedit_state_set_int (GEDIT_STATE_FILEFILTER_GROUP,
- GEDIT_STATE_FILEFILTER_ID,
- id);
-}
-
-gboolean
-gedit_prefs_manager_active_file_filter_can_set (void)
-{
- return TRUE;
-}
-
-/* Normal prefs are stored in MateConf */
-
-gboolean
-gedit_prefs_manager_app_init (void)
-{
- gedit_debug (DEBUG_PREFS);
-
- g_return_val_if_fail (gedit_prefs_manager == NULL, FALSE);
-
- gedit_prefs_manager_init ();
-
- if (gedit_prefs_manager != NULL)
- {
- /* TODO: notify, add dirs */
- mateconf_client_add_dir (gedit_prefs_manager->mateconf_client,
- GPM_PREFS_DIR,
- MATECONF_CLIENT_PRELOAD_RECURSIVE,
- NULL);
-
- mateconf_client_add_dir (gedit_prefs_manager->mateconf_client,
- GPM_PLUGINS_DIR,
- MATECONF_CLIENT_PRELOAD_RECURSIVE,
- NULL);
-
- mateconf_client_add_dir (gedit_prefs_manager->mateconf_client,
- GPM_LOCKDOWN_DIR,
- MATECONF_CLIENT_PRELOAD_RECURSIVE,
- NULL);
-
- mateconf_client_notify_add (gedit_prefs_manager->mateconf_client,
- GPM_FONT_DIR,
- gedit_prefs_manager_editor_font_changed,
- NULL, NULL, NULL);
-
- mateconf_client_notify_add (gedit_prefs_manager->mateconf_client,
- GPM_SYSTEM_FONT,
- gedit_prefs_manager_system_font_changed,
- NULL, NULL, NULL);
-
- mateconf_client_notify_add (gedit_prefs_manager->mateconf_client,
- GPM_TABS_DIR,
- gedit_prefs_manager_tabs_size_changed,
- NULL, NULL, NULL);
-
- mateconf_client_notify_add (gedit_prefs_manager->mateconf_client,
- GPM_WRAP_MODE_DIR,
- gedit_prefs_manager_wrap_mode_changed,
- NULL, NULL, NULL);
-
- mateconf_client_notify_add (gedit_prefs_manager->mateconf_client,
- GPM_LINE_NUMBERS_DIR,
- gedit_prefs_manager_line_numbers_changed,
- NULL, NULL, NULL);
-
- mateconf_client_notify_add (gedit_prefs_manager->mateconf_client,
- GPM_AUTO_INDENT_DIR,
- gedit_prefs_manager_auto_indent_changed,
- NULL, NULL, NULL);
-
- mateconf_client_notify_add (gedit_prefs_manager->mateconf_client,
- GPM_UNDO_DIR,
- gedit_prefs_manager_undo_changed,
- NULL, NULL, NULL);
-
- mateconf_client_notify_add (gedit_prefs_manager->mateconf_client,
- GPM_RIGHT_MARGIN_DIR,
- gedit_prefs_manager_right_margin_changed,
- NULL, NULL, NULL);
-
- mateconf_client_notify_add (gedit_prefs_manager->mateconf_client,
- GPM_SMART_HOME_END_DIR,
- gedit_prefs_manager_smart_home_end_changed,
- NULL, NULL, NULL);
-
- mateconf_client_notify_add (gedit_prefs_manager->mateconf_client,
- GPM_CURRENT_LINE_DIR,
- gedit_prefs_manager_hl_current_line_changed,
- NULL, NULL, NULL);
-
- mateconf_client_notify_add (gedit_prefs_manager->mateconf_client,
- GPM_BRACKET_MATCHING_DIR,
- gedit_prefs_manager_bracket_matching_changed,
- NULL, NULL, NULL);
-
- mateconf_client_notify_add (gedit_prefs_manager->mateconf_client,
- GPM_SYNTAX_HL_ENABLE,
- gedit_prefs_manager_syntax_hl_enable_changed,
- NULL, NULL, NULL);
-
- mateconf_client_notify_add (gedit_prefs_manager->mateconf_client,
- GPM_SEARCH_HIGHLIGHTING_ENABLE,
- gedit_prefs_manager_search_hl_enable_changed,
- NULL, NULL, NULL);
-
- mateconf_client_notify_add (gedit_prefs_manager->mateconf_client,
- GPM_SOURCE_STYLE_DIR,
- gedit_prefs_manager_source_style_scheme_changed,
- NULL, NULL, NULL);
-
- mateconf_client_notify_add (gedit_prefs_manager->mateconf_client,
- GPM_MAX_RECENTS,
- gedit_prefs_manager_max_recents_changed,
- NULL, NULL, NULL);
-
- mateconf_client_notify_add (gedit_prefs_manager->mateconf_client,
- GPM_SAVE_DIR,
- gedit_prefs_manager_auto_save_changed,
- NULL, NULL, NULL);
-
- mateconf_client_notify_add (gedit_prefs_manager->mateconf_client,
- GPM_ACTIVE_PLUGINS,
- gedit_prefs_manager_active_plugins_changed,
- NULL, NULL, NULL);
-
- mateconf_client_notify_add (gedit_prefs_manager->mateconf_client,
- GPM_LOCKDOWN_DIR,
- gedit_prefs_manager_lockdown_changed,
- NULL, NULL, NULL);
- }
-
- return gedit_prefs_manager != NULL;
-}
-
-/* This function must be called before exiting gedit */
-void
-gedit_prefs_manager_app_shutdown (void)
-{
- gedit_debug (DEBUG_PREFS);
-
- gedit_prefs_manager_shutdown ();
-
- gedit_state_file_sync ();
-}
-
-
-static void
-gedit_prefs_manager_editor_font_changed (MateConfClient *client,
- guint cnxn_id,
- MateConfEntry *entry,
- gpointer user_data)
-{
- GList *views;
- GList *l;
- gchar *font = NULL;
- gboolean def = TRUE;
- gint ts;
-
- gedit_debug (DEBUG_PREFS);
-
- g_return_if_fail (entry->key != NULL);
- g_return_if_fail (entry->value != NULL);
-
- if (strcmp (entry->key, GPM_USE_DEFAULT_FONT) == 0)
- {
- if (entry->value->type == MATECONF_VALUE_BOOL)
- def = mateconf_value_get_bool (entry->value);
- else
- def = GPM_DEFAULT_USE_DEFAULT_FONT;
-
- if (def)
- font = gedit_prefs_manager_get_system_font ();
- else
- font = gedit_prefs_manager_get_editor_font ();
- }
- else if (strcmp (entry->key, GPM_EDITOR_FONT) == 0)
- {
- if (entry->value->type == MATECONF_VALUE_STRING)
- font = g_strdup (mateconf_value_get_string (entry->value));
- else
- font = g_strdup (GPM_DEFAULT_EDITOR_FONT);
-
- def = gedit_prefs_manager_get_use_default_font ();
- }
- else
- return;
-
- g_return_if_fail (font != NULL);
-
- ts = gedit_prefs_manager_get_tabs_size ();
-
- views = gedit_app_get_views (gedit_app_get_default ());
- l = views;
-
- while (l != NULL)
- {
- /* Note: we use def=FALSE to avoid GeditView to query mateconf */
- gedit_view_set_font (GEDIT_VIEW (l->data), FALSE, font);
- gtk_source_view_set_tab_width (GTK_SOURCE_VIEW (l->data), ts);
-
- l = l->next;
- }
-
- g_list_free (views);
- g_free (font);
-}
-
-static void
-gedit_prefs_manager_system_font_changed (MateConfClient *client,
- guint cnxn_id,
- MateConfEntry *entry,
- gpointer user_data)
-{
- GList *views;
- GList *l;
- gchar *font;
- gint ts;
-
- gedit_debug (DEBUG_PREFS);
-
- g_return_if_fail (entry->key != NULL);
- g_return_if_fail (entry->value != NULL);
-
- if (strcmp (entry->key, GPM_SYSTEM_FONT) != 0)
- return;
-
- if (!gedit_prefs_manager_get_use_default_font ())
- return;
-
- if (entry->value->type == MATECONF_VALUE_STRING)
- font = g_strdup (mateconf_value_get_string (entry->value));
- else
- font = g_strdup (GPM_DEFAULT_SYSTEM_FONT);
-
- ts = gedit_prefs_manager_get_tabs_size ();
-
- views = gedit_app_get_views (gedit_app_get_default ());
- l = views;
-
- while (l != NULL)
- {
- /* Note: we use def=FALSE to avoid GeditView to query mateconf */
- gedit_view_set_font (GEDIT_VIEW (l->data), FALSE, font);
-
- gtk_source_view_set_tab_width (GTK_SOURCE_VIEW (l->data), ts);
- l = l->next;
- }
-
- g_list_free (views);
- g_free (font);
-}
-
-static void
-gedit_prefs_manager_tabs_size_changed (MateConfClient *client,
- guint cnxn_id,
- MateConfEntry *entry,
- gpointer user_data)
-{
- gedit_debug (DEBUG_PREFS);
-
- g_return_if_fail (entry->key != NULL);
- g_return_if_fail (entry->value != NULL);
-
- if (strcmp (entry->key, GPM_TABS_SIZE) == 0)
- {
- gint tab_width;
- GList *views;
- GList *l;
-
- if (entry->value->type == MATECONF_VALUE_INT)
- tab_width = mateconf_value_get_int (entry->value);
- else
- tab_width = GPM_DEFAULT_TABS_SIZE;
-
- tab_width = CLAMP (tab_width, 1, 24);
-
- views = gedit_app_get_views (gedit_app_get_default ());
- l = views;
-
- while (l != NULL)
- {
- gtk_source_view_set_tab_width (GTK_SOURCE_VIEW (l->data),
- tab_width);
-
- l = l->next;
- }
-
- g_list_free (views);
- }
- else if (strcmp (entry->key, GPM_INSERT_SPACES) == 0)
- {
- gboolean enable;
- GList *views;
- GList *l;
-
- if (entry->value->type == MATECONF_VALUE_BOOL)
- enable = mateconf_value_get_bool (entry->value);
- else
- enable = GPM_DEFAULT_INSERT_SPACES;
-
- views = gedit_app_get_views (gedit_app_get_default ());
- l = views;
-
- while (l != NULL)
- {
- gtk_source_view_set_insert_spaces_instead_of_tabs (
- GTK_SOURCE_VIEW (l->data),
- enable);
-
- l = l->next;
- }
-
- g_list_free (views);
- }
-}
-
-static GtkWrapMode
-get_wrap_mode_from_string (const gchar* str)
-{
- GtkWrapMode res;
-
- g_return_val_if_fail (str != NULL, GTK_WRAP_WORD);
-
- if (strcmp (str, "GTK_WRAP_NONE") == 0)
- res = GTK_WRAP_NONE;
- else
- {
- if (strcmp (str, "GTK_WRAP_CHAR") == 0)
- res = GTK_WRAP_CHAR;
- else
- res = GTK_WRAP_WORD;
- }
-
- return res;
-}
-
-static void
-gedit_prefs_manager_wrap_mode_changed (MateConfClient *client,
- guint cnxn_id,
- MateConfEntry *entry,
- gpointer user_data)
-{
- gedit_debug (DEBUG_PREFS);
-
- g_return_if_fail (entry->key != NULL);
- g_return_if_fail (entry->value != NULL);
-
- if (strcmp (entry->key, GPM_WRAP_MODE) == 0)
- {
- GtkWrapMode wrap_mode;
- GList *views;
- GList *l;
-
- if (entry->value->type == MATECONF_VALUE_STRING)
- wrap_mode =
- get_wrap_mode_from_string (mateconf_value_get_string (entry->value));
- else
- wrap_mode = get_wrap_mode_from_string (GPM_DEFAULT_WRAP_MODE);
-
- views = gedit_app_get_views (gedit_app_get_default ());
- l = views;
-
- while (l != NULL)
- {
- gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (l->data),
- wrap_mode);
-
- l = l->next;
- }
-
- g_list_free (views);
- }
-}
-
-static void
-gedit_prefs_manager_line_numbers_changed (MateConfClient *client,
- guint cnxn_id,
- MateConfEntry *entry,
- gpointer user_data)
-{
- gedit_debug (DEBUG_PREFS);
-
- g_return_if_fail (entry->key != NULL);
- g_return_if_fail (entry->value != NULL);
-
- if (strcmp (entry->key, GPM_DISPLAY_LINE_NUMBERS) == 0)
- {
- gboolean dln;
- GList *views;
- GList *l;
-
- if (entry->value->type == MATECONF_VALUE_BOOL)
- dln = mateconf_value_get_bool (entry->value);
- else
- dln = GPM_DEFAULT_DISPLAY_LINE_NUMBERS;
-
- views = gedit_app_get_views (gedit_app_get_default ());
- l = views;
-
- while (l != NULL)
- {
- gtk_source_view_set_show_line_numbers (GTK_SOURCE_VIEW (l->data),
- dln);
-
- l = l->next;
- }
-
- g_list_free (views);
- }
-}
-
-static void
-gedit_prefs_manager_hl_current_line_changed (MateConfClient *client,
- guint cnxn_id,
- MateConfEntry *entry,
- gpointer user_data)
-{
- gedit_debug (DEBUG_PREFS);
-
- g_return_if_fail (entry->key != NULL);
- g_return_if_fail (entry->value != NULL);
-
- if (strcmp (entry->key, GPM_HIGHLIGHT_CURRENT_LINE) == 0)
- {
- gboolean hl;
- GList *views;
- GList *l;
-
- if (entry->value->type == MATECONF_VALUE_BOOL)
- hl = mateconf_value_get_bool (entry->value);
- else
- hl = GPM_DEFAULT_HIGHLIGHT_CURRENT_LINE;
-
- views = gedit_app_get_views (gedit_app_get_default ());
- l = views;
-
- while (l != NULL)
- {
- gtk_source_view_set_highlight_current_line (GTK_SOURCE_VIEW (l->data),
- hl);
-
- l = l->next;
- }
-
- g_list_free (views);
- }
-}
-
-static void
-gedit_prefs_manager_bracket_matching_changed (MateConfClient *client,
- guint cnxn_id,
- MateConfEntry *entry,
- gpointer user_data)
-{
- gedit_debug (DEBUG_PREFS);
-
- g_return_if_fail (entry->key != NULL);
- g_return_if_fail (entry->value != NULL);
-
- if (strcmp (entry->key, GPM_BRACKET_MATCHING) == 0)
- {
- gboolean enable;
- GList *docs;
- GList *l;
-
- if (entry->value->type == MATECONF_VALUE_BOOL)
- enable = mateconf_value_get_bool (entry->value);
- else
- enable = GPM_DEFAULT_BRACKET_MATCHING;
-
- docs = gedit_app_get_documents (gedit_app_get_default ());
- l = docs;
-
- while (l != NULL)
- {
- gtk_source_buffer_set_highlight_matching_brackets (GTK_SOURCE_BUFFER (l->data),
- enable);
-
- l = l->next;
- }
-
- g_list_free (docs);
- }
-}
-
-static void
-gedit_prefs_manager_auto_indent_changed (MateConfClient *client,
- guint cnxn_id,
- MateConfEntry *entry,
- gpointer user_data)
-{
- gedit_debug (DEBUG_PREFS);
-
- g_return_if_fail (entry->key != NULL);
- g_return_if_fail (entry->value != NULL);
-
- if (strcmp (entry->key, GPM_AUTO_INDENT) == 0)
- {
- gboolean enable;
- GList *views;
- GList *l;
-
- if (entry->value->type == MATECONF_VALUE_BOOL)
- enable = mateconf_value_get_bool (entry->value);
- else
- enable = GPM_DEFAULT_AUTO_INDENT;
-
- views = gedit_app_get_views (gedit_app_get_default ());
- l = views;
-
- while (l != NULL)
- {
- gtk_source_view_set_auto_indent (GTK_SOURCE_VIEW (l->data),
- enable);
-
- l = l->next;
- }
-
- g_list_free (views);
- }
-}
-
-static void
-gedit_prefs_manager_undo_changed (MateConfClient *client,
- guint cnxn_id,
- MateConfEntry *entry,
- gpointer user_data)
-{
- gedit_debug (DEBUG_PREFS);
-
- g_return_if_fail (entry->key != NULL);
- g_return_if_fail (entry->value != NULL);
-
- if (strcmp (entry->key, GPM_UNDO_ACTIONS_LIMIT) == 0)
- {
- gint ul;
- GList *docs;
- GList *l;
-
- if (entry->value->type == MATECONF_VALUE_INT)
- ul = mateconf_value_get_int (entry->value);
- else
- ul = GPM_DEFAULT_UNDO_ACTIONS_LIMIT;
-
- ul = CLAMP (ul, -1, 250);
-
- docs = gedit_app_get_documents (gedit_app_get_default ());
- l = docs;
-
- while (l != NULL)
- {
- gtk_source_buffer_set_max_undo_levels (GTK_SOURCE_BUFFER (l->data),
- ul);
-
- l = l->next;
- }
-
- g_list_free (docs);
- }
-}
-
-static void
-gedit_prefs_manager_right_margin_changed (MateConfClient *client,
- guint cnxn_id,
- MateConfEntry *entry,
- gpointer user_data)
-{
- gedit_debug (DEBUG_PREFS);
-
- g_return_if_fail (entry->key != NULL);
- g_return_if_fail (entry->value != NULL);
-
- if (strcmp (entry->key, GPM_RIGHT_MARGIN_POSITION) == 0)
- {
- gint pos;
- GList *views;
- GList *l;
-
- if (entry->value->type == MATECONF_VALUE_INT)
- pos = mateconf_value_get_int (entry->value);
- else
- pos = GPM_DEFAULT_RIGHT_MARGIN_POSITION;
-
- pos = CLAMP (pos, 1, 160);
-
- views = gedit_app_get_views (gedit_app_get_default ());
- l = views;
-
- while (l != NULL)
- {
- gtk_source_view_set_right_margin_position (GTK_SOURCE_VIEW (l->data),
- pos);
-
- l = l->next;
- }
-
- g_list_free (views);
- }
- else if (strcmp (entry->key, GPM_DISPLAY_RIGHT_MARGIN) == 0)
- {
- gboolean display;
- GList *views;
- GList *l;
-
- if (entry->value->type == MATECONF_VALUE_BOOL)
- display = mateconf_value_get_bool (entry->value);
- else
- display = GPM_DEFAULT_DISPLAY_RIGHT_MARGIN;
-
- views = gedit_app_get_views (gedit_app_get_default ());
- l = views;
-
- while (l != NULL)
- {
- gtk_source_view_set_show_right_margin (GTK_SOURCE_VIEW (l->data),
- display);
-
- l = l->next;
- }
-
- g_list_free (views);
- }
-}
-
-static GtkSourceSmartHomeEndType
-get_smart_home_end_from_string (const gchar *str)
-{
- GtkSourceSmartHomeEndType res;
-
- g_return_val_if_fail (str != NULL, GTK_SOURCE_SMART_HOME_END_AFTER);
-
- if (strcmp (str, "DISABLED") == 0)
- res = GTK_SOURCE_SMART_HOME_END_DISABLED;
- else if (strcmp (str, "BEFORE") == 0)
- res = GTK_SOURCE_SMART_HOME_END_BEFORE;
- else if (strcmp (str, "ALWAYS") == 0)
- res = GTK_SOURCE_SMART_HOME_END_ALWAYS;
- else
- res = GTK_SOURCE_SMART_HOME_END_AFTER;
-
- return res;
-}
-
-static void
-gedit_prefs_manager_smart_home_end_changed (MateConfClient *client,
- guint cnxn_id,
- MateConfEntry *entry,
- gpointer user_data)
-{
- gedit_debug (DEBUG_PREFS);
-
- g_return_if_fail (entry->key != NULL);
- g_return_if_fail (entry->value != NULL);
-
- if (strcmp (entry->key, GPM_SMART_HOME_END) == 0)
- {
- GtkSourceSmartHomeEndType smart_he;
- GList *views;
- GList *l;
-
- if (entry->value->type == MATECONF_VALUE_STRING)
- smart_he =
- get_smart_home_end_from_string (mateconf_value_get_string (entry->value));
- else
- smart_he = get_smart_home_end_from_string (GPM_DEFAULT_SMART_HOME_END);
-
- views = gedit_app_get_views (gedit_app_get_default ());
- l = views;
-
- while (l != NULL)
- {
- gtk_source_view_set_smart_home_end (GTK_SOURCE_VIEW (l->data),
- smart_he);
-
- l = l->next;
- }
-
- g_list_free (views);
- }
-}
-
-static void
-gedit_prefs_manager_syntax_hl_enable_changed (MateConfClient *client,
- guint cnxn_id,
- MateConfEntry *entry,
- gpointer user_data)
-{
- gedit_debug (DEBUG_PREFS);
-
- g_return_if_fail (entry->key != NULL);
- g_return_if_fail (entry->value != NULL);
-
- if (strcmp (entry->key, GPM_SYNTAX_HL_ENABLE) == 0)
- {
- gboolean enable;
- GList *docs;
- GList *l;
- const GList *windows;
-
- if (entry->value->type == MATECONF_VALUE_BOOL)
- enable = mateconf_value_get_bool (entry->value);
- else
- enable = GPM_DEFAULT_SYNTAX_HL_ENABLE;
-
- docs = gedit_app_get_documents (gedit_app_get_default ());
- l = docs;
-
- while (l != NULL)
- {
- g_return_if_fail (GTK_IS_SOURCE_BUFFER (l->data));
-
- gtk_source_buffer_set_highlight_syntax (GTK_SOURCE_BUFFER (l->data),
- enable);
-
- l = l->next;
- }
-
- g_list_free (docs);
-
- /* update the sensitivity of the Higlight Mode menu item */
- windows = gedit_app_get_windows (gedit_app_get_default ());
- while (windows != NULL)
- {
- GtkUIManager *ui;
- GtkAction *a;
-
- ui = gedit_window_get_ui_manager (GEDIT_WINDOW (windows->data));
-
- a = gtk_ui_manager_get_action (ui,
- "/MenuBar/ViewMenu/ViewHighlightModeMenu");
-
- gtk_action_set_sensitive (a, enable);
-
- windows = g_list_next (windows);
- }
- }
-}
-
-static void
-gedit_prefs_manager_search_hl_enable_changed (MateConfClient *client,
- guint cnxn_id,
- MateConfEntry *entry,
- gpointer user_data)
-{
- gedit_debug (DEBUG_PREFS);
-
- g_return_if_fail (entry->key != NULL);
- g_return_if_fail (entry->value != NULL);
-
- if (strcmp (entry->key, GPM_SEARCH_HIGHLIGHTING_ENABLE) == 0)
- {
- gboolean enable;
- GList *docs;
- GList *l;
-
- if (entry->value->type == MATECONF_VALUE_BOOL)
- enable = mateconf_value_get_bool (entry->value);
- else
- enable = GPM_DEFAULT_SEARCH_HIGHLIGHTING_ENABLE;
-
- docs = gedit_app_get_documents (gedit_app_get_default ());
- l = docs;
-
- while (l != NULL)
- {
- g_return_if_fail (GEDIT_IS_DOCUMENT (l->data));
-
- gedit_document_set_enable_search_highlighting (GEDIT_DOCUMENT (l->data),
- enable);
-
- l = l->next;
- }
-
- g_list_free (docs);
- }
-}
-
-static void
-gedit_prefs_manager_source_style_scheme_changed (MateConfClient *client,
- guint cnxn_id,
- MateConfEntry *entry,
- gpointer user_data)
-{
- gedit_debug (DEBUG_PREFS);
-
- g_return_if_fail (entry->key != NULL);
- g_return_if_fail (entry->value != NULL);
-
- if (strcmp (entry->key, GPM_SOURCE_STYLE_SCHEME) == 0)
- {
- static gchar *old_scheme = NULL;
- const gchar *scheme;
- GtkSourceStyleScheme *style;
- GList *docs;
- GList *l;
-
- if (entry->value->type == MATECONF_VALUE_STRING)
- scheme = mateconf_value_get_string (entry->value);
- else
- scheme = GPM_DEFAULT_SOURCE_STYLE_SCHEME;
-
- if (old_scheme != NULL && (strcmp (scheme, old_scheme) == 0))
- return;
-
- g_free (old_scheme);
- old_scheme = g_strdup (scheme);
-
- style = gtk_source_style_scheme_manager_get_scheme (
- gedit_get_style_scheme_manager (),
- scheme);
-
- if (style == NULL)
- {
- g_warning ("Default style scheme '%s' not found, falling back to 'classic'", scheme);
-
- style = gtk_source_style_scheme_manager_get_scheme (
- gedit_get_style_scheme_manager (),
- "classic");
-
- if (style == NULL)
- {
- g_warning ("Style scheme 'classic' cannot be found, check your GtkSourceView installation.");
- return;
- }
- }
-
- docs = gedit_app_get_documents (gedit_app_get_default ());
- for (l = docs; l != NULL; l = l->next)
- {
- g_return_if_fail (GTK_IS_SOURCE_BUFFER (l->data));
-
- gtk_source_buffer_set_style_scheme (GTK_SOURCE_BUFFER (l->data),
- style);
- }
-
- g_list_free (docs);
- }
-}
-
-static void
-gedit_prefs_manager_max_recents_changed (MateConfClient *client,
- guint cnxn_id,
- MateConfEntry *entry,
- gpointer user_data)
-{
- gedit_debug (DEBUG_PREFS);
-
- g_return_if_fail (entry->key != NULL);
- g_return_if_fail (entry->value != NULL);
-
- if (strcmp (entry->key, GPM_MAX_RECENTS) == 0)
- {
- const GList *windows;
- gint max;
-
- if (entry->value->type == MATECONF_VALUE_INT)
- {
- max = mateconf_value_get_int (entry->value);
-
- if (max < 0)
- max = GPM_DEFAULT_MAX_RECENTS;
- }
- else
- max = GPM_DEFAULT_MAX_RECENTS;
-
- windows = gedit_app_get_windows (gedit_app_get_default ());
- while (windows != NULL)
- {
- GeditWindow *w = windows->data;
-
- gtk_recent_chooser_set_limit (GTK_RECENT_CHOOSER (w->priv->toolbar_recent_menu),
- max);
-
- windows = g_list_next (windows);
- }
-
- /* FIXME: we have no way at the moment to trigger the
- * update of the inline recents in the File menu */
- }
-}
-
-static void
-gedit_prefs_manager_auto_save_changed (MateConfClient *client,
- guint cnxn_id,
- MateConfEntry *entry,
- gpointer user_data)
-{
- GList *docs;
- GList *l;
-
- gedit_debug (DEBUG_PREFS);
-
- g_return_if_fail (entry->key != NULL);
- g_return_if_fail (entry->value != NULL);
-
- if (strcmp (entry->key, GPM_AUTO_SAVE) == 0)
- {
- gboolean auto_save;
-
- if (entry->value->type == MATECONF_VALUE_BOOL)
- auto_save = mateconf_value_get_bool (entry->value);
- else
- auto_save = GPM_DEFAULT_AUTO_SAVE;
-
- docs = gedit_app_get_documents (gedit_app_get_default ());
- l = docs;
-
- while (l != NULL)
- {
- GeditDocument *doc = GEDIT_DOCUMENT (l->data);
- GeditTab *tab = gedit_tab_get_from_document (doc);
-
- gedit_tab_set_auto_save_enabled (tab, auto_save);
-
- l = l->next;
- }
-
- g_list_free (docs);
- }
- else if (strcmp (entry->key, GPM_AUTO_SAVE_INTERVAL) == 0)
- {
- gint auto_save_interval;
-
- if (entry->value->type == MATECONF_VALUE_INT)
- {
- auto_save_interval = mateconf_value_get_int (entry->value);
-
- if (auto_save_interval <= 0)
- auto_save_interval = GPM_DEFAULT_AUTO_SAVE_INTERVAL;
- }
- else
- auto_save_interval = GPM_DEFAULT_AUTO_SAVE_INTERVAL;
-
- docs = gedit_app_get_documents (gedit_app_get_default ());
- l = docs;
-
- while (l != NULL)
- {
- GeditDocument *doc = GEDIT_DOCUMENT (l->data);
- GeditTab *tab = gedit_tab_get_from_document (doc);
-
- gedit_tab_set_auto_save_interval (tab, auto_save_interval);
-
- l = l->next;
- }
-
- g_list_free (docs);
- }
-}
-
-static void
-gedit_prefs_manager_active_plugins_changed (MateConfClient *client,
- guint cnxn_id,
- MateConfEntry *entry,
- gpointer user_data)
-{
- gedit_debug (DEBUG_PREFS);
-
- g_return_if_fail (entry->key != NULL);
- g_return_if_fail (entry->value != NULL);
-
- if (strcmp (entry->key, GPM_ACTIVE_PLUGINS) == 0)
- {
- if ((entry->value->type == MATECONF_VALUE_LIST) &&
- (mateconf_value_get_list_type (entry->value) == MATECONF_VALUE_STRING))
- {
- GeditPluginsEngine *engine;
-
- engine = gedit_plugins_engine_get_default ();
-
- gedit_plugins_engine_active_plugins_changed (engine);
- }
- }
-}
-
-static void
-gedit_prefs_manager_lockdown_changed (MateConfClient *client,
- guint cnxn_id,
- MateConfEntry *entry,
- gpointer user_data)
-{
- GeditApp *app;
- gboolean locked;
-
- gedit_debug (DEBUG_PREFS);
-
- g_return_if_fail (entry->key != NULL);
- g_return_if_fail (entry->value != NULL);
-
- if (entry->value->type == MATECONF_VALUE_BOOL)
- locked = mateconf_value_get_bool (entry->value);
- else
- locked = FALSE;
-
- app = gedit_app_get_default ();
-
- if (strcmp (entry->key, GPM_LOCKDOWN_COMMAND_LINE) == 0)
- _gedit_app_set_lockdown_bit (app,
- GEDIT_LOCKDOWN_COMMAND_LINE,
- locked);
-
- else if (strcmp (entry->key, GPM_LOCKDOWN_PRINTING) == 0)
- _gedit_app_set_lockdown_bit (app,
- GEDIT_LOCKDOWN_PRINTING,
- locked);
-
- else if (strcmp (entry->key, GPM_LOCKDOWN_PRINT_SETUP) == 0)
- _gedit_app_set_lockdown_bit (app,
- GEDIT_LOCKDOWN_PRINT_SETUP,
- locked);
-
- else if (strcmp (entry->key, GPM_LOCKDOWN_SAVE_TO_DISK) == 0)
- _gedit_app_set_lockdown_bit (app,
- GEDIT_LOCKDOWN_SAVE_TO_DISK,
- locked);
-}
diff --git a/gedit/gedit-prefs-manager-app.h b/gedit/gedit-prefs-manager-app.h
deleted file mode 100755
index 592b643f..00000000
--- a/gedit/gedit-prefs-manager-app.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * gedit-prefs-manager-app.h
- * This file is part of gedit
- *
- * Copyright (C) 2002-2005 Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2002-2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- *
- */
-
-#ifndef __GEDIT_PREFS_MANAGER_APP_H__
-#define __GEDIT_PREFS_MANAGER_APP_H__
-
-#include <glib.h>
-#include <gedit/gedit-prefs-manager.h>
-
-/** LIFE CYCLE MANAGEMENT FUNCTIONS **/
-
-gboolean gedit_prefs_manager_app_init (void);
-
-/* This function must be called before exiting gedit */
-void gedit_prefs_manager_app_shutdown (void);
-
-
-/* Window state */
-gint gedit_prefs_manager_get_window_state (void);
-void gedit_prefs_manager_set_window_state (gint ws);
-gboolean gedit_prefs_manager_window_state_can_set (void);
-
-/* Window size */
-void gedit_prefs_manager_get_window_size (gint *width,
- gint *height);
-void gedit_prefs_manager_get_default_window_size (gint *width,
- gint *height);
-void gedit_prefs_manager_set_window_size (gint width,
- gint height);
-gboolean gedit_prefs_manager_window_size_can_set (void);
-
-/* Side panel */
-gint gedit_prefs_manager_get_side_panel_size (void);
-gint gedit_prefs_manager_get_default_side_panel_size(void);
-void gedit_prefs_manager_set_side_panel_size (gint ps);
-gboolean gedit_prefs_manager_side_panel_size_can_set (void);
-gint gedit_prefs_manager_get_side_panel_active_page (void);
-void gedit_prefs_manager_set_side_panel_active_page (gint id);
-gboolean gedit_prefs_manager_side_panel_active_page_can_set (void);
-
-/* Bottom panel */
-gint gedit_prefs_manager_get_bottom_panel_size (void);
-gint gedit_prefs_manager_get_default_bottom_panel_size(void);
-void gedit_prefs_manager_set_bottom_panel_size (gint ps);
-gboolean gedit_prefs_manager_bottom_panel_size_can_set (void);
-gint gedit_prefs_manager_get_bottom_panel_active_page (void);
-void gedit_prefs_manager_set_bottom_panel_active_page (gint id);
-gboolean gedit_prefs_manager_bottom_panel_active_page_can_set (void);
-
-/* File filter */
-gint gedit_prefs_manager_get_active_file_filter (void);
-void gedit_prefs_manager_set_active_file_filter (gint id);
-gboolean gedit_prefs_manager_active_file_filter_can_set (void);
-
-
-#endif /* __GEDIT_PREFS_MANAGER_APP_H__ */
diff --git a/gedit/gedit-prefs-manager-private.h b/gedit/gedit-prefs-manager-private.h
deleted file mode 100755
index 7a8e94a5..00000000
--- a/gedit/gedit-prefs-manager-private.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * gedit-prefs-manager-private.h
- * This file is part of gedit
- *
- * Copyright (C) 2002 Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2002. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- */
-
-#ifndef __GEDIT_PREFS_MANAGER_PRIVATE_H__
-#define __GEDIT_PREFS_MANAGER_PRIVATE_H__
-
-#include <mateconf/mateconf-client.h>
-
-typedef struct _GeditPrefsManager GeditPrefsManager;
-
-struct _GeditPrefsManager {
- MateConfClient *mateconf_client;
-};
-
-extern GeditPrefsManager *gedit_prefs_manager;
-
-#endif /* __GEDIT_PREFS_MANAGER_PRIVATE_H__ */
-
-
diff --git a/gedit/gedit-prefs-manager.c b/gedit/gedit-prefs-manager.c
deleted file mode 100755
index c606e748..00000000
--- a/gedit/gedit-prefs-manager.c
+++ /dev/null
@@ -1,1241 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * gedit-prefs-manager.c
- * This file is part of gedit
- *
- * Copyright (C) 2002 Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2002. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <string.h>
-
-#include <glib/gi18n.h>
-#include <mateconf/mateconf-value.h>
-
-#include "gedit-prefs-manager.h"
-#include "gedit-prefs-manager-private.h"
-#include "gedit-debug.h"
-#include "gedit-encodings.h"
-#include "gedit-utils.h"
-
-#define DEFINE_BOOL_PREF(name, key, def) gboolean \
-gedit_prefs_manager_get_ ## name (void) \
-{ \
- gedit_debug (DEBUG_PREFS); \
- \
- return gedit_prefs_manager_get_bool (key, \
- (def)); \
-} \
- \
-void \
-gedit_prefs_manager_set_ ## name (gboolean v) \
-{ \
- gedit_debug (DEBUG_PREFS); \
- \
- gedit_prefs_manager_set_bool (key, \
- v); \
-} \
- \
-gboolean \
-gedit_prefs_manager_ ## name ## _can_set (void) \
-{ \
- gedit_debug (DEBUG_PREFS); \
- \
- return gedit_prefs_manager_key_is_writable (key); \
-}
-
-
-
-#define DEFINE_INT_PREF(name, key, def) gint \
-gedit_prefs_manager_get_ ## name (void) \
-{ \
- gedit_debug (DEBUG_PREFS); \
- \
- return gedit_prefs_manager_get_int (key, \
- (def)); \
-} \
- \
-void \
-gedit_prefs_manager_set_ ## name (gint v) \
-{ \
- gedit_debug (DEBUG_PREFS); \
- \
- gedit_prefs_manager_set_int (key, \
- v); \
-} \
- \
-gboolean \
-gedit_prefs_manager_ ## name ## _can_set (void) \
-{ \
- gedit_debug (DEBUG_PREFS); \
- \
- return gedit_prefs_manager_key_is_writable (key); \
-}
-
-
-
-#define DEFINE_STRING_PREF(name, key, def) gchar* \
-gedit_prefs_manager_get_ ## name (void) \
-{ \
- gedit_debug (DEBUG_PREFS); \
- \
- return gedit_prefs_manager_get_string (key, \
- def); \
-} \
- \
-void \
-gedit_prefs_manager_set_ ## name (const gchar* v) \
-{ \
- gedit_debug (DEBUG_PREFS); \
- \
- gedit_prefs_manager_set_string (key, \
- v); \
-} \
- \
-gboolean \
-gedit_prefs_manager_ ## name ## _can_set (void) \
-{ \
- gedit_debug (DEBUG_PREFS); \
- \
- return gedit_prefs_manager_key_is_writable (key); \
-}
-
-
-GeditPrefsManager *gedit_prefs_manager = NULL;
-
-
-static GtkWrapMode get_wrap_mode_from_string (const gchar* str);
-
-static gboolean mateconf_client_get_bool_with_default (MateConfClient* client,
- const gchar* key,
- gboolean def,
- GError** err);
-
-static gchar *mateconf_client_get_string_with_default (MateConfClient* client,
- const gchar* key,
- const gchar* def,
- GError** err);
-
-static gint mateconf_client_get_int_with_default (MateConfClient* client,
- const gchar* key,
- gint def,
- GError** err);
-
-static gboolean gedit_prefs_manager_get_bool (const gchar* key,
- gboolean def);
-
-static gint gedit_prefs_manager_get_int (const gchar* key,
- gint def);
-
-static gchar *gedit_prefs_manager_get_string (const gchar* key,
- const gchar* def);
-
-
-gboolean
-gedit_prefs_manager_init (void)
-{
- gedit_debug (DEBUG_PREFS);
-
- if (gedit_prefs_manager == NULL)
- {
- MateConfClient *mateconf_client;
-
- mateconf_client = mateconf_client_get_default ();
- if (mateconf_client == NULL)
- {
- g_warning (_("Cannot initialize preferences manager."));
- return FALSE;
- }
-
- gedit_prefs_manager = g_new0 (GeditPrefsManager, 1);
-
- gedit_prefs_manager->mateconf_client = mateconf_client;
- }
-
- if (gedit_prefs_manager->mateconf_client == NULL)
- {
- g_free (gedit_prefs_manager);
- gedit_prefs_manager = NULL;
- }
-
- return gedit_prefs_manager != NULL;
-
-}
-
-void
-gedit_prefs_manager_shutdown (void)
-{
- gedit_debug (DEBUG_PREFS);
-
- g_return_if_fail (gedit_prefs_manager != NULL);
-
- g_object_unref (gedit_prefs_manager->mateconf_client);
- gedit_prefs_manager->mateconf_client = NULL;
-}
-
-static gboolean
-gedit_prefs_manager_get_bool (const gchar* key, gboolean def)
-{
- gedit_debug (DEBUG_PREFS);
-
- g_return_val_if_fail (gedit_prefs_manager != NULL, def);
- g_return_val_if_fail (gedit_prefs_manager->mateconf_client != NULL, def);
-
- return mateconf_client_get_bool_with_default (gedit_prefs_manager->mateconf_client,
- key,
- def,
- NULL);
-}
-
-static gint
-gedit_prefs_manager_get_int (const gchar* key, gint def)
-{
- gedit_debug (DEBUG_PREFS);
-
- g_return_val_if_fail (gedit_prefs_manager != NULL, def);
- g_return_val_if_fail (gedit_prefs_manager->mateconf_client != NULL, def);
-
- return mateconf_client_get_int_with_default (gedit_prefs_manager->mateconf_client,
- key,
- def,
- NULL);
-}
-
-static gchar *
-gedit_prefs_manager_get_string (const gchar* key, const gchar* def)
-{
- gedit_debug (DEBUG_PREFS);
-
- g_return_val_if_fail (gedit_prefs_manager != NULL,
- def ? g_strdup (def) : NULL);
- g_return_val_if_fail (gedit_prefs_manager->mateconf_client != NULL,
- def ? g_strdup (def) : NULL);
-
- return mateconf_client_get_string_with_default (gedit_prefs_manager->mateconf_client,
- key,
- def,
- NULL);
-}
-
-static void
-gedit_prefs_manager_set_bool (const gchar* key, gboolean value)
-{
- gedit_debug (DEBUG_PREFS);
-
- g_return_if_fail (gedit_prefs_manager != NULL);
- g_return_if_fail (gedit_prefs_manager->mateconf_client != NULL);
- g_return_if_fail (mateconf_client_key_is_writable (
- gedit_prefs_manager->mateconf_client, key, NULL));
-
- mateconf_client_set_bool (gedit_prefs_manager->mateconf_client, key, value, NULL);
-}
-
-static void
-gedit_prefs_manager_set_int (const gchar* key, gint value)
-{
- gedit_debug (DEBUG_PREFS);
-
- g_return_if_fail (gedit_prefs_manager != NULL);
- g_return_if_fail (gedit_prefs_manager->mateconf_client != NULL);
- g_return_if_fail (mateconf_client_key_is_writable (
- gedit_prefs_manager->mateconf_client, key, NULL));
-
- mateconf_client_set_int (gedit_prefs_manager->mateconf_client, key, value, NULL);
-}
-
-static void
-gedit_prefs_manager_set_string (const gchar* key, const gchar* value)
-{
- gedit_debug (DEBUG_PREFS);
-
- g_return_if_fail (value != NULL);
-
- g_return_if_fail (gedit_prefs_manager != NULL);
- g_return_if_fail (gedit_prefs_manager->mateconf_client != NULL);
- g_return_if_fail (mateconf_client_key_is_writable (
- gedit_prefs_manager->mateconf_client, key, NULL));
-
- mateconf_client_set_string (gedit_prefs_manager->mateconf_client, key, value, NULL);
-}
-
-static gboolean
-gedit_prefs_manager_key_is_writable (const gchar* key)
-{
- gedit_debug (DEBUG_PREFS);
-
- g_return_val_if_fail (gedit_prefs_manager != NULL, FALSE);
- g_return_val_if_fail (gedit_prefs_manager->mateconf_client != NULL, FALSE);
-
- return mateconf_client_key_is_writable (gedit_prefs_manager->mateconf_client, key, NULL);
-}
-
-/* Use default font */
-DEFINE_BOOL_PREF (use_default_font,
- GPM_USE_DEFAULT_FONT,
- GPM_DEFAULT_USE_DEFAULT_FONT)
-
-/* Editor font */
-DEFINE_STRING_PREF (editor_font,
- GPM_EDITOR_FONT,
- GPM_DEFAULT_EDITOR_FONT)
-
-/* System font */
-gchar *
-gedit_prefs_manager_get_system_font (void)
-{
- gedit_debug (DEBUG_PREFS);
-
- return gedit_prefs_manager_get_string (GPM_SYSTEM_FONT,
- GPM_DEFAULT_SYSTEM_FONT);
-}
-
-/* Create backup copy */
-DEFINE_BOOL_PREF (create_backup_copy,
- GPM_CREATE_BACKUP_COPY,
- GPM_DEFAULT_CREATE_BACKUP_COPY)
-
-/* Auto save */
-DEFINE_BOOL_PREF (auto_save,
- GPM_AUTO_SAVE,
- GPM_DEFAULT_AUTO_SAVE)
-
-/* Auto save interval */
-DEFINE_INT_PREF (auto_save_interval,
- GPM_AUTO_SAVE_INTERVAL,
- GPM_DEFAULT_AUTO_SAVE_INTERVAL)
-
-
-/* Undo actions limit: if < 1 then no limits */
-DEFINE_INT_PREF (undo_actions_limit,
- GPM_UNDO_ACTIONS_LIMIT,
- GPM_DEFAULT_UNDO_ACTIONS_LIMIT)
-
-static GtkWrapMode
-get_wrap_mode_from_string (const gchar* str)
-{
- GtkWrapMode res;
-
- g_return_val_if_fail (str != NULL, GTK_WRAP_WORD);
-
- if (strcmp (str, "GTK_WRAP_NONE") == 0)
- res = GTK_WRAP_NONE;
- else
- {
- if (strcmp (str, "GTK_WRAP_CHAR") == 0)
- res = GTK_WRAP_CHAR;
- else
- res = GTK_WRAP_WORD;
- }
-
- return res;
-}
-
-/* Wrap mode */
-GtkWrapMode
-gedit_prefs_manager_get_wrap_mode (void)
-{
- gchar *str;
- GtkWrapMode res;
-
- gedit_debug (DEBUG_PREFS);
-
- str = gedit_prefs_manager_get_string (GPM_WRAP_MODE,
- GPM_DEFAULT_WRAP_MODE);
-
- res = get_wrap_mode_from_string (str);
-
- g_free (str);
-
- return res;
-}
-
-void
-gedit_prefs_manager_set_wrap_mode (GtkWrapMode wp)
-{
- const gchar * str;
-
- gedit_debug (DEBUG_PREFS);
-
- switch (wp)
- {
- case GTK_WRAP_NONE:
- str = "GTK_WRAP_NONE";
- break;
-
- case GTK_WRAP_CHAR:
- str = "GTK_WRAP_CHAR";
- break;
-
- default: /* GTK_WRAP_WORD */
- str = "GTK_WRAP_WORD";
- }
-
- gedit_prefs_manager_set_string (GPM_WRAP_MODE,
- str);
-}
-
-gboolean
-gedit_prefs_manager_wrap_mode_can_set (void)
-{
- gedit_debug (DEBUG_PREFS);
-
- return gedit_prefs_manager_key_is_writable (GPM_WRAP_MODE);
-}
-
-
-/* Tabs size */
-DEFINE_INT_PREF (tabs_size,
- GPM_TABS_SIZE,
- GPM_DEFAULT_TABS_SIZE)
-
-/* Insert spaces */
-DEFINE_BOOL_PREF (insert_spaces,
- GPM_INSERT_SPACES,
- GPM_DEFAULT_INSERT_SPACES)
-
-/* Auto indent */
-DEFINE_BOOL_PREF (auto_indent,
- GPM_AUTO_INDENT,
- GPM_DEFAULT_AUTO_INDENT)
-
-/* Display line numbers */
-DEFINE_BOOL_PREF (display_line_numbers,
- GPM_DISPLAY_LINE_NUMBERS,
- GPM_DEFAULT_DISPLAY_LINE_NUMBERS)
-
-/* Toolbar visibility */
-DEFINE_BOOL_PREF (toolbar_visible,
- GPM_TOOLBAR_VISIBLE,
- GPM_DEFAULT_TOOLBAR_VISIBLE)
-
-
-/* Toolbar suttons style */
-GeditToolbarSetting
-gedit_prefs_manager_get_toolbar_buttons_style (void)
-{
- gchar *str;
- GeditToolbarSetting res;
-
- gedit_debug (DEBUG_PREFS);
-
- str = gedit_prefs_manager_get_string (GPM_TOOLBAR_BUTTONS_STYLE,
- GPM_DEFAULT_TOOLBAR_BUTTONS_STYLE);
-
- if (strcmp (str, "GEDIT_TOOLBAR_ICONS") == 0)
- res = GEDIT_TOOLBAR_ICONS;
- else
- {
- if (strcmp (str, "GEDIT_TOOLBAR_ICONS_AND_TEXT") == 0)
- res = GEDIT_TOOLBAR_ICONS_AND_TEXT;
- else
- {
- if (strcmp (str, "GEDIT_TOOLBAR_ICONS_BOTH_HORIZ") == 0)
- res = GEDIT_TOOLBAR_ICONS_BOTH_HORIZ;
- else
- res = GEDIT_TOOLBAR_SYSTEM;
- }
- }
-
- g_free (str);
-
- return res;
-}
-
-void
-gedit_prefs_manager_set_toolbar_buttons_style (GeditToolbarSetting tbs)
-{
- const gchar * str;
-
- gedit_debug (DEBUG_PREFS);
-
- switch (tbs)
- {
- case GEDIT_TOOLBAR_ICONS:
- str = "GEDIT_TOOLBAR_ICONS";
- break;
-
- case GEDIT_TOOLBAR_ICONS_AND_TEXT:
- str = "GEDIT_TOOLBAR_ICONS_AND_TEXT";
- break;
-
- case GEDIT_TOOLBAR_ICONS_BOTH_HORIZ:
- str = "GEDIT_TOOLBAR_ICONS_BOTH_HORIZ";
- break;
- default: /* GEDIT_TOOLBAR_SYSTEM */
- str = "GEDIT_TOOLBAR_SYSTEM";
- }
-
- gedit_prefs_manager_set_string (GPM_TOOLBAR_BUTTONS_STYLE,
- str);
-
-}
-
-gboolean
-gedit_prefs_manager_toolbar_buttons_style_can_set (void)
-{
- gedit_debug (DEBUG_PREFS);
-
- return gedit_prefs_manager_key_is_writable (GPM_TOOLBAR_BUTTONS_STYLE);
-
-}
-
-/* Statusbar visiblity */
-DEFINE_BOOL_PREF (statusbar_visible,
- GPM_STATUSBAR_VISIBLE,
- GPM_DEFAULT_STATUSBAR_VISIBLE)
-
-/* Side Pane visiblity */
-DEFINE_BOOL_PREF (side_pane_visible,
- GPM_SIDE_PANE_VISIBLE,
- GPM_DEFAULT_SIDE_PANE_VISIBLE)
-
-/* Bottom Panel visiblity */
-DEFINE_BOOL_PREF (bottom_panel_visible,
- GPM_BOTTOM_PANEL_VISIBLE,
- GPM_DEFAULT_BOTTOM_PANEL_VISIBLE)
-
-/* Print syntax highlighting */
-DEFINE_BOOL_PREF (print_syntax_hl,
- GPM_PRINT_SYNTAX,
- GPM_DEFAULT_PRINT_SYNTAX)
-
-/* Print header */
-DEFINE_BOOL_PREF (print_header,
- GPM_PRINT_HEADER,
- GPM_DEFAULT_PRINT_HEADER)
-
-
-/* Print Wrap mode */
-GtkWrapMode
-gedit_prefs_manager_get_print_wrap_mode (void)
-{
- gchar *str;
- GtkWrapMode res;
-
- gedit_debug (DEBUG_PREFS);
-
- str = gedit_prefs_manager_get_string (GPM_PRINT_WRAP_MODE,
- GPM_DEFAULT_PRINT_WRAP_MODE);
-
- if (strcmp (str, "GTK_WRAP_NONE") == 0)
- res = GTK_WRAP_NONE;
- else
- {
- if (strcmp (str, "GTK_WRAP_WORD") == 0)
- res = GTK_WRAP_WORD;
- else
- res = GTK_WRAP_CHAR;
- }
-
- g_free (str);
-
- return res;
-}
-
-void
-gedit_prefs_manager_set_print_wrap_mode (GtkWrapMode pwp)
-{
- const gchar *str;
-
- gedit_debug (DEBUG_PREFS);
-
- switch (pwp)
- {
- case GTK_WRAP_NONE:
- str = "GTK_WRAP_NONE";
- break;
-
- case GTK_WRAP_WORD:
- str = "GTK_WRAP_WORD";
- break;
-
- default: /* GTK_WRAP_CHAR */
- str = "GTK_WRAP_CHAR";
- }
-
- gedit_prefs_manager_set_string (GPM_PRINT_WRAP_MODE, str);
-}
-
-gboolean
-gedit_prefs_manager_print_wrap_mode_can_set (void)
-{
- gedit_debug (DEBUG_PREFS);
-
- return gedit_prefs_manager_key_is_writable (GPM_PRINT_WRAP_MODE);
-}
-
-/* Print line numbers */
-DEFINE_INT_PREF (print_line_numbers,
- GPM_PRINT_LINE_NUMBERS,
- GPM_DEFAULT_PRINT_LINE_NUMBERS)
-
-/* Printing fonts */
-DEFINE_STRING_PREF (print_font_body,
- GPM_PRINT_FONT_BODY,
- GPM_DEFAULT_PRINT_FONT_BODY)
-
-const gchar *
-gedit_prefs_manager_get_default_print_font_body (void)
-{
- return GPM_DEFAULT_PRINT_FONT_BODY;
-}
-
-DEFINE_STRING_PREF (print_font_header,
- GPM_PRINT_FONT_HEADER,
- GPM_DEFAULT_PRINT_FONT_HEADER)
-
-const gchar *
-gedit_prefs_manager_get_default_print_font_header (void)
-{
- return GPM_DEFAULT_PRINT_FONT_HEADER;
-}
-
-DEFINE_STRING_PREF (print_font_numbers,
- GPM_PRINT_FONT_NUMBERS,
- GPM_DEFAULT_PRINT_FONT_NUMBERS)
-
-const gchar *
-gedit_prefs_manager_get_default_print_font_numbers (void)
-{
- return GPM_DEFAULT_PRINT_FONT_NUMBERS;
-}
-
-/* Max number of files in "Recent Files" menu.
- * This is configurable only using mateconftool or mateconf-editor
- */
-gint
-gedit_prefs_manager_get_max_recents (void)
-{
- gedit_debug (DEBUG_PREFS);
-
- return gedit_prefs_manager_get_int (GPM_MAX_RECENTS,
- GPM_DEFAULT_MAX_RECENTS);
-
-}
-
-/* Encodings */
-
-static gboolean
-data_exists (GSList *list,
- const gpointer data)
-{
- while (list != NULL)
- {
- if (list->data == data)
- return TRUE;
-
- list = g_slist_next (list);
- }
-
- return FALSE;
-}
-
-GSList *
-gedit_prefs_manager_get_auto_detected_encodings (void)
-{
- GSList *strings;
- GSList *res = NULL;
-
- gedit_debug (DEBUG_PREFS);
-
- g_return_val_if_fail (gedit_prefs_manager != NULL, NULL);
- g_return_val_if_fail (gedit_prefs_manager->mateconf_client != NULL, NULL);
-
- strings = mateconf_client_get_list (gedit_prefs_manager->mateconf_client,
- GPM_AUTO_DETECTED_ENCODINGS,
- MATECONF_VALUE_STRING,
- NULL);
-
- if (strings == NULL)
- {
- gint i = 0;
- const gchar* s[] = GPM_DEFAULT_AUTO_DETECTED_ENCODINGS;
-
- while (s[i] != NULL)
- {
- strings = g_slist_prepend (strings, g_strdup (s[i]));
-
- ++i;
- }
-
-
- strings = g_slist_reverse (strings);
- }
-
- if (strings != NULL)
- {
- GSList *tmp;
- const GeditEncoding *enc;
-
- tmp = strings;
-
- while (tmp)
- {
- const char *charset = tmp->data;
-
- if (strcmp (charset, "CURRENT") == 0)
- g_get_charset (&charset);
-
- g_return_val_if_fail (charset != NULL, NULL);
- enc = gedit_encoding_get_from_charset (charset);
-
- if (enc != NULL)
- {
- if (!data_exists (res, (gpointer)enc))
- res = g_slist_prepend (res, (gpointer)enc);
-
- }
-
- tmp = g_slist_next (tmp);
- }
-
- g_slist_foreach (strings, (GFunc) g_free, NULL);
- g_slist_free (strings);
-
- res = g_slist_reverse (res);
- }
-
- gedit_debug_message (DEBUG_PREFS, "Done");
-
- return res;
-}
-
-GSList *
-gedit_prefs_manager_get_shown_in_menu_encodings (void)
-{
- GSList *strings;
- GSList *res = NULL;
-
- gedit_debug (DEBUG_PREFS);
-
- g_return_val_if_fail (gedit_prefs_manager != NULL, NULL);
- g_return_val_if_fail (gedit_prefs_manager->mateconf_client != NULL, NULL);
-
- strings = mateconf_client_get_list (gedit_prefs_manager->mateconf_client,
- GPM_SHOWN_IN_MENU_ENCODINGS,
- MATECONF_VALUE_STRING,
- NULL);
-
- if (strings != NULL)
- {
- GSList *tmp;
- const GeditEncoding *enc;
-
- tmp = strings;
-
- while (tmp)
- {
- const char *charset = tmp->data;
-
- if (strcmp (charset, "CURRENT") == 0)
- g_get_charset (&charset);
-
- g_return_val_if_fail (charset != NULL, NULL);
- enc = gedit_encoding_get_from_charset (charset);
-
- if (enc != NULL)
- {
- if (!data_exists (res, (gpointer)enc))
- res = g_slist_prepend (res, (gpointer)enc);
- }
-
- tmp = g_slist_next (tmp);
- }
-
- g_slist_foreach (strings, (GFunc) g_free, NULL);
- g_slist_free (strings);
-
- res = g_slist_reverse (res);
- }
-
- return res;
-}
-
-void
-gedit_prefs_manager_set_shown_in_menu_encodings (const GSList *encs)
-{
- GSList *list = NULL;
-
- g_return_if_fail (gedit_prefs_manager != NULL);
- g_return_if_fail (gedit_prefs_manager->mateconf_client != NULL);
- g_return_if_fail (gedit_prefs_manager_shown_in_menu_encodings_can_set ());
-
- while (encs != NULL)
- {
- const GeditEncoding *enc;
- const gchar *charset;
-
- enc = (const GeditEncoding *)encs->data;
-
- charset = gedit_encoding_get_charset (enc);
- g_return_if_fail (charset != NULL);
-
- list = g_slist_prepend (list, (gpointer)charset);
-
- encs = g_slist_next (encs);
- }
-
- list = g_slist_reverse (list);
-
- mateconf_client_set_list (gedit_prefs_manager->mateconf_client,
- GPM_SHOWN_IN_MENU_ENCODINGS,
- MATECONF_VALUE_STRING,
- list,
- NULL);
-
- g_slist_free (list);
-}
-
-gboolean
-gedit_prefs_manager_shown_in_menu_encodings_can_set (void)
-{
- gedit_debug (DEBUG_PREFS);
-
- return gedit_prefs_manager_key_is_writable (GPM_SHOWN_IN_MENU_ENCODINGS);
-
-}
-
-/* Highlight current line */
-DEFINE_BOOL_PREF (highlight_current_line,
- GPM_HIGHLIGHT_CURRENT_LINE,
- GPM_DEFAULT_HIGHLIGHT_CURRENT_LINE)
-
-/* Highlight matching bracket */
-DEFINE_BOOL_PREF (bracket_matching,
- GPM_BRACKET_MATCHING,
- GPM_DEFAULT_BRACKET_MATCHING)
-
-/* Display Right Margin */
-DEFINE_BOOL_PREF (display_right_margin,
- GPM_DISPLAY_RIGHT_MARGIN,
- GPM_DEFAULT_DISPLAY_RIGHT_MARGIN)
-
-/* Right Margin Position */
-DEFINE_INT_PREF (right_margin_position,
- GPM_RIGHT_MARGIN_POSITION,
- GPM_DEFAULT_RIGHT_MARGIN_POSITION)
-
-static GtkSourceSmartHomeEndType
-get_smart_home_end_from_string (const gchar *str)
-{
- GtkSourceSmartHomeEndType res;
-
- g_return_val_if_fail (str != NULL, GTK_SOURCE_SMART_HOME_END_AFTER);
-
- if (strcmp (str, "DISABLED") == 0)
- res = GTK_SOURCE_SMART_HOME_END_DISABLED;
- else if (strcmp (str, "BEFORE") == 0)
- res = GTK_SOURCE_SMART_HOME_END_BEFORE;
- else if (strcmp (str, "ALWAYS") == 0)
- res = GTK_SOURCE_SMART_HOME_END_ALWAYS;
- else
- res = GTK_SOURCE_SMART_HOME_END_AFTER;
-
- return res;
-}
-
-GtkSourceSmartHomeEndType
-gedit_prefs_manager_get_smart_home_end (void)
-{
- gchar *str;
- GtkSourceSmartHomeEndType res;
-
- gedit_debug (DEBUG_PREFS);
-
- str = gedit_prefs_manager_get_string (GPM_SMART_HOME_END,
- GPM_DEFAULT_SMART_HOME_END);
-
- res = get_smart_home_end_from_string (str);
-
- g_free (str);
-
- return res;
-}
-
-void
-gedit_prefs_manager_set_smart_home_end (GtkSourceSmartHomeEndType smart_he)
-{
- const gchar *str;
-
- gedit_debug (DEBUG_PREFS);
-
- switch (smart_he)
- {
- case GTK_SOURCE_SMART_HOME_END_DISABLED:
- str = "DISABLED";
- break;
-
- case GTK_SOURCE_SMART_HOME_END_BEFORE:
- str = "BEFORE";
- break;
-
- case GTK_SOURCE_SMART_HOME_END_ALWAYS:
- str = "ALWAYS";
- break;
-
- default: /* GTK_SOURCE_SMART_HOME_END_AFTER */
- str = "AFTER";
- }
-
- gedit_prefs_manager_set_string (GPM_WRAP_MODE, str);
-}
-
-gboolean
-gedit_prefs_manager_smart_home_end_can_set (void)
-{
- gedit_debug (DEBUG_PREFS);
-
- return gedit_prefs_manager_key_is_writable (GPM_SMART_HOME_END);
-}
-
-/* Enable syntax highlighting */
-DEFINE_BOOL_PREF (enable_syntax_highlighting,
- GPM_SYNTAX_HL_ENABLE,
- GPM_DEFAULT_SYNTAX_HL_ENABLE)
-
-/* Enable search highlighting */
-DEFINE_BOOL_PREF (enable_search_highlighting,
- GPM_SEARCH_HIGHLIGHTING_ENABLE,
- GPM_DEFAULT_SEARCH_HIGHLIGHTING_ENABLE)
-
-/* Source style scheme */
-DEFINE_STRING_PREF (source_style_scheme,
- GPM_SOURCE_STYLE_SCHEME,
- GPM_DEFAULT_SOURCE_STYLE_SCHEME)
-
-GSList *
-gedit_prefs_manager_get_writable_vfs_schemes (void)
-{
- GSList *strings;
-
- gedit_debug (DEBUG_PREFS);
-
- g_return_val_if_fail (gedit_prefs_manager != NULL, NULL);
- g_return_val_if_fail (gedit_prefs_manager->mateconf_client != NULL, NULL);
-
- strings = mateconf_client_get_list (gedit_prefs_manager->mateconf_client,
- GPM_WRITABLE_VFS_SCHEMES,
- MATECONF_VALUE_STRING,
- NULL);
-
- if (strings == NULL)
- {
- gint i = 0;
- const gchar* s[] = GPM_DEFAULT_WRITABLE_VFS_SCHEMES;
-
- while (s[i] != NULL)
- {
- strings = g_slist_prepend (strings, g_strdup (s[i]));
-
- ++i;
- }
-
- strings = g_slist_reverse (strings);
- }
-
- /* The 'file' scheme is writable by default. */
- strings = g_slist_prepend (strings, g_strdup ("file"));
-
- gedit_debug_message (DEBUG_PREFS, "Done");
-
- return strings;
-}
-
-gboolean
-gedit_prefs_manager_get_restore_cursor_position (void)
-{
- gedit_debug (DEBUG_PREFS);
-
- return gedit_prefs_manager_get_bool (GPM_RESTORE_CURSOR_POSITION,
- GPM_DEFAULT_RESTORE_CURSOR_POSITION);
-}
-
-/* Plugins: we just store/return a list of strings, all the magic has to
- * happen in the plugin engine */
-
-GSList *
-gedit_prefs_manager_get_active_plugins (void)
-{
- GSList *plugins;
-
- gedit_debug (DEBUG_PREFS);
-
- g_return_val_if_fail (gedit_prefs_manager != NULL, NULL);
- g_return_val_if_fail (gedit_prefs_manager->mateconf_client != NULL, NULL);
-
- plugins = mateconf_client_get_list (gedit_prefs_manager->mateconf_client,
- GPM_ACTIVE_PLUGINS,
- MATECONF_VALUE_STRING,
- NULL);
-
- return plugins;
-}
-
-void
-gedit_prefs_manager_set_active_plugins (const GSList *plugins)
-{
- g_return_if_fail (gedit_prefs_manager != NULL);
- g_return_if_fail (gedit_prefs_manager->mateconf_client != NULL);
- g_return_if_fail (gedit_prefs_manager_active_plugins_can_set ());
-
- mateconf_client_set_list (gedit_prefs_manager->mateconf_client,
- GPM_ACTIVE_PLUGINS,
- MATECONF_VALUE_STRING,
- (GSList *) plugins,
- NULL);
-}
-
-gboolean
-gedit_prefs_manager_active_plugins_can_set (void)
-{
- gedit_debug (DEBUG_PREFS);
-
- return gedit_prefs_manager_key_is_writable (GPM_ACTIVE_PLUGINS);
-}
-
-/* Global Lockdown */
-
-GeditLockdownMask
-gedit_prefs_manager_get_lockdown (void)
-{
- guint lockdown = 0;
-
- if (gedit_prefs_manager_get_bool (GPM_LOCKDOWN_COMMAND_LINE, FALSE))
- lockdown |= GEDIT_LOCKDOWN_COMMAND_LINE;
-
- if (gedit_prefs_manager_get_bool (GPM_LOCKDOWN_PRINTING, FALSE))
- lockdown |= GEDIT_LOCKDOWN_PRINTING;
-
- if (gedit_prefs_manager_get_bool (GPM_LOCKDOWN_PRINT_SETUP, FALSE))
- lockdown |= GEDIT_LOCKDOWN_PRINT_SETUP;
-
- if (gedit_prefs_manager_get_bool (GPM_LOCKDOWN_SAVE_TO_DISK, FALSE))
- lockdown |= GEDIT_LOCKDOWN_SAVE_TO_DISK;
-
- return lockdown;
-}
-
-/* The following functions are taken from mateconf-client.c
- * and partially modified.
- * The licensing terms on these is:
- *
- *
- * MateConf
- * Copyright (C) 1999, 2000, 2000 Red Hat Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-
-static const gchar*
-mateconf_value_type_to_string(MateConfValueType type)
-{
- switch (type)
- {
- case MATECONF_VALUE_INT:
- return "int";
- break;
- case MATECONF_VALUE_STRING:
- return "string";
- break;
- case MATECONF_VALUE_FLOAT:
- return "float";
- break;
- case MATECONF_VALUE_BOOL:
- return "bool";
- break;
- case MATECONF_VALUE_SCHEMA:
- return "schema";
- break;
- case MATECONF_VALUE_LIST:
- return "list";
- break;
- case MATECONF_VALUE_PAIR:
- return "pair";
- break;
- case MATECONF_VALUE_INVALID:
- return "*invalid*";
- break;
- default:
- g_return_val_if_reached (NULL);
- break;
- }
-}
-
-/* Emit the proper signals for the error, and fill in err */
-static gboolean
-handle_error (MateConfClient* client, GError* error, GError** err)
-{
- if (error != NULL)
- {
- mateconf_client_error(client, error);
-
- if (err == NULL)
- {
- mateconf_client_unreturned_error(client, error);
-
- g_error_free(error);
- }
- else
- *err = error;
-
- return TRUE;
- }
- else
- return FALSE;
-}
-
-static gboolean
-check_type (const gchar* key, MateConfValue* val, MateConfValueType t, GError** err)
-{
- if (val->type != t)
- {
- /*
- mateconf_set_error(err, MATECONF_ERROR_TYPE_MISMATCH,
- _("Expected `%s' got, `%s' for key %s"),
- mateconf_value_type_to_string(t),
- mateconf_value_type_to_string(val->type),
- key);
- */
- g_set_error (err, MATECONF_ERROR, MATECONF_ERROR_TYPE_MISMATCH,
- _("Expected `%s', got `%s' for key %s"),
- mateconf_value_type_to_string(t),
- mateconf_value_type_to_string(val->type),
- key);
-
- return FALSE;
- }
- else
- return TRUE;
-}
-
-static gboolean
-mateconf_client_get_bool_with_default (MateConfClient* client, const gchar* key,
- gboolean def, GError** err)
-{
- GError* error = NULL;
- MateConfValue* val;
-
- g_return_val_if_fail (err == NULL || *err == NULL, def);
-
- val = mateconf_client_get (client, key, &error);
-
- if (val != NULL)
- {
- gboolean retval = def;
-
- g_return_val_if_fail (error == NULL, retval);
-
- if (check_type (key, val, MATECONF_VALUE_BOOL, &error))
- retval = mateconf_value_get_bool (val);
- else
- handle_error (client, error, err);
-
- mateconf_value_free (val);
-
- return retval;
- }
- else
- {
- if (error != NULL)
- handle_error (client, error, err);
- return def;
- }
-}
-
-static gchar*
-mateconf_client_get_string_with_default (MateConfClient* client, const gchar* key,
- const gchar* def, GError** err)
-{
- GError* error = NULL;
- gchar* val;
-
- g_return_val_if_fail (err == NULL || *err == NULL, def ? g_strdup (def) : NULL);
-
- val = mateconf_client_get_string (client, key, &error);
-
- if (val != NULL)
- {
- g_return_val_if_fail (error == NULL, def ? g_strdup (def) : NULL);
-
- return val;
- }
- else
- {
- if (error != NULL)
- handle_error (client, error, err);
- return def ? g_strdup (def) : NULL;
- }
-}
-
-static gint
-mateconf_client_get_int_with_default (MateConfClient* client, const gchar* key,
- gint def, GError** err)
-{
- GError* error = NULL;
- MateConfValue* val;
-
- g_return_val_if_fail (err == NULL || *err == NULL, def);
-
- val = mateconf_client_get (client, key, &error);
-
- if (val != NULL)
- {
- gint retval = def;
-
- g_return_val_if_fail (error == NULL, def);
-
- if (check_type (key, val, MATECONF_VALUE_INT, &error))
- retval = mateconf_value_get_int(val);
- else
- handle_error (client, error, err);
-
- mateconf_value_free (val);
-
- return retval;
- }
- else
- {
- if (error != NULL)
- handle_error (client, error, err);
- return def;
- }
-}
-
diff --git a/gedit/gedit-prefs-manager.h b/gedit/gedit-prefs-manager.h
deleted file mode 100755
index 82041617..00000000
--- a/gedit/gedit-prefs-manager.h
+++ /dev/null
@@ -1,423 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * gedit-prefs-manager.h
- * This file is part of gedit
- *
- * Copyright (C) 2002 Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2002. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- */
-
-#ifndef __GEDIT_PREFS_MANAGER_H__
-#define __GEDIT_PREFS_MANAGER_H__
-
-#include <gtk/gtk.h>
-#include <glib.h>
-#include <gtksourceview/gtksourceview.h>
-#include "gedit-app.h"
-
-#define GEDIT_BASE_KEY "/apps/gedit-2"
-
-#define GPM_PREFS_DIR GEDIT_BASE_KEY "/preferences"
-
-/* Editor */
-#define GPM_FONT_DIR GPM_PREFS_DIR "/editor/font"
-#define GPM_USE_DEFAULT_FONT GPM_FONT_DIR "/use_default_font"
-#define GPM_EDITOR_FONT GPM_FONT_DIR "/editor_font"
-#define GPM_SYSTEM_FONT "/desktop/mate/interface/monospace_font_name"
-
-#define GPM_SAVE_DIR GPM_PREFS_DIR "/editor/save"
-#define GPM_CREATE_BACKUP_COPY GPM_SAVE_DIR "/create_backup_copy"
-
-#define GPM_AUTO_SAVE GPM_SAVE_DIR "/auto_save"
-#define GPM_AUTO_SAVE_INTERVAL GPM_SAVE_DIR "/auto_save_interval"
-
-#define GPM_UNDO_DIR GPM_PREFS_DIR "/editor/undo"
-#define GPM_UNDO_ACTIONS_LIMIT GPM_UNDO_DIR "/max_undo_actions"
-
-#define GPM_WRAP_MODE_DIR GPM_PREFS_DIR "/editor/wrap_mode"
-#define GPM_WRAP_MODE GPM_WRAP_MODE_DIR "/wrap_mode"
-
-#define GPM_TABS_DIR GPM_PREFS_DIR "/editor/tabs"
-#define GPM_TABS_SIZE GPM_TABS_DIR "/tabs_size"
-#define GPM_INSERT_SPACES GPM_TABS_DIR "/insert_spaces"
-
-#define GPM_AUTO_INDENT_DIR GPM_PREFS_DIR "/editor/auto_indent"
-#define GPM_AUTO_INDENT GPM_AUTO_INDENT_DIR "/auto_indent"
-
-#define GPM_LINE_NUMBERS_DIR GPM_PREFS_DIR "/editor/line_numbers"
-#define GPM_DISPLAY_LINE_NUMBERS GPM_LINE_NUMBERS_DIR "/display_line_numbers"
-
-#define GPM_CURRENT_LINE_DIR GPM_PREFS_DIR "/editor/current_line"
-#define GPM_HIGHLIGHT_CURRENT_LINE GPM_CURRENT_LINE_DIR "/highlight_current_line"
-
-#define GPM_BRACKET_MATCHING_DIR GPM_PREFS_DIR "/editor/bracket_matching"
-#define GPM_BRACKET_MATCHING GPM_BRACKET_MATCHING_DIR "/bracket_matching"
-
-#define GPM_RIGHT_MARGIN_DIR GPM_PREFS_DIR "/editor/right_margin"
-#define GPM_DISPLAY_RIGHT_MARGIN GPM_RIGHT_MARGIN_DIR "/display_right_margin"
-#define GPM_RIGHT_MARGIN_POSITION GPM_RIGHT_MARGIN_DIR "/right_margin_position"
-
-#define GPM_SMART_HOME_END_DIR GPM_PREFS_DIR "/editor/smart_home_end"
-#define GPM_SMART_HOME_END GPM_SMART_HOME_END_DIR "/smart_home_end"
-
-#define GPM_CURSOR_POSITION_DIR GPM_PREFS_DIR "/editor/cursor_position"
-#define GPM_RESTORE_CURSOR_POSITION GPM_CURSOR_POSITION_DIR "/restore_cursor_position"
-
-#define GPM_SEARCH_HIGHLIGHTING_DIR GPM_PREFS_DIR "/editor/search_highlighting"
-#define GPM_SEARCH_HIGHLIGHTING_ENABLE GPM_SEARCH_HIGHLIGHTING_DIR "/enable"
-
-#define GPM_SOURCE_STYLE_DIR GPM_PREFS_DIR "/editor/colors"
-#define GPM_SOURCE_STYLE_SCHEME GPM_SOURCE_STYLE_DIR "/scheme"
-
-/* UI */
-#define GPM_TOOLBAR_DIR GPM_PREFS_DIR "/ui/toolbar"
-#define GPM_TOOLBAR_VISIBLE GPM_TOOLBAR_DIR "/toolbar_visible"
-#define GPM_TOOLBAR_BUTTONS_STYLE GPM_TOOLBAR_DIR "/toolbar_buttons_style"
-
-#define GPM_STATUSBAR_DIR GPM_PREFS_DIR "/ui/statusbar"
-#define GPM_STATUSBAR_VISIBLE GPM_STATUSBAR_DIR "/statusbar_visible"
-
-#define GPM_SIDE_PANE_DIR GPM_PREFS_DIR "/ui/side_pane"
-#define GPM_SIDE_PANE_VISIBLE GPM_SIDE_PANE_DIR "/side_pane_visible"
-
-#define GPM_BOTTOM_PANEL_DIR GPM_PREFS_DIR "/ui/bottom_panel"
-#define GPM_BOTTOM_PANEL_VISIBLE GPM_BOTTOM_PANEL_DIR "/bottom_panel_visible"
-
-#define GPM_RECENTS_DIR GPM_PREFS_DIR "/ui/recents"
-#define GPM_MAX_RECENTS GPM_RECENTS_DIR "/max_recents"
-
-/* Print */
-#define GPM_PRINT_PAGE_DIR GPM_PREFS_DIR "/print/page"
-#define GPM_PRINT_SYNTAX GPM_PRINT_PAGE_DIR "/print_syntax_highlighting"
-#define GPM_PRINT_HEADER GPM_PRINT_PAGE_DIR "/print_header"
-#define GPM_PRINT_WRAP_MODE GPM_PRINT_PAGE_DIR "/print_wrap_mode"
-#define GPM_PRINT_LINE_NUMBERS GPM_PRINT_PAGE_DIR "/print_line_numbers"
-
-#define GPM_PRINT_FONT_DIR GPM_PREFS_DIR "/print/fonts"
-#define GPM_PRINT_FONT_BODY GPM_PRINT_FONT_DIR "/print_font_body_pango"
-#define GPM_PRINT_FONT_HEADER GPM_PRINT_FONT_DIR "/print_font_header_pango"
-#define GPM_PRINT_FONT_NUMBERS GPM_PRINT_FONT_DIR "/print_font_numbers_pango"
-
-/* Encodings */
-#define GPM_ENCODINGS_DIR GPM_PREFS_DIR "/encodings"
-#define GPM_AUTO_DETECTED_ENCODINGS GPM_ENCODINGS_DIR "/auto_detected"
-#define GPM_SHOWN_IN_MENU_ENCODINGS GPM_ENCODINGS_DIR "/shown_in_menu"
-
-/* Syntax highlighting */
-#define GPM_SYNTAX_HL_DIR GPM_PREFS_DIR "/syntax_highlighting"
-#define GPM_SYNTAX_HL_ENABLE GPM_SYNTAX_HL_DIR "/enable"
-
-/* White list of writable mate-vfs methods */
-#define GPM_WRITABLE_VFS_SCHEMES GPM_SAVE_DIR "/writable_vfs_schemes"
-
-/* Plugins */
-#define GPM_PLUGINS_DIR GEDIT_BASE_KEY "/plugins"
-#define GPM_ACTIVE_PLUGINS GPM_PLUGINS_DIR "/active-plugins"
-
-/* Global Lockdown keys */
-#define GPM_LOCKDOWN_DIR "/desktop/mate/lockdown"
-#define GPM_LOCKDOWN_COMMAND_LINE GPM_LOCKDOWN_DIR "/disable_command_line"
-#define GPM_LOCKDOWN_PRINTING GPM_LOCKDOWN_DIR "/disable_printing"
-#define GPM_LOCKDOWN_PRINT_SETUP GPM_LOCKDOWN_DIR "/disable_print_setup"
-#define GPM_LOCKDOWN_SAVE_TO_DISK GPM_LOCKDOWN_DIR "/disable_save_to_disk"
-
-/* Fallback default values. Keep in sync with gedit.schemas */
-
-#define GPM_DEFAULT_USE_DEFAULT_FONT 1 /* TRUE */
-
-#ifndef PLATFORM_OSX
-#define GPM_DEFAULT_EDITOR_FONT (const gchar*) "Monospace 12"
-#define GPM_DEFAULT_SYSTEM_FONT (const gchar*) "Monospace 10"
-#else
-#define GPM_DEFAULT_EDITOR_FONT (const gchar*) "Monaco 12"
-#define GPM_DEFAULT_SYSTEM_FONT (const gchar*) "Monaco 12"
-#endif
-
-#define GPM_DEFAULT_CREATE_BACKUP_COPY 0 /* FALSE */
-
-#define GPM_DEFAULT_AUTO_SAVE 0 /* FALSE */
-#define GPM_DEFAULT_AUTO_SAVE_INTERVAL 10 /* minutes */
-
-#define GPM_DEFAULT_UNDO_ACTIONS_LIMIT 2000 /* actions */
-
-#define GPM_DEFAULT_WRAP_MODE "GTK_WRAP_WORD"
-
-#define GPM_DEFAULT_TABS_SIZE 8
-#define GPM_DEFAULT_INSERT_SPACES 0 /* FALSE */
-
-#define GPM_DEFAULT_AUTO_INDENT 0 /* FALSE */
-
-#define GPM_DEFAULT_DISPLAY_LINE_NUMBERS 0 /* FALSE */
-
-#define GPM_DEFAULT_AUTO_DETECTED_ENCODINGS {"UTF-8", "CURRENT", "ISO-8859-15", NULL}
-
-#define GPM_DEFAULT_TOOLBAR_VISIBLE 1 /* TRUE */
-#define GPM_DEFAULT_TOOLBAR_BUTTONS_STYLE "GEDIT_TOOLBAR_SYSTEM"
-#define GPM_DEFAULT_TOOLBAR_SHOW_TOOLTIPS 1 /* TRUE */
-
-#define GPM_DEFAULT_STATUSBAR_VISIBLE 1 /* TRUE */
-#define GPM_DEFAULT_SIDE_PANE_VISIBLE 0 /* FALSE */
-#define GPM_DEFAULT_BOTTOM_PANEL_VISIBLE 0 /* FALSE */
-
-#define GPM_DEFAULT_PRINT_SYNTAX 1 /* TRUE */
-#define GPM_DEFAULT_PRINT_HEADER 1 /* TRUE */
-#define GPM_DEFAULT_PRINT_WRAP_MODE "GTK_WRAP_WORD"
-#define GPM_DEFAULT_PRINT_LINE_NUMBERS 0 /* No numbers */
-
-#ifndef PLATFORM_OSX
-#define GPM_DEFAULT_PRINT_FONT_BODY (const gchar*) "Monospace 9"
-#else
-#define GPM_DEFAULT_PRINT_FONT_BODY (const gchar*) "Monaco 10"
-#endif
-
-#define GPM_DEFAULT_PRINT_FONT_HEADER (const gchar*) "Sans 11"
-#define GPM_DEFAULT_PRINT_FONT_NUMBERS (const gchar*) "Sans 8"
-
-#define GPM_DEFAULT_MAX_RECENTS 5
-
-#define GPM_DEFAULT_HIGHLIGHT_CURRENT_LINE 1 /* TRUE */
-
-#define GPM_DEFAULT_BRACKET_MATCHING 0 /* FALSE */
-
-#define GPM_DEFAULT_DISPLAY_RIGHT_MARGIN 0 /* FALSE */
-#define GPM_DEFAULT_RIGHT_MARGIN_POSITION 80
-
-#define GPM_DEFAULT_SMART_HOME_END "AFTER"
-
-#define GPM_DEFAULT_SYNTAX_HL_ENABLE 1 /* TRUE */
-
-#define GPM_DEFAULT_WRITABLE_VFS_SCHEMES {"ssh", "sftp", "smb", "dav", "davs", NULL}
-
-#define GPM_DEFAULT_RESTORE_CURSOR_POSITION 1 /* TRUE */
-
-#define GPM_DEFAULT_SEARCH_HIGHLIGHTING_ENABLE 1 /* TRUE */
-
-#define GPM_DEFAULT_SOURCE_STYLE_SCHEME "classic"
-
-typedef enum {
- GEDIT_TOOLBAR_SYSTEM = 0,
- GEDIT_TOOLBAR_ICONS,
- GEDIT_TOOLBAR_ICONS_AND_TEXT,
- GEDIT_TOOLBAR_ICONS_BOTH_HORIZ
-} GeditToolbarSetting;
-
-/** LIFE CYCLE MANAGEMENT FUNCTIONS **/
-
-gboolean gedit_prefs_manager_init (void);
-
-/* This function must be called before exiting gedit */
-void gedit_prefs_manager_shutdown (void);
-
-
-/** PREFS MANAGEMENT FUNCTIONS **/
-
-/* Use default font */
-gboolean gedit_prefs_manager_get_use_default_font (void);
-void gedit_prefs_manager_set_use_default_font (gboolean udf);
-gboolean gedit_prefs_manager_use_default_font_can_set (void);
-
-/* Editor font */
-gchar *gedit_prefs_manager_get_editor_font (void);
-void gedit_prefs_manager_set_editor_font (const gchar *font);
-gboolean gedit_prefs_manager_editor_font_can_set (void);
-
-/* System font */
-gchar *gedit_prefs_manager_get_system_font (void);
-
-/* Create backup copy */
-gboolean gedit_prefs_manager_get_create_backup_copy (void);
-void gedit_prefs_manager_set_create_backup_copy (gboolean cbc);
-gboolean gedit_prefs_manager_create_backup_copy_can_set (void);
-
-/* Auto save */
-gboolean gedit_prefs_manager_get_auto_save (void);
-void gedit_prefs_manager_set_auto_save (gboolean as);
-gboolean gedit_prefs_manager_auto_save_can_set (void);
-
-/* Auto save interval */
-gint gedit_prefs_manager_get_auto_save_interval (void);
-void gedit_prefs_manager_set_auto_save_interval (gint asi);
-gboolean gedit_prefs_manager_auto_save_interval_can_set (void);
-
-/* Undo actions limit: if < 1 then no limits */
-gint gedit_prefs_manager_get_undo_actions_limit (void);
-void gedit_prefs_manager_set_undo_actions_limit (gint ual);
-gboolean gedit_prefs_manager_undo_actions_limit_can_set (void);
-
-/* Wrap mode */
-GtkWrapMode gedit_prefs_manager_get_wrap_mode (void);
-void gedit_prefs_manager_set_wrap_mode (GtkWrapMode wp);
-gboolean gedit_prefs_manager_wrap_mode_can_set (void);
-
-/* Tabs size */
-gint gedit_prefs_manager_get_tabs_size (void);
-void gedit_prefs_manager_set_tabs_size (gint ts);
-gboolean gedit_prefs_manager_tabs_size_can_set (void);
-
-/* Insert spaces */
-gboolean gedit_prefs_manager_get_insert_spaces (void);
-void gedit_prefs_manager_set_insert_spaces (gboolean ai);
-gboolean gedit_prefs_manager_insert_spaces_can_set (void);
-
-/* Auto indent */
-gboolean gedit_prefs_manager_get_auto_indent (void);
-void gedit_prefs_manager_set_auto_indent (gboolean ai);
-gboolean gedit_prefs_manager_auto_indent_can_set (void);
-
-/* Display line numbers */
-gboolean gedit_prefs_manager_get_display_line_numbers (void);
-void gedit_prefs_manager_set_display_line_numbers (gboolean dln);
-gboolean gedit_prefs_manager_display_line_numbers_can_set (void);
-
-/* Toolbar visible */
-gboolean gedit_prefs_manager_get_toolbar_visible (void);
-void gedit_prefs_manager_set_toolbar_visible (gboolean tv);
-gboolean gedit_prefs_manager_toolbar_visible_can_set (void);
-
-/* Toolbar buttons style */
-GeditToolbarSetting gedit_prefs_manager_get_toolbar_buttons_style (void);
-void gedit_prefs_manager_set_toolbar_buttons_style (GeditToolbarSetting tbs);
-gboolean gedit_prefs_manager_toolbar_buttons_style_can_set (void);
-
-/* Statusbar visible */
-gboolean gedit_prefs_manager_get_statusbar_visible (void);
-void gedit_prefs_manager_set_statusbar_visible (gboolean sv);
-gboolean gedit_prefs_manager_statusbar_visible_can_set (void);
-
-/* Side pane visible */
-gboolean gedit_prefs_manager_get_side_pane_visible (void);
-void gedit_prefs_manager_set_side_pane_visible (gboolean tv);
-gboolean gedit_prefs_manager_side_pane_visible_can_set (void);
-
-/* Bottom panel visible */
-gboolean gedit_prefs_manager_get_bottom_panel_visible (void);
-void gedit_prefs_manager_set_bottom_panel_visible (gboolean tv);
-gboolean gedit_prefs_manager_bottom_panel_visible_can_set(void);
-/* Print syntax highlighting */
-gboolean gedit_prefs_manager_get_print_syntax_hl (void);
-void gedit_prefs_manager_set_print_syntax_hl (gboolean ps);
-gboolean gedit_prefs_manager_print_syntax_hl_can_set (void);
-
-/* Print header */
-gboolean gedit_prefs_manager_get_print_header (void);
-void gedit_prefs_manager_set_print_header (gboolean ph);
-gboolean gedit_prefs_manager_print_header_can_set (void);
-
-/* Wrap mode while printing */
-GtkWrapMode gedit_prefs_manager_get_print_wrap_mode (void);
-void gedit_prefs_manager_set_print_wrap_mode (GtkWrapMode pwm);
-gboolean gedit_prefs_manager_print_wrap_mode_can_set (void);
-
-/* Print line numbers */
-gint gedit_prefs_manager_get_print_line_numbers (void);
-void gedit_prefs_manager_set_print_line_numbers (gint pln);
-gboolean gedit_prefs_manager_print_line_numbers_can_set (void);
-
-/* Font used to print the body of documents */
-gchar *gedit_prefs_manager_get_print_font_body (void);
-void gedit_prefs_manager_set_print_font_body (const gchar *font);
-gboolean gedit_prefs_manager_print_font_body_can_set (void);
-const gchar *gedit_prefs_manager_get_default_print_font_body (void);
-
-/* Font used to print headers */
-gchar *gedit_prefs_manager_get_print_font_header (void);
-void gedit_prefs_manager_set_print_font_header (const gchar *font);
-gboolean gedit_prefs_manager_print_font_header_can_set (void);
-const gchar *gedit_prefs_manager_get_default_print_font_header (void);
-
-/* Font used to print line numbers */
-gchar *gedit_prefs_manager_get_print_font_numbers (void);
-void gedit_prefs_manager_set_print_font_numbers (const gchar *font);
-gboolean gedit_prefs_manager_print_font_numbers_can_set (void);
-const gchar *gedit_prefs_manager_get_default_print_font_numbers (void);
-
-/* Max number of files in "Recent Files" menu.
- * This is configurable only using mateconftool or mateconf-editor
- */
-gint gedit_prefs_manager_get_max_recents (void);
-
-/* Encodings */
-GSList *gedit_prefs_manager_get_auto_detected_encodings (void);
-
-GSList *gedit_prefs_manager_get_shown_in_menu_encodings (void);
-void gedit_prefs_manager_set_shown_in_menu_encodings (const GSList *encs);
-gboolean gedit_prefs_manager_shown_in_menu_encodings_can_set (void);
-
-/* Highlight current line */
-gboolean gedit_prefs_manager_get_highlight_current_line (void);
-void gedit_prefs_manager_set_highlight_current_line (gboolean hl);
-gboolean gedit_prefs_manager_highlight_current_line_can_set (void);
-
-/* Highlight matching bracket */
-gboolean gedit_prefs_manager_get_bracket_matching (void);
-void gedit_prefs_manager_set_bracket_matching (gboolean bm);
-gboolean gedit_prefs_manager_bracket_matching_can_set (void);
-
-/* Display right margin */
-gboolean gedit_prefs_manager_get_display_right_margin (void);
-void gedit_prefs_manager_set_display_right_margin (gboolean drm);
-gboolean gedit_prefs_manager_display_right_margin_can_set (void);
-
-/* Right margin position */
-gint gedit_prefs_manager_get_right_margin_position (void);
-void gedit_prefs_manager_set_right_margin_position (gint rmp);
-gboolean gedit_prefs_manager_right_margin_position_can_set (void);
-
-/* Smart home end */
-GtkSourceSmartHomeEndType
- gedit_prefs_manager_get_smart_home_end (void);
-void gedit_prefs_manager_set_smart_home_end (GtkSourceSmartHomeEndType smart_he);
-gboolean gedit_prefs_manager_smart_home_end_can_set (void);
-
-/* Enable syntax highlighting */
-gboolean gedit_prefs_manager_get_enable_syntax_highlighting (void);
-void gedit_prefs_manager_set_enable_syntax_highlighting (gboolean esh);
-gboolean gedit_prefs_manager_enable_syntax_highlighting_can_set (void);
-
-/* Writable VFS schemes */
-GSList *gedit_prefs_manager_get_writable_vfs_schemes (void);
-
-/* Restore cursor position */
-gboolean gedit_prefs_manager_get_restore_cursor_position (void);
-
-/* Enable search highlighting */
-gboolean gedit_prefs_manager_get_enable_search_highlighting (void);
-void gedit_prefs_manager_set_enable_search_highlighting (gboolean esh);
-gboolean gedit_prefs_manager_enable_search_highlighting_can_set (void);
-
-/* Style scheme */
-gchar *gedit_prefs_manager_get_source_style_scheme (void);
-void gedit_prefs_manager_set_source_style_scheme (const gchar *scheme);
-gboolean gedit_prefs_manager_source_style_scheme_can_set(void);
-
-/* Plugins */
-GSList *gedit_prefs_manager_get_active_plugins (void);
-void gedit_prefs_manager_set_active_plugins (const GSList *plugins);
-gboolean gedit_prefs_manager_active_plugins_can_set (void);
-
-/* Global lockdown */
-GeditLockdownMask gedit_prefs_manager_get_lockdown (void);
-
-#endif /* __GEDIT_PREFS_MANAGER_H__ */
-
-
diff --git a/gedit/gedit-print-job.c b/gedit/gedit-print-job.c
deleted file mode 100755
index 00acba27..00000000
--- a/gedit/gedit-print-job.c
+++ /dev/null
@@ -1,865 +0,0 @@
-/*
- * gedit-print.c
- * This file is part of gedit
- *
- * Copyright (C) 2000-2001 Chema Celorio, Paolo Maggi
- * Copyright (C) 2002-2008 Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 1998-2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id: gedit-print.c 6022 2007-12-09 14:38:57Z pborelli $
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <glib/gi18n.h>
-#include <gtksourceview/gtksourceprintcompositor.h>
-
-#include "gedit-print-job.h"
-#include "gedit-debug.h"
-#include "gedit-prefs-manager.h"
-#include "gedit-print-preview.h"
-#include "gedit-marshal.h"
-#include "gedit-utils.h"
-#include "gedit-dirs.h"
-
-
-#define GEDIT_PRINT_JOB_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), \
- GEDIT_TYPE_PRINT_JOB, \
- GeditPrintJobPrivate))
-
-struct _GeditPrintJobPrivate
-{
- GeditView *view;
- GeditDocument *doc;
-
- GtkPrintOperation *operation;
- GtkSourcePrintCompositor *compositor;
-
- GtkPrintSettings *settings;
-
- GtkWidget *preview;
-
- GeditPrintJobStatus status;
-
- gchar *status_string;
-
- gdouble progress;
-
- gboolean is_preview;
-
- /* widgets part of the custom print preferences widget.
- * These pointers are valid just when the dialog is displayed */
- GtkWidget *syntax_checkbutton;
- GtkWidget *page_header_checkbutton;
- GtkWidget *line_numbers_checkbutton;
- GtkWidget *line_numbers_hbox;
- GtkWidget *line_numbers_spinbutton;
- GtkWidget *text_wrapping_checkbutton;
- GtkWidget *do_not_split_checkbutton;
- GtkWidget *fonts_table;
- GtkWidget *body_font_label;
- GtkWidget *headers_font_label;
- GtkWidget *numbers_font_label;
- GtkWidget *body_fontbutton;
- GtkWidget *headers_fontbutton;
- GtkWidget *numbers_fontbutton;
- GtkWidget *restore_button;
-};
-
-enum
-{
- PROP_0,
- PROP_VIEW
-};
-
-enum
-{
- PRINTING,
- SHOW_PREVIEW,
- DONE,
- LAST_SIGNAL
-};
-
-static guint print_job_signals[LAST_SIGNAL] = { 0 };
-
-G_DEFINE_TYPE (GeditPrintJob, gedit_print_job, G_TYPE_OBJECT)
-
-static void
-set_view (GeditPrintJob *job, GeditView *view)
-{
- job->priv->view = view;
- job->priv->doc = GEDIT_DOCUMENT (gtk_text_view_get_buffer (GTK_TEXT_VIEW (view)));
-}
-
-static void
-gedit_print_job_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- GeditPrintJob *job = GEDIT_PRINT_JOB (object);
-
- switch (prop_id)
- {
- case PROP_VIEW:
- g_value_set_object (value, job->priv->view);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gedit_print_job_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- GeditPrintJob *job = GEDIT_PRINT_JOB (object);
-
- switch (prop_id)
- {
- case PROP_VIEW:
- set_view (job, g_value_get_object (value));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gedit_print_job_finalize (GObject *object)
-{
- GeditPrintJob *job = GEDIT_PRINT_JOB (object);
-
- g_free (job->priv->status_string);
-
- if (job->priv->compositor != NULL)
- g_object_unref (job->priv->compositor);
-
- if (job->priv->operation != NULL)
- g_object_unref (job->priv->operation);
-
- G_OBJECT_CLASS (gedit_print_job_parent_class)->finalize (object);
-}
-
-static void
-gedit_print_job_class_init (GeditPrintJobClass *klass)
-{
- GObjectClass *object_class;
-
- object_class = G_OBJECT_CLASS (klass);
-
- object_class->get_property = gedit_print_job_get_property;
- object_class->set_property = gedit_print_job_set_property;
- object_class->finalize = gedit_print_job_finalize;
-
- g_object_class_install_property (object_class,
- PROP_VIEW,
- g_param_spec_object ("view",
- "Gedit View",
- "Gedit View to print",
- GEDIT_TYPE_VIEW,
- G_PARAM_READWRITE |
- G_PARAM_STATIC_STRINGS |
- G_PARAM_CONSTRUCT_ONLY));
-
- print_job_signals[PRINTING] =
- g_signal_new ("printing",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GeditPrintJobClass, printing),
- NULL, NULL,
- g_cclosure_marshal_VOID__UINT,
- G_TYPE_NONE,
- 1,
- G_TYPE_UINT);
-
- print_job_signals[SHOW_PREVIEW] =
- g_signal_new ("show-preview",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GeditPrintJobClass, show_preview),
- NULL, NULL,
- g_cclosure_marshal_VOID__OBJECT,
- G_TYPE_NONE,
- 1,
- GTK_TYPE_WIDGET);
-
- print_job_signals[DONE] =
- g_signal_new ("done",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GeditPrintJobClass, done),
- NULL, NULL,
- gedit_marshal_VOID__UINT_POINTER,
- G_TYPE_NONE,
- 2,
- G_TYPE_UINT,
- G_TYPE_POINTER);
-
- g_type_class_add_private (object_class, sizeof (GeditPrintJobPrivate));
-}
-
-static void
-line_numbers_checkbutton_toggled (GtkToggleButton *button,
- GeditPrintJob *job)
-{
- if (gtk_toggle_button_get_active (button))
- {
- gtk_widget_set_sensitive (job->priv->line_numbers_hbox,
- gedit_prefs_manager_print_line_numbers_can_set ());
- }
- else
- {
- gtk_widget_set_sensitive (job->priv->line_numbers_hbox, FALSE);
- }
-}
-
-static void
-wrap_mode_checkbutton_toggled (GtkToggleButton *button,
- GeditPrintJob *job)
-{
- if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (job->priv->text_wrapping_checkbutton)))
- {
- gtk_widget_set_sensitive (job->priv->do_not_split_checkbutton,
- FALSE);
- gtk_toggle_button_set_inconsistent (
- GTK_TOGGLE_BUTTON (job->priv->do_not_split_checkbutton),
- TRUE);
- }
- else
- {
- gtk_widget_set_sensitive (job->priv->do_not_split_checkbutton,
- TRUE);
- gtk_toggle_button_set_inconsistent (
- GTK_TOGGLE_BUTTON (job->priv->do_not_split_checkbutton),
- FALSE);
- }
-}
-
-static void
-restore_button_clicked (GtkButton *button,
- GeditPrintJob *job)
-
-{
- if (gedit_prefs_manager_print_font_body_can_set ())
- {
- const gchar *font;
-
- font = gedit_prefs_manager_get_default_print_font_body ();
-
- gtk_font_button_set_font_name (
- GTK_FONT_BUTTON (job->priv->body_fontbutton),
- font);
- }
-
- if (gedit_prefs_manager_print_font_header_can_set ())
- {
- const gchar *font;
-
- font = gedit_prefs_manager_get_default_print_font_header ();
-
- gtk_font_button_set_font_name (
- GTK_FONT_BUTTON (job->priv->headers_fontbutton),
- font);
- }
-
- if (gedit_prefs_manager_print_font_numbers_can_set ())
- {
- const gchar *font;
-
- font = gedit_prefs_manager_get_default_print_font_numbers ();
-
- gtk_font_button_set_font_name (
- GTK_FONT_BUTTON (job->priv->numbers_fontbutton),
- font);
- }
-}
-
-static GObject *
-create_custom_widget_cb (GtkPrintOperation *operation,
- GeditPrintJob *job)
-{
- gboolean ret;
- GtkWidget *widget;
- GtkWidget *error_widget;
- gchar *font;
- gint line_numbers;
- gboolean can_set;
- GtkWrapMode wrap_mode;
- gchar *file;
- gchar *root_objects[] = {
- "adjustment1",
- "contents",
- NULL
- };
-
- file = gedit_dirs_get_ui_file ("gedit-print-preferences.ui");
- ret = gedit_utils_get_ui_objects (file,
- root_objects,
- &error_widget,
- "contents", &widget,
- "syntax_checkbutton", &job->priv->syntax_checkbutton,
- "line_numbers_checkbutton", &job->priv->line_numbers_checkbutton,
- "line_numbers_hbox", &job->priv->line_numbers_hbox,
- "line_numbers_spinbutton", &job->priv->line_numbers_spinbutton,
- "page_header_checkbutton", &job->priv->page_header_checkbutton,
- "text_wrapping_checkbutton", &job->priv->text_wrapping_checkbutton,
- "do_not_split_checkbutton", &job->priv->do_not_split_checkbutton,
- "fonts_table", &job->priv->fonts_table,
- "body_font_label", &job->priv->body_font_label,
- "body_fontbutton", &job->priv->body_fontbutton,
- "headers_font_label", &job->priv->headers_font_label,
- "headers_fontbutton", &job->priv->headers_fontbutton,
- "numbers_font_label", &job->priv->numbers_font_label,
- "numbers_fontbutton", &job->priv->numbers_fontbutton,
- "restore_button", &job->priv->restore_button,
- NULL);
- g_free (file);
-
- if (!ret)
- {
- return G_OBJECT (error_widget);
- }
-
- /* Print syntax */
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (job->priv->syntax_checkbutton),
- gedit_prefs_manager_get_print_syntax_hl ());
- gtk_widget_set_sensitive (job->priv->syntax_checkbutton,
- gedit_prefs_manager_print_syntax_hl_can_set ());
-
- /* Print page headers */
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (job->priv->page_header_checkbutton),
- gedit_prefs_manager_get_print_header ());
- gtk_widget_set_sensitive (job->priv->page_header_checkbutton,
- gedit_prefs_manager_print_header_can_set ());
-
- /* Line numbers */
- line_numbers = gedit_prefs_manager_get_print_line_numbers ();
- can_set = gedit_prefs_manager_print_line_numbers_can_set ();
-
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (job->priv->line_numbers_checkbutton),
- line_numbers > 0);
- gtk_widget_set_sensitive (job->priv->line_numbers_checkbutton, can_set);
-
- if (line_numbers > 0)
- {
- gtk_spin_button_set_value (GTK_SPIN_BUTTON (job->priv->line_numbers_spinbutton),
- (guint) line_numbers);
- gtk_widget_set_sensitive (job->priv->line_numbers_hbox, can_set);
- }
- else
- {
- gtk_spin_button_set_value (GTK_SPIN_BUTTON (job->priv->line_numbers_spinbutton),
- 1);
- gtk_widget_set_sensitive (job->priv->line_numbers_hbox, FALSE);
- }
-
- /* Text wrapping */
- wrap_mode = gedit_prefs_manager_get_print_wrap_mode ();
-
- switch (wrap_mode)
- {
- case GTK_WRAP_WORD:
- gtk_toggle_button_set_active (
- GTK_TOGGLE_BUTTON (job->priv->text_wrapping_checkbutton), TRUE);
- gtk_toggle_button_set_active (
- GTK_TOGGLE_BUTTON (job->priv->do_not_split_checkbutton), TRUE);
- break;
- case GTK_WRAP_CHAR:
- gtk_toggle_button_set_active (
- GTK_TOGGLE_BUTTON (job->priv->text_wrapping_checkbutton), TRUE);
- gtk_toggle_button_set_active (
- GTK_TOGGLE_BUTTON (job->priv->do_not_split_checkbutton), FALSE);
- break;
- default:
- gtk_toggle_button_set_active (
- GTK_TOGGLE_BUTTON (job->priv->text_wrapping_checkbutton), FALSE);
- gtk_toggle_button_set_inconsistent (
- GTK_TOGGLE_BUTTON (job->priv->do_not_split_checkbutton), TRUE);
- }
-
- can_set = gedit_prefs_manager_print_wrap_mode_can_set ();
-
- gtk_widget_set_sensitive (job->priv->text_wrapping_checkbutton, can_set);
- gtk_widget_set_sensitive (job->priv->do_not_split_checkbutton,
- can_set && (wrap_mode != GTK_WRAP_NONE));
-
- /* Set initial values */
- font = gedit_prefs_manager_get_print_font_body ();
- gtk_font_button_set_font_name (GTK_FONT_BUTTON (job->priv->body_fontbutton),
- font);
- g_free (font);
-
- font = gedit_prefs_manager_get_print_font_header ();
- gtk_font_button_set_font_name (GTK_FONT_BUTTON (job->priv->headers_fontbutton),
- font);
- g_free (font);
-
- font = gedit_prefs_manager_get_print_font_numbers ();
- gtk_font_button_set_font_name (GTK_FONT_BUTTON (job->priv->numbers_fontbutton),
- font);
- g_free (font);
-
- can_set = gedit_prefs_manager_print_font_body_can_set ();
- gtk_widget_set_sensitive (job->priv->body_fontbutton, can_set);
- gtk_widget_set_sensitive (job->priv->body_font_label, can_set);
-
- can_set = gedit_prefs_manager_print_font_header_can_set ();
- gtk_widget_set_sensitive (job->priv->headers_fontbutton, can_set);
- gtk_widget_set_sensitive (job->priv->headers_font_label, can_set);
-
- can_set = gedit_prefs_manager_print_font_numbers_can_set ();
- gtk_widget_set_sensitive (job->priv->numbers_fontbutton, can_set);
- gtk_widget_set_sensitive (job->priv->numbers_font_label, can_set);
-
- g_signal_connect (job->priv->line_numbers_checkbutton,
- "toggled",
- G_CALLBACK (line_numbers_checkbutton_toggled),
- job);
- g_signal_connect (job->priv->text_wrapping_checkbutton,
- "toggled",
- G_CALLBACK (wrap_mode_checkbutton_toggled),
- job);
- g_signal_connect (job->priv->do_not_split_checkbutton,
- "toggled",
- G_CALLBACK (wrap_mode_checkbutton_toggled),
- job);
- g_signal_connect (job->priv->restore_button,
- "clicked",
- G_CALLBACK (restore_button_clicked),
- job);
-
- return G_OBJECT (widget);
-}
-
-static void
-custom_widget_apply_cb (GtkPrintOperation *operation,
- GtkWidget *widget,
- GeditPrintJob *job)
-{
- gedit_prefs_manager_set_print_syntax_hl (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (job->priv->syntax_checkbutton)));
-
- gedit_prefs_manager_set_print_header (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (job->priv->page_header_checkbutton)));
-
- if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (job->priv->line_numbers_checkbutton)))
- {
- gedit_prefs_manager_set_print_line_numbers (
- MAX (1, gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (job->priv->line_numbers_spinbutton))));
- }
- else
- {
- gedit_prefs_manager_set_print_line_numbers (0);
- }
-
- if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (job->priv->text_wrapping_checkbutton)))
- {
- gedit_prefs_manager_set_print_wrap_mode (GTK_WRAP_NONE);
- }
- else
- {
- if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (job->priv->do_not_split_checkbutton)))
- {
- gedit_prefs_manager_set_print_wrap_mode (GTK_WRAP_WORD);
- }
- else
- {
- gedit_prefs_manager_set_print_wrap_mode (GTK_WRAP_CHAR);
- }
- }
-
- gedit_prefs_manager_set_print_font_body (gtk_font_button_get_font_name (GTK_FONT_BUTTON (job->priv->body_fontbutton)));
- gedit_prefs_manager_set_print_font_header (gtk_font_button_get_font_name (GTK_FONT_BUTTON (job->priv->headers_fontbutton)));
- gedit_prefs_manager_set_print_font_numbers (gtk_font_button_get_font_name (GTK_FONT_BUTTON (job->priv->numbers_fontbutton)));
-}
-
-static void
-create_compositor (GeditPrintJob *job)
-{
- gchar *print_font_body;
- gchar *print_font_header;
- gchar *print_font_numbers;
-
- /* Create and initialize print compositor */
- print_font_body = gedit_prefs_manager_get_print_font_body ();
- print_font_header = gedit_prefs_manager_get_print_font_header ();
- print_font_numbers = gedit_prefs_manager_get_print_font_numbers ();
-
- job->priv->compositor = GTK_SOURCE_PRINT_COMPOSITOR (
- g_object_new (GTK_TYPE_SOURCE_PRINT_COMPOSITOR,
- "buffer", GTK_SOURCE_BUFFER (job->priv->doc),
- "tab-width", gtk_source_view_get_tab_width (GTK_SOURCE_VIEW (job->priv->view)),
- "highlight-syntax", gtk_source_buffer_get_highlight_syntax (GTK_SOURCE_BUFFER (job->priv->doc)) &&
- gedit_prefs_manager_get_print_syntax_hl (),
- "wrap-mode", gedit_prefs_manager_get_print_wrap_mode (),
- "print-line-numbers", gedit_prefs_manager_get_print_line_numbers (),
- "print-header", gedit_prefs_manager_get_print_header (),
- "print-footer", FALSE,
- "body-font-name", print_font_body,
- "line-numbers-font-name", print_font_numbers,
- "header-font-name", print_font_header,
- NULL));
-
- g_free (print_font_body);
- g_free (print_font_header);
- g_free (print_font_numbers);
-
- if (gedit_prefs_manager_get_print_header ())
- {
- gchar *doc_name;
- gchar *name_to_display;
- gchar *left;
-
- doc_name = gedit_document_get_uri_for_display (job->priv->doc);
- name_to_display = gedit_utils_str_middle_truncate (doc_name, 60);
-
- left = g_strdup_printf (_("File: %s"), name_to_display);
-
- /* Translators: %N is the current page number, %Q is the total
- * number of pages (ex. Page 2 of 10)
- */
- gtk_source_print_compositor_set_header_format (job->priv->compositor,
- TRUE,
- left,
- NULL,
- _("Page %N of %Q"));
-
- g_free (doc_name);
- g_free (name_to_display);
- g_free (left);
- }
-}
-
-static void
-begin_print_cb (GtkPrintOperation *operation,
- GtkPrintContext *context,
- GeditPrintJob *job)
-{
- create_compositor (job);
-
- job->priv->status = GEDIT_PRINT_JOB_STATUS_PAGINATING;
-
- job->priv->progress = 0.0;
-
- g_signal_emit (job, print_job_signals[PRINTING], 0, job->priv->status);
-}
-
-static void
-preview_ready (GtkPrintOperationPreview *gtk_preview,
- GtkPrintContext *context,
- GeditPrintJob *job)
-{
- job->priv->is_preview = TRUE;
-
- g_signal_emit (job, print_job_signals[SHOW_PREVIEW], 0, job->priv->preview);
-}
-
-static void
-preview_destroyed (GtkWidget *preview,
- GtkPrintOperationPreview *gtk_preview)
-{
- gtk_print_operation_preview_end_preview (gtk_preview);
-}
-
-static gboolean
-preview_cb (GtkPrintOperation *op,
- GtkPrintOperationPreview *gtk_preview,
- GtkPrintContext *context,
- GtkWindow *parent,
- GeditPrintJob *job)
-{
- job->priv->preview = gedit_print_preview_new (op, gtk_preview, context);
-
- g_signal_connect_after (gtk_preview,
- "ready",
- G_CALLBACK (preview_ready),
- job);
-
- /* FIXME: should this go in the preview widget itself? */
- g_signal_connect (job->priv->preview,
- "destroy",
- G_CALLBACK (preview_destroyed),
- gtk_preview);
-
- return TRUE;
-}
-
-static gboolean
-paginate_cb (GtkPrintOperation *operation,
- GtkPrintContext *context,
- GeditPrintJob *job)
-{
- gboolean res;
-
- job->priv->status = GEDIT_PRINT_JOB_STATUS_PAGINATING;
-
- res = gtk_source_print_compositor_paginate (job->priv->compositor, context);
-
- if (res)
- {
- gint n_pages;
-
- n_pages = gtk_source_print_compositor_get_n_pages (job->priv->compositor);
- gtk_print_operation_set_n_pages (job->priv->operation, n_pages);
- }
-
- job->priv->progress = gtk_source_print_compositor_get_pagination_progress (job->priv->compositor);
-
- /* When previewing, the progress is just for pagination, when printing
- * it's split between pagination and rendering */
- if (!job->priv->is_preview)
- job->priv->progress /= 2.0;
-
- g_signal_emit (job, print_job_signals[PRINTING], 0, job->priv->status);
-
- return res;
-}
-
-static void
-draw_page_cb (GtkPrintOperation *operation,
- GtkPrintContext *context,
- gint page_nr,
- GeditPrintJob *job)
-{
- gint n_pages;
-
- /* In preview, pages are drawn on the fly, so rendering is
- * not part of the progress */
- if (!job->priv->is_preview)
- {
- g_free (job->priv->status_string);
-
- n_pages = gtk_source_print_compositor_get_n_pages (job->priv->compositor);
-
- job->priv->status = GEDIT_PRINT_JOB_STATUS_DRAWING;
-
- job->priv->status_string = g_strdup_printf ("Rendering page %d of %d...",
- page_nr + 1,
- n_pages);
-
- job->priv->progress = page_nr / (2.0 * n_pages) + 0.5;
-
- g_signal_emit (job, print_job_signals[PRINTING], 0, job->priv->status);
- }
-
- gtk_source_print_compositor_draw_page (job->priv->compositor, context, page_nr);
-}
-
-static void
-end_print_cb (GtkPrintOperation *operation,
- GtkPrintContext *context,
- GeditPrintJob *job)
-{
- g_object_unref (job->priv->compositor);
- job->priv->compositor = NULL;
-}
-
-static void
-done_cb (GtkPrintOperation *operation,
- GtkPrintOperationResult result,
- GeditPrintJob *job)
-{
- GError *error = NULL;
- GeditPrintJobResult print_result;
-
- switch (result)
- {
- case GTK_PRINT_OPERATION_RESULT_CANCEL:
- print_result = GEDIT_PRINT_JOB_RESULT_CANCEL;
- break;
-
- case GTK_PRINT_OPERATION_RESULT_APPLY:
- print_result = GEDIT_PRINT_JOB_RESULT_OK;
- break;
-
- case GTK_PRINT_OPERATION_RESULT_ERROR:
- print_result = GEDIT_PRINT_JOB_RESULT_ERROR;
- gtk_print_operation_get_error (operation, &error);
- break;
-
- default:
- g_return_if_reached ();
- }
-
- /* Avoid job is destroyed in the handler of the "done" message */
- g_object_ref (job);
-
- g_signal_emit (job, print_job_signals[DONE], 0, print_result, error);
-
- g_object_unref (operation);
- job->priv->operation = NULL;
-
- g_object_unref (job);
-}
-
-/* Note that gedit_print_job_print can can only be called once on a given GeditPrintJob */
-GtkPrintOperationResult
-gedit_print_job_print (GeditPrintJob *job,
- GtkPrintOperationAction action,
- GtkPageSetup *page_setup,
- GtkPrintSettings *settings,
- GtkWindow *parent,
- GError **error)
-{
- GeditPrintJobPrivate *priv;
- gchar *job_name;
-
- g_return_val_if_fail (job->priv->compositor == NULL, GTK_PRINT_OPERATION_RESULT_ERROR);
-
- priv = job->priv;
-
- /* Check if we are previewing */
- priv->is_preview = (action == GTK_PRINT_OPERATION_ACTION_PREVIEW);
-
- /* Create print operation */
- job->priv->operation = gtk_print_operation_new ();
-
- if (settings)
- gtk_print_operation_set_print_settings (priv->operation,
- settings);
-
- if (page_setup != NULL)
- gtk_print_operation_set_default_page_setup (priv->operation,
- page_setup);
-
- job_name = gedit_document_get_short_name_for_display (priv->doc);
- gtk_print_operation_set_job_name (priv->operation, job_name);
- g_free (job_name);
-
-#if GTK_CHECK_VERSION (2, 17, 4)
- gtk_print_operation_set_embed_page_setup (priv->operation, TRUE);
-#endif
-
- gtk_print_operation_set_custom_tab_label (priv->operation,
- _("Text Editor"));
-
- gtk_print_operation_set_allow_async (priv->operation, TRUE);
-
- g_signal_connect (priv->operation,
- "create-custom-widget",
- G_CALLBACK (create_custom_widget_cb),
- job);
- g_signal_connect (priv->operation,
- "custom-widget-apply",
- G_CALLBACK (custom_widget_apply_cb),
- job);
- g_signal_connect (priv->operation,
- "begin-print",
- G_CALLBACK (begin_print_cb),
- job);
- g_signal_connect (priv->operation,
- "preview",
- G_CALLBACK (preview_cb),
- job);
- g_signal_connect (priv->operation,
- "paginate",
- G_CALLBACK (paginate_cb),
- job);
- g_signal_connect (priv->operation,
- "draw-page",
- G_CALLBACK (draw_page_cb),
- job);
- g_signal_connect (priv->operation,
- "end-print",
- G_CALLBACK (end_print_cb),
- job);
- g_signal_connect (priv->operation,
- "done",
- G_CALLBACK (done_cb),
- job);
-
- return gtk_print_operation_run (priv->operation,
- action,
- parent,
- error);
-}
-
-static void
-gedit_print_job_init (GeditPrintJob *job)
-{
- job->priv = GEDIT_PRINT_JOB_GET_PRIVATE (job);
-
- job->priv->status = GEDIT_PRINT_JOB_STATUS_INIT;
-
- job->priv->status_string = g_strdup (_("Preparing..."));
-}
-
-GeditPrintJob *
-gedit_print_job_new (GeditView *view)
-{
- GeditPrintJob *job;
-
- g_return_val_if_fail (GEDIT_IS_VIEW (view), NULL);
-
- job = GEDIT_PRINT_JOB (g_object_new (GEDIT_TYPE_PRINT_JOB,
- "view", view,
- NULL));
-
- return job;
-}
-
-void
-gedit_print_job_cancel (GeditPrintJob *job)
-{
- g_return_if_fail (GEDIT_IS_PRINT_JOB (job));
-
- gtk_print_operation_cancel (job->priv->operation);
-}
-
-const gchar *
-gedit_print_job_get_status_string (GeditPrintJob *job)
-{
- g_return_val_if_fail (GEDIT_IS_PRINT_JOB (job), NULL);
- g_return_val_if_fail (job->priv->status_string != NULL, NULL);
-
- return job->priv->status_string;
-}
-
-gdouble
-gedit_print_job_get_progress (GeditPrintJob *job)
-{
- g_return_val_if_fail (GEDIT_IS_PRINT_JOB (job), 0.0);
-
- return job->priv->progress;
-}
-
-GtkPrintSettings *
-gedit_print_job_get_print_settings (GeditPrintJob *job)
-{
- g_return_val_if_fail (GEDIT_IS_PRINT_JOB (job), NULL);
-
- return gtk_print_operation_get_print_settings (job->priv->operation);
-}
-
-GtkPageSetup *
-gedit_print_job_get_page_setup (GeditPrintJob *job)
-{
- g_return_val_if_fail (GEDIT_IS_PRINT_JOB (job), NULL);
-
- return gtk_print_operation_get_default_page_setup (job->priv->operation);
-}
diff --git a/gedit/gedit-print-job.h b/gedit/gedit-print-job.h
deleted file mode 100755
index 956dc730..00000000
--- a/gedit/gedit-print-job.h
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * gedit-print-job.h
- * This file is part of gedit
- *
- * Copyright (C) 2000-2001 Chema Celorio, Paolo Maggi
- * Copyright (C) 2002-2008 Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 1998-2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifndef __GEDIT_PRINT_JOB_H__
-#define __GEDIT_PRINT_JOB_H__
-
-#include <gtk/gtk.h>
-#include <gedit/gedit-view.h>
-
-G_BEGIN_DECLS
-
-/*
- * Type checking and casting macros
- */
-#define GEDIT_TYPE_PRINT_JOB (gedit_print_job_get_type())
-#define GEDIT_PRINT_JOB(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GEDIT_TYPE_PRINT_JOB, GeditPrintJob))
-#define GEDIT_PRINT_JOB_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GEDIT_TYPE_PRINT_JOB, GeditPrintJobClass))
-#define GEDIT_IS_PRINT_JOB(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GEDIT_TYPE_PRINT_JOB))
-#define GEDIT_IS_PRINT_JOB_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEDIT_TYPE_PRINT_JOB))
-#define GEDIT_PRINT_JOB_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GEDIT_TYPE_PRINT_JOB, GeditPrintJobClass))
-
-
-typedef enum
-{
- GEDIT_PRINT_JOB_STATUS_INIT,
- GEDIT_PRINT_JOB_STATUS_PAGINATING,
- GEDIT_PRINT_JOB_STATUS_DRAWING,
- GEDIT_PRINT_JOB_STATUS_DONE
-} GeditPrintJobStatus;
-
-typedef enum
-{
- GEDIT_PRINT_JOB_RESULT_OK,
- GEDIT_PRINT_JOB_RESULT_CANCEL,
- GEDIT_PRINT_JOB_RESULT_ERROR
-} GeditPrintJobResult;
-
-/* Private structure type */
-typedef struct _GeditPrintJobPrivate GeditPrintJobPrivate;
-
-/*
- * Main object structure
- */
-typedef struct _GeditPrintJob GeditPrintJob;
-
-
-struct _GeditPrintJob
-{
- GObject parent;
-
- /* <private> */
- GeditPrintJobPrivate *priv;
-};
-
-/*
- * Class definition
- */
-typedef struct _GeditPrintJobClass GeditPrintJobClass;
-
-struct _GeditPrintJobClass
-{
- GObjectClass parent_class;
-
- /* Signals */
- void (* printing) (GeditPrintJob *job,
- GeditPrintJobStatus status);
-
- void (* show_preview) (GeditPrintJob *job,
- GtkWidget *preview);
-
- void (*done) (GeditPrintJob *job,
- GeditPrintJobResult result,
- const GError *error);
-};
-
-/*
- * Public methods
- */
-GType gedit_print_job_get_type (void) G_GNUC_CONST;
-
-GeditPrintJob *gedit_print_job_new (GeditView *view);
-
-void gedit_print_job_set_export_filename (GeditPrintJob *job,
- const gchar *filename);
-
-GtkPrintOperationResult gedit_print_job_print (GeditPrintJob *job,
- GtkPrintOperationAction action,
- GtkPageSetup *page_setup,
- GtkPrintSettings *settings,
- GtkWindow *parent,
- GError **error);
-
-void gedit_print_job_cancel (GeditPrintJob *job);
-
-const gchar *gedit_print_job_get_status_string (GeditPrintJob *job);
-
-gdouble gedit_print_job_get_progress (GeditPrintJob *job);
-
-GtkPrintSettings *gedit_print_job_get_print_settings (GeditPrintJob *job);
-
-GtkPageSetup *gedit_print_job_get_page_setup (GeditPrintJob *job);
-
-G_END_DECLS
-
-#endif /* __GEDIT_PRINT_JOB_H__ */
diff --git a/gedit/gedit-print-preferences.ui b/gedit/gedit-print-preferences.ui
deleted file mode 100755
index 3917eeba..00000000
--- a/gedit/gedit-print-preferences.ui
+++ /dev/null
@@ -1,497 +0,0 @@
-<?xml version="1.0"?>
-<interface>
- <requires lib="gtk+" version="2.16"/>
- <!-- interface-naming-policy toplevel-contextual -->
- <object class="GtkAdjustment" id="adjustment1">
- <property name="value">1</property>
- <property name="lower">1</property>
- <property name="upper">100</property>
- <property name="step_increment">1</property>
- <property name="page_increment">10</property>
- </object>
- <object class="GtkWindow" id="window1">
- <property name="visible">True</property>
- <property name="title" translatable="yes">window1</property>
- <child>
- <object class="GtkHBox" id="contents">
- <property name="visible">True</property>
- <property name="border_width">12</property>
- <property name="spacing">18</property>
- <child>
- <object class="GtkVBox" id="vbox20">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">18</property>
- <child>
- <object class="GtkVBox" id="vbox26">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkLabel" id="label33">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">Syntax Highlighting</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkAlignment" id="alignment1">
- <property name="visible">True</property>
- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="left_padding">12</property>
- <child>
- <object class="GtkCheckButton" id="syntax_checkbutton">
- <property name="label" translatable="yes">Print synta_x highlighting</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_underline">True</property>
- <property name="draw_indicator">True</property>
- </object>
- </child>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkVBox" id="vbox22">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkLabel" id="label27">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">Line Numbers</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkAlignment" id="alignment2">
- <property name="visible">True</property>
- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="left_padding">12</property>
- <child>
- <object class="GtkVBox" id="vbox2">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkCheckButton" id="line_numbers_checkbutton">
- <property name="label" translatable="yes">Print line nu_mbers</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_underline">True</property>
- <property name="draw_indicator">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkHBox" id="line_numbers_hbox">
- <property name="visible">True</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkLabel" id="label3">
- <property name="visible">True</property>
- <property name="xalign">0.47999998927116394</property>
- <property name="label" translatable="yes" comments="'Number every' from 'Number every 3 lines' in the 'Text Editor' tab of the print preferences.">_Number every</property>
- <property name="use_underline">True</property>
- <property name="mnemonic_widget">line_numbers_spinbutton</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkSpinButton" id="line_numbers_spinbutton">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="adjustment">adjustment1</property>
- <property name="climb_rate">1</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="label4">
- <property name="visible">True</property>
- <property name="label" translatable="yes" comments="'lines' from 'Number every 3 lines' in the 'Text Editor' tab of the print preferences.">lines</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">2</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- </child>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkVBox" id="vbox24">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkLabel" id="label31">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">Text Wrapping</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkAlignment" id="alignment3">
- <property name="visible">True</property>
- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="left_padding">12</property>
- <child>
- <object class="GtkVBox" id="vbox25">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkCheckButton" id="text_wrapping_checkbutton">
- <property name="label" translatable="yes">Enable text _wrapping</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_underline">True</property>
- <property name="draw_indicator">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkHBox" id="hbox20">
- <property name="visible">True</property>
- <child>
- <object class="GtkCheckButton" id="do_not_split_checkbutton">
- <property name="label" translatable="yes">Do not _split words over two lines</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_underline">True</property>
- <property name="draw_indicator">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- </child>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">2</property>
- </packing>
- </child>
- <child>
- <object class="GtkVBox" id="vbox39">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkLabel" id="label45">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">Page header</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkAlignment" id="alignment4">
- <property name="visible">True</property>
- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="left_padding">12</property>
- <child>
- <object class="GtkCheckButton" id="page_header_checkbutton">
- <property name="label" translatable="yes">Print page _headers</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_underline">True</property>
- <property name="draw_indicator">True</property>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="position">3</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkVBox" id="vbox36">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">18</property>
- <child>
- <object class="GtkVBox" id="vbox37">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkLabel" id="label43">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">Fonts</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkAlignment" id="alignment5">
- <property name="visible">True</property>
- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="left_padding">12</property>
- <child>
- <object class="GtkVBox" id="vbox4">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">12</property>
- <child>
- <object class="GtkTable" id="fonts_table">
- <property name="visible">True</property>
- <property name="n_rows">3</property>
- <property name="n_columns">2</property>
- <property name="column_spacing">12</property>
- <property name="row_spacing">12</property>
- <child>
- <object class="GtkLabel" id="body_font_label">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">_Body:</property>
- <property name="use_underline">True</property>
- <property name="mnemonic_widget">body_fontbutton</property>
- </object>
- <packing>
- <property name="x_options">GTK_FILL</property>
- <property name="y_options"></property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="numbers_font_label">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">_Line numbers:</property>
- <property name="use_underline">True</property>
- <property name="mnemonic_widget">numbers_fontbutton</property>
- </object>
- <packing>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">GTK_FILL</property>
- <property name="y_options"></property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="headers_font_label">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">He_aders and footers:</property>
- <property name="use_underline">True</property>
- <property name="mnemonic_widget">headers_fontbutton</property>
- </object>
- <packing>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- <property name="x_options">GTK_FILL</property>
- <property name="y_options"></property>
- </packing>
- </child>
- <child>
- <object class="GtkFontButton" id="body_fontbutton">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_font">True</property>
- <property name="show_style">False</property>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="y_options"></property>
- </packing>
- </child>
- <child>
- <object class="GtkFontButton" id="numbers_fontbutton">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_font">True</property>
- <property name="show_style">False</property>
- </object>
- <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="x_options">GTK_FILL</property>
- <property name="y_options"></property>
- </packing>
- </child>
- <child>
- <object class="GtkFontButton" id="headers_fontbutton">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_font">True</property>
- <property name="show_style">False</property>
- </object>
- <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="x_options">GTK_FILL</property>
- <property name="y_options"></property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkHButtonBox" id="hbuttonbox1">
- <property name="visible">True</property>
- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="layout_style">end</property>
- <child>
- <object class="GtkButton" id="restore_button">
- <property name="label" translatable="yes">_Restore Default Fonts</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_underline">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- </child>
- </object>
-</interface>
diff --git a/gedit/gedit-print-preview.c b/gedit/gedit-print-preview.c
deleted file mode 100755
index 293a930b..00000000
--- a/gedit/gedit-print-preview.c
+++ /dev/null
@@ -1,1327 +0,0 @@
-/*
- * gedit-print-preview.c
- *
- * Copyright (C) 2008 Paolo Borelli
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 1998-2006. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id: gedit-commands-search.c 5931 2007-09-25 20:05:40Z pborelli $
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <math.h>
-#include <stdlib.h>
-#include <glib/gi18n.h>
-#include <gdk/gdkkeysyms.h>
-#include <gtk/gtk.h>
-
-#include <cairo-pdf.h>
-
-#include "gedit-print-preview.h"
-
-#define PRINTER_DPI (72.)
-
-struct _GeditPrintPreviewPrivate
-{
- GtkPrintOperation *operation;
- GtkPrintContext *context;
- GtkPrintOperationPreview *gtk_preview;
-
- GtkWidget *layout;
- GtkWidget *scrolled_window;
-
- GtkToolItem *next;
- GtkToolItem *prev;
- GtkWidget *page_entry;
- GtkWidget *last;
- GtkToolItem *multi;
- GtkToolItem *zoom_one;
- GtkToolItem *zoom_fit;
- GtkToolItem *zoom_in;
- GtkToolItem *zoom_out;
-
- /* real size of the page in inches */
- double paper_w;
- double paper_h;
- double dpi;
-
- double scale;
-
- /* size of the tile of a page (including padding
- * and drop shadow) in pixels */
- gint tile_w;
- gint tile_h;
-
- GtkPageOrientation orientation;
-
- /* multipage support */
- gint rows;
- gint cols;
-
- guint n_pages;
- guint cur_page;
-};
-
-G_DEFINE_TYPE (GeditPrintPreview, gedit_print_preview, GTK_TYPE_VBOX)
-
-static void
-gedit_print_preview_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- //GeditPrintPreview *preview = GEDIT_PRINT_PREVIEW (object);
-
- switch (prop_id)
- {
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gedit_print_preview_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- //GeditPrintPreview *preview = GEDIT_PRINT_PREVIEW (object);
-
- switch (prop_id)
- {
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gedit_print_preview_finalize (GObject *object)
-{
- //GeditPrintPreview *preview = GEDIT_PRINT_PREVIEW (object);
-
- G_OBJECT_CLASS (gedit_print_preview_parent_class)->finalize (object);
-}
-
-static void
-gedit_print_preview_grab_focus (GtkWidget *widget)
-{
- GeditPrintPreview *preview;
-
- preview = GEDIT_PRINT_PREVIEW (widget);
-
- gtk_widget_grab_focus (GTK_WIDGET (preview->priv->layout));
-}
-
-static void
-gedit_print_preview_class_init (GeditPrintPreviewClass *klass)
-{
- GObjectClass *object_class;
- GtkWidgetClass *widget_class;
-
- object_class = G_OBJECT_CLASS (klass);
- widget_class = GTK_WIDGET_CLASS (klass);
-
- object_class->get_property = gedit_print_preview_get_property;
- object_class->set_property = gedit_print_preview_set_property;
- object_class->finalize = gedit_print_preview_finalize;
-
- widget_class->grab_focus = gedit_print_preview_grab_focus;
-
- g_type_class_add_private (object_class, sizeof(GeditPrintPreviewPrivate));
-}
-
-static void
-update_layout_size (GeditPrintPreview *preview)
-{
- GeditPrintPreviewPrivate *priv;
-
- priv = preview->priv;
-
- /* force size of the drawing area to make the scrolled window work */
- gtk_layout_set_size (GTK_LAYOUT (priv->layout),
- priv->tile_w * priv->cols,
- priv->tile_h * priv->rows);
-
- gtk_widget_queue_draw (preview->priv->layout);
-}
-
-static void
-set_rows_and_cols (GeditPrintPreview *preview,
- gint rows,
- gint cols)
-{
- /* TODO: set the zoom appropriately */
-
- preview->priv->rows = rows;
- preview->priv->cols = cols;
- update_layout_size (preview);
-}
-
-/* get the paper size in points: these must be used only
- * after the widget has been mapped and the dpi is known */
-
-static double
-get_paper_width (GeditPrintPreview *preview)
-{
- return preview->priv->paper_w * preview->priv->dpi;
-}
-
-static double
-get_paper_height (GeditPrintPreview *preview)
-{
- return preview->priv->paper_h * preview->priv->dpi;
-}
-
-#define PAGE_PAD 12
-#define PAGE_SHADOW_OFFSET 5
-
-/* The tile size is the size of the area where a page
- * will be drawn including the padding and idependent
- * of the orientation */
-
-/* updates the tile size to the current zoom and page size */
-static void
-update_tile_size (GeditPrintPreview *preview)
-{
- GeditPrintPreviewPrivate *priv;
- gint w, h;
-
- priv = preview->priv;
-
- w = 2 * PAGE_PAD + floor (priv->scale * get_paper_width (preview) + 0.5);
- h = 2 * PAGE_PAD + floor (priv->scale * get_paper_height (preview) + 0.5);
-
- if ((priv->orientation == GTK_PAGE_ORIENTATION_LANDSCAPE) ||
- (priv->orientation == GTK_PAGE_ORIENTATION_REVERSE_LANDSCAPE))
- {
- priv->tile_w = h;
- priv->tile_h = w;
- }
- else
- {
- priv->tile_w = w;
- priv->tile_h = h;
- }
-}
-
-/* Zoom should always be set with one of these two function
- * so that the tile size is properly updated */
-
-static void
-set_zoom_factor (GeditPrintPreview *preview,
- double zoom)
-{
- GeditPrintPreviewPrivate *priv;
-
- priv = preview->priv;
-
- priv->scale = zoom;
-
- update_tile_size (preview);
- update_layout_size (preview);
-}
-
-static void
-set_zoom_fit_to_size (GeditPrintPreview *preview)
-{
- GeditPrintPreviewPrivate *priv;
- double width, height;
- double p_width, p_height;
- double zoomx, zoomy;
-
- priv = preview->priv;
-
- g_object_get (gtk_layout_get_hadjustment (GTK_LAYOUT (priv->layout)),
- "page-size", &width,
- NULL);
- g_object_get (gtk_layout_get_vadjustment (GTK_LAYOUT (priv->layout)),
- "page-size", &height,
- NULL);
-
- width /= priv->cols;
- height /= priv->rows;
-
- if ((priv->orientation == GTK_PAGE_ORIENTATION_LANDSCAPE) ||
- (priv->orientation == GTK_PAGE_ORIENTATION_REVERSE_LANDSCAPE))
- {
- p_width = get_paper_height (preview);
- p_height = get_paper_width (preview);
- }
- else
- {
- p_width = get_paper_width (preview);
- p_height = get_paper_height (preview);
- }
-
- zoomx = MAX (1, width - 2 * PAGE_PAD) / p_width;
- zoomy = MAX (1, height - 2 * PAGE_PAD) / p_height;
-
- if (zoomx <= zoomy)
- {
- priv->tile_w = width;
- priv->tile_h = floor (0.5 + width * (p_height / p_width));
- priv->scale = zoomx;
- }
- else
- {
- priv->tile_w = floor (0.5 + height * (p_width / p_height));
- priv->tile_h = height;
- priv->scale = zoomy;
- }
-
- update_layout_size (preview);
-}
-
-#define ZOOM_IN_FACTOR (1.2)
-#define ZOOM_OUT_FACTOR (1.0 / ZOOM_IN_FACTOR)
-
-static void
-zoom_in (GeditPrintPreview *preview)
-{
- set_zoom_factor (preview,
- preview->priv->scale * ZOOM_IN_FACTOR);
-}
-
-static void
-zoom_out (GeditPrintPreview *preview)
-{
- set_zoom_factor (preview,
- preview->priv->scale * ZOOM_OUT_FACTOR);
-}
-
-static void
-goto_page (GeditPrintPreview *preview, gint page)
-{
- gchar c[32];
-
- g_snprintf (c, 32, "%d", page + 1);
- gtk_entry_set_text (GTK_ENTRY (preview->priv->page_entry), c);
-
- gtk_widget_set_sensitive (GTK_WIDGET (preview->priv->prev),
- (page > 0) && (preview->priv->n_pages > 1));
- gtk_widget_set_sensitive (GTK_WIDGET (preview->priv->next),
- (page != (preview->priv->n_pages - 1)) &&
- (preview->priv->n_pages > 1));
-
- if (page != preview->priv->cur_page)
- {
- preview->priv->cur_page = page;
- if (preview->priv->n_pages > 0)
- gtk_widget_queue_draw (preview->priv->layout);
- }
-}
-
-static void
-prev_button_clicked (GtkWidget *button,
- GeditPrintPreview *preview)
-{
- GdkEvent *event;
- gint page;
-
- event = gtk_get_current_event ();
-
- if (event->button.state & GDK_SHIFT_MASK)
- page = 0;
- else
- page = preview->priv->cur_page - preview->priv->rows * preview->priv->cols;
-
- goto_page (preview, MAX (page, 0));
-
- gdk_event_free (event);
-}
-
-static void
-next_button_clicked (GtkWidget *button,
- GeditPrintPreview *preview)
-{
- GdkEvent *event;
- gint page;
-
- event = gtk_get_current_event ();
-
- if (event->button.state & GDK_SHIFT_MASK)
- page = preview->priv->n_pages - 1;
- else
- page = preview->priv->cur_page + preview->priv->rows * preview->priv->cols;
-
- goto_page (preview, MIN (page, preview->priv->n_pages - 1));
-
- gdk_event_free (event);
-}
-
-static void
-page_entry_activated (GtkEntry *entry,
- GeditPrintPreview *preview)
-{
- const gchar *text;
- gint page;
-
- text = gtk_entry_get_text (entry);
-
- page = CLAMP (atoi (text), 1, preview->priv->n_pages) - 1;
- goto_page (preview, page);
-
- gtk_widget_grab_focus (GTK_WIDGET (preview->priv->layout));
-}
-
-static void
-page_entry_insert_text (GtkEditable *editable,
- const gchar *text,
- gint length,
- gint *position)
-{
- gunichar c;
- const gchar *p;
- const gchar *end;
-
- p = text;
- end = text + length;
-
- while (p != end)
- {
- const gchar *next;
- next = g_utf8_next_char (p);
-
- c = g_utf8_get_char (p);
-
- if (!g_unichar_isdigit (c))
- {
- g_signal_stop_emission_by_name (editable, "insert-text");
- break;
- }
-
- p = next;
- }
-}
-
-static gboolean
-page_entry_focus_out (GtkWidget *widget,
- GdkEventFocus *event,
- GeditPrintPreview *preview)
-{
- const gchar *text;
- gint page;
-
- text = gtk_entry_get_text (GTK_ENTRY (widget));
- page = atoi (text) - 1;
-
- /* Reset the page number only if really needed */
- if (page != preview->priv->cur_page)
- {
- gchar *str;
-
- str = g_strdup_printf ("%d", preview->priv->cur_page + 1);
- gtk_entry_set_text (GTK_ENTRY (widget), str);
- g_free (str);
- }
-
- return FALSE;
-}
-
-static void
-on_1x1_clicked (GtkMenuItem *i, GeditPrintPreview *preview)
-{
- set_rows_and_cols (preview, 1, 1);
-}
-
-static void
-on_1x2_clicked (GtkMenuItem *i, GeditPrintPreview *preview)
-{
- set_rows_and_cols (preview, 1, 2);
-}
-
-static void
-on_2x1_clicked (GtkMenuItem *i, GeditPrintPreview *preview)
-{
- set_rows_and_cols (preview, 2, 1);
-}
-
-static void
-on_2x2_clicked (GtkMenuItem *i, GeditPrintPreview *preview)
-{
- set_rows_and_cols (preview, 2, 2);
-}
-
-static void
-multi_button_clicked (GtkWidget *button,
- GeditPrintPreview *preview)
-{
- GtkWidget *m, *i;
-
- m = gtk_menu_new ();
- gtk_widget_show (m);
- g_signal_connect (m,
- "selection_done",
- G_CALLBACK (gtk_widget_destroy),
- m);
-
- i = gtk_menu_item_new_with_label ("1x1");
- gtk_widget_show (i);
- gtk_menu_attach (GTK_MENU (m), i, 0, 1, 0, 1);
- g_signal_connect (i, "activate", G_CALLBACK (on_1x1_clicked), preview);
-
- i = gtk_menu_item_new_with_label ("2x1");
- gtk_widget_show (i);
- gtk_menu_attach (GTK_MENU (m), i, 0, 1, 1, 2);
- g_signal_connect (i, "activate", G_CALLBACK (on_2x1_clicked), preview);
-
- i = gtk_menu_item_new_with_label ("1x2");
- gtk_widget_show (i);
- gtk_menu_attach (GTK_MENU (m), i, 1, 2, 0, 1);
- g_signal_connect (i, "activate", G_CALLBACK (on_1x2_clicked), preview);
-
- i = gtk_menu_item_new_with_label ("2x2");
- gtk_widget_show (i);
- gtk_menu_attach (GTK_MENU (m), i, 1, 2, 1, 2);
- g_signal_connect (i, "activate", G_CALLBACK (on_2x2_clicked), preview);
-
- gtk_menu_popup (GTK_MENU (m),
- NULL, NULL, NULL, preview, 0,
- GDK_CURRENT_TIME);
-}
-
-static void
-zoom_one_button_clicked (GtkWidget *button,
- GeditPrintPreview *preview)
-{
- set_zoom_factor (preview, 1);
-}
-
-static void
-zoom_fit_button_clicked (GtkWidget *button,
- GeditPrintPreview *preview)
-{
- set_zoom_fit_to_size (preview);
-}
-
-static void
-zoom_in_button_clicked (GtkWidget *button,
- GeditPrintPreview *preview)
-{
- zoom_in (preview);
-}
-
-static void
-zoom_out_button_clicked (GtkWidget *button,
- GeditPrintPreview *preview)
-{
- zoom_out (preview);
-}
-
-static void
-close_button_clicked (GtkWidget *button,
- GeditPrintPreview *preview)
-{
- gtk_widget_destroy (GTK_WIDGET (preview));
-}
-
-static void
-create_bar (GeditPrintPreview *preview)
-{
- GeditPrintPreviewPrivate *priv;
- GtkWidget *toolbar;
- GtkToolItem *i;
- AtkObject *atko;
- GtkWidget *status;
-
- priv = preview->priv;
-
- toolbar = gtk_toolbar_new ();
- gtk_toolbar_set_style (GTK_TOOLBAR (toolbar),
- GTK_TOOLBAR_BOTH_HORIZ);
- gtk_widget_show (toolbar);
- gtk_box_pack_start (GTK_BOX (preview),
- toolbar,
- FALSE, FALSE, 0);
-
- priv->prev = gtk_tool_button_new_from_stock (GTK_STOCK_GO_BACK);
- gtk_tool_button_set_label (GTK_TOOL_BUTTON (priv->prev),
- "P_revious Page");
- gtk_tool_button_set_use_underline (GTK_TOOL_BUTTON (priv->prev), TRUE);
- gtk_tool_item_set_tooltip_text (priv->prev, _("Show the previous page"));
- gtk_toolbar_insert (GTK_TOOLBAR (toolbar), priv->prev, -1);
- g_signal_connect (priv->prev,
- "clicked",
- G_CALLBACK (prev_button_clicked),
- preview);
- gtk_widget_show (GTK_WIDGET (priv->prev));
-
- priv->next = gtk_tool_button_new_from_stock (GTK_STOCK_GO_FORWARD);
- gtk_tool_button_set_label (GTK_TOOL_BUTTON (priv->next),
- "_Next Page");
- gtk_tool_button_set_use_underline (GTK_TOOL_BUTTON (priv->next), TRUE);
- gtk_tool_item_set_tooltip_text (priv->next, _("Show the next page"));
- gtk_toolbar_insert (GTK_TOOLBAR (toolbar), priv->next, -1);
- g_signal_connect (priv->next,
- "clicked",
- G_CALLBACK (next_button_clicked),
- preview);
- gtk_widget_show (GTK_WIDGET (priv->next));
-
- i = gtk_separator_tool_item_new ();
- gtk_widget_show (GTK_WIDGET (i));
- gtk_toolbar_insert (GTK_TOOLBAR (toolbar), i, -1);
-
- status = gtk_hbox_new (FALSE, 4);
- priv->page_entry = gtk_entry_new ();
- gtk_entry_set_width_chars (GTK_ENTRY (priv->page_entry), 3);
- gtk_entry_set_max_length (GTK_ENTRY (priv->page_entry), 6);
- gtk_widget_set_tooltip_text (priv->page_entry, _("Current page (Alt+P)"));
-
- g_signal_connect (priv->page_entry,
- "activate",
- G_CALLBACK (page_entry_activated),
- preview);
- g_signal_connect (priv->page_entry,
- "insert-text",
- G_CALLBACK (page_entry_insert_text),
- NULL);
- g_signal_connect (priv->page_entry,
- "focus-out-event",
- G_CALLBACK (page_entry_focus_out),
- preview);
-
- gtk_box_pack_start (GTK_BOX (status),
- priv->page_entry,
- FALSE, FALSE, 0);
- /* gtk_label_set_mnemonic_widget ((GtkLabel *) l, mp->priv->page_entry); */
-
- /* We are displaying 'XXX of XXX'. */
- gtk_box_pack_start (GTK_BOX (status),
- /* Translators: the "of" from "1 of 19" in print preview. */
- gtk_label_new (_("of")),
- FALSE, FALSE, 0);
-
- priv->last = gtk_label_new ("");
- gtk_box_pack_start (GTK_BOX (status),
- priv->last,
- FALSE, FALSE, 0);
- atko = gtk_widget_get_accessible (priv->last);
- atk_object_set_name (atko, _("Page total"));
- atk_object_set_description (atko, _("The total number of pages in the document"));
-
- gtk_widget_show_all (status);
-
- i = gtk_tool_item_new ();
- gtk_container_add (GTK_CONTAINER (i), status);
- gtk_widget_show (GTK_WIDGET (i));
- gtk_toolbar_insert (GTK_TOOLBAR (toolbar), i, -1);
-
- i = gtk_separator_tool_item_new ();
- gtk_widget_show (GTK_WIDGET (i));
- gtk_toolbar_insert (GTK_TOOLBAR (toolbar), i, -1);
-
- priv->multi = gtk_tool_button_new_from_stock (GTK_STOCK_DND_MULTIPLE);
- gtk_tool_button_set_label (GTK_TOOL_BUTTON (priv->multi),
- "_Show Multiple Pages");
- gtk_tool_button_set_use_underline (GTK_TOOL_BUTTON (priv->multi), TRUE);
- gtk_tool_item_set_tooltip_text (priv->multi, _("Show multiple pages"));
- gtk_toolbar_insert (GTK_TOOLBAR (toolbar), priv->multi, -1);
- g_signal_connect (priv->multi,
- "clicked",
- G_CALLBACK (multi_button_clicked),
- preview);
- gtk_widget_show (GTK_WIDGET (priv->multi));
-
- i = gtk_separator_tool_item_new ();
- gtk_widget_show (GTK_WIDGET (i));
- gtk_toolbar_insert (GTK_TOOLBAR (toolbar), i, -1);
-
- priv->zoom_one = gtk_tool_button_new_from_stock (GTK_STOCK_ZOOM_100);
- gtk_tool_item_set_tooltip_text (priv->zoom_one, _("Zoom 1:1"));
- gtk_toolbar_insert (GTK_TOOLBAR (toolbar), priv->zoom_one, -1);
- g_signal_connect (priv->zoom_one,
- "clicked",
- G_CALLBACK (zoom_one_button_clicked),
- preview);
- gtk_widget_show (GTK_WIDGET (priv->zoom_one));
-
- priv->zoom_fit = gtk_tool_button_new_from_stock (GTK_STOCK_ZOOM_FIT);
- gtk_tool_item_set_tooltip_text (priv->zoom_fit, _("Zoom to fit the whole page"));
- gtk_toolbar_insert (GTK_TOOLBAR (toolbar), priv->zoom_fit, -1);
- g_signal_connect (priv->zoom_fit,
- "clicked",
- G_CALLBACK (zoom_fit_button_clicked),
- preview);
- gtk_widget_show (GTK_WIDGET (priv->zoom_fit));
-
- priv->zoom_in = gtk_tool_button_new_from_stock (GTK_STOCK_ZOOM_IN);
- gtk_tool_item_set_tooltip_text (priv->zoom_in, _("Zoom the page in"));
- gtk_toolbar_insert (GTK_TOOLBAR (toolbar), priv->zoom_in, -1);
- g_signal_connect (priv->zoom_in,
- "clicked",
- G_CALLBACK (zoom_in_button_clicked),
- preview);
- gtk_widget_show (GTK_WIDGET (priv->zoom_in));
-
- priv->zoom_out = gtk_tool_button_new_from_stock (GTK_STOCK_ZOOM_OUT);
- gtk_tool_item_set_tooltip_text (priv->zoom_out, _("Zoom the page out"));
- gtk_toolbar_insert (GTK_TOOLBAR (toolbar), priv->zoom_out, -1);
- g_signal_connect (priv->zoom_out,
- "clicked",
- G_CALLBACK (zoom_out_button_clicked),
- preview);
- gtk_widget_show (GTK_WIDGET (priv->zoom_out));
-
- i = gtk_separator_tool_item_new ();
- gtk_widget_show (GTK_WIDGET (i));
- gtk_toolbar_insert (GTK_TOOLBAR (toolbar), i, -1);
-
- i = gtk_tool_button_new (NULL, _("_Close Preview"));
- gtk_tool_button_set_use_underline (GTK_TOOL_BUTTON (i), TRUE);
- gtk_tool_item_set_is_important (i, TRUE);
- gtk_tool_item_set_tooltip_text (i, _("Close print preview"));
- g_signal_connect (i, "clicked",
- G_CALLBACK (close_button_clicked), preview);
- gtk_widget_show (GTK_WIDGET (i));
- gtk_toolbar_insert (GTK_TOOLBAR (toolbar), i, -1);
-}
-
-static gint
-get_first_page_displayed (GeditPrintPreview *preview)
-{
- GeditPrintPreviewPrivate *priv;
-
- priv = preview->priv;
-
- return priv->cur_page - priv->cur_page % (priv->cols * priv->rows);
-}
-
-/* returns the page number (starting from 0) or -1 if no page */
-static gint
-get_page_at_coords (GeditPrintPreview *preview,
- gint x,
- gint y)
-{
- GeditPrintPreviewPrivate *priv;
- GtkAdjustment *hadj, *vadj;
- gint r, c, pg;
-
- priv = preview->priv;
-
- if (priv->tile_h <= 0 || priv->tile_h <= 0)
- return -1;
-
- hadj = gtk_layout_get_hadjustment (GTK_LAYOUT (priv->layout));
- vadj = gtk_layout_get_vadjustment (GTK_LAYOUT (priv->layout));
-
- x += gtk_adjustment_get_value (hadj);
- y += gtk_adjustment_get_value (vadj);
-
- r = 1 + y / (priv->tile_h);
- c = 1 + x / (priv->tile_w);
-
- if (c > priv->cols)
- return -1;
-
- pg = get_first_page_displayed (preview) - 1;
- pg += (r - 1) * priv->cols + c;
-
- if (pg >= priv->n_pages)
- return -1;
-
- /* FIXME: we could try to be picky and check
- * if we actually are inside the page */
- return pg;
-}
-
-static gboolean
-preview_layout_query_tooltip (GtkWidget *widget,
- gint x,
- gint y,
- gboolean keyboard_tip,
- GtkTooltip *tooltip,
- GeditPrintPreview *preview)
-{
- gint pg;
- gchar *tip;
-
- pg = get_page_at_coords (preview, x, y);
- if (pg < 0)
- return FALSE;
-
- tip = g_strdup_printf (_("Page %d of %d"), pg + 1, preview->priv->n_pages);
- gtk_tooltip_set_text (tooltip, tip);
- g_free (tip);
-
- return TRUE;
-}
-
-static gint
-preview_layout_key_press (GtkWidget *widget,
- GdkEventKey *event,
- GeditPrintPreview *preview)
-{
- GeditPrintPreviewPrivate *priv;
- GtkAdjustment *hadj, *vadj;
- double x, y;
- guint h, w;
- double hlower, hupper, vlower, vupper;
- double hpage, vpage;
- double hstep, vstep;
- gboolean domove = FALSE;
- gboolean ret = TRUE;
-
- priv = preview->priv;
-
- hadj = gtk_layout_get_hadjustment (GTK_LAYOUT (priv->layout));
- vadj = gtk_layout_get_vadjustment (GTK_LAYOUT (priv->layout));
-
- x = gtk_adjustment_get_value (hadj);
- y = gtk_adjustment_get_value (vadj);
-
- g_object_get (hadj,
- "lower", &hlower,
- "upper", &hupper,
- "page-size", &hpage,
- NULL);
- g_object_get (vadj,
- "lower", &vlower,
- "upper", &vupper,
- "page-size", &vpage,
- NULL);
-
- gtk_layout_get_size (GTK_LAYOUT (priv->layout), &w, &h);
-
- hstep = 10;
- vstep = 10;
-
- switch (event->keyval) {
- case '1':
- set_zoom_fit_to_size (preview);
- break;
- case '+':
- case '=':
- case GDK_KP_Add:
- zoom_in (preview);
- break;
- case '-':
- case '_':
- case GDK_KP_Subtract:
- zoom_out (preview);
- break;
- case GDK_KP_Right:
- case GDK_Right:
- if (event->state & GDK_SHIFT_MASK)
- x = hupper - hpage;
- else
- x = MIN (hupper - hpage, x + hstep);
- domove = TRUE;
- break;
- case GDK_KP_Left:
- case GDK_Left:
- if (event->state & GDK_SHIFT_MASK)
- x = hlower;
- else
- x = MAX (hlower, x - hstep);
- domove = TRUE;
- break;
- case GDK_KP_Up:
- case GDK_Up:
- if (event->state & GDK_SHIFT_MASK)
- goto page_up;
- y = MAX (vlower, y - vstep);
- domove = TRUE;
- break;
- case GDK_KP_Down:
- case GDK_Down:
- if (event->state & GDK_SHIFT_MASK)
- goto page_down;
- y = MIN (vupper - vpage, y + vstep);
- domove = TRUE;
- break;
- case GDK_KP_Page_Up:
- case GDK_Page_Up:
- case GDK_Delete:
- case GDK_KP_Delete:
- case GDK_BackSpace:
- page_up:
- if (y <= vlower)
- {
- if (preview->priv->cur_page > 0)
- {
- goto_page (preview, preview->priv->cur_page - 1);
- y = (vupper - vpage);
- }
- }
- else
- {
- y = vlower;
- }
- domove = TRUE;
- break;
- case GDK_KP_Page_Down:
- case GDK_Page_Down:
- case ' ':
- page_down:
- if (y >= (vupper - vpage))
- {
- if (preview->priv->cur_page < preview->priv->n_pages - 1)
- {
- goto_page (preview, preview->priv->cur_page + 1);
- y = vlower;
- }
- }
- else
- {
- y = (vupper - vpage);
- }
- domove = TRUE;
- break;
- case GDK_KP_Home:
- case GDK_Home:
- goto_page (preview, 0);
- y = 0;
- domove = TRUE;
- break;
- case GDK_KP_End:
- case GDK_End:
- goto_page (preview, preview->priv->n_pages - 1);
- y = 0;
- domove = TRUE;
- break;
- case GDK_Escape:
- gtk_widget_destroy (GTK_WIDGET (preview));
- break;
- case 'c':
- if (event->state & GDK_MOD1_MASK)
- {
- gtk_widget_destroy (GTK_WIDGET (preview));
- }
- break;
- case 'p':
- if (event->state & GDK_MOD1_MASK)
- {
- gtk_widget_grab_focus (preview->priv->page_entry);
- }
- break;
- default:
- /* by default do not stop the default handler */
- ret = FALSE;
- }
-
- if (domove)
- {
- gtk_adjustment_set_value (hadj, x);
- gtk_adjustment_set_value (vadj, y);
-
- gtk_adjustment_value_changed (hadj);
- gtk_adjustment_value_changed (vadj);
- }
-
- return ret;
-}
-
-static void
-create_preview_layout (GeditPrintPreview *preview)
-{
- GeditPrintPreviewPrivate *priv;
- AtkObject *atko;
-
- priv = preview->priv;
-
- priv->layout = gtk_layout_new (NULL, NULL);
-// gtk_widget_set_double_buffered (priv->layout, FALSE);
-
- atko = gtk_widget_get_accessible (GTK_WIDGET (priv->layout));
- atk_object_set_name (atko, _("Page Preview"));
- atk_object_set_description (atko, _("The preview of a page in the document to be printed"));
-
- gtk_widget_add_events (priv->layout,
- GDK_POINTER_MOTION_MASK |
- GDK_BUTTON_PRESS_MASK |
- GDK_KEY_PRESS_MASK);
-
- GTK_WIDGET_SET_FLAGS (priv->layout, GTK_CAN_FOCUS);
-
- g_signal_connect (priv->layout,
- "key-press-event",
- G_CALLBACK (preview_layout_key_press),
- preview);
-
- g_object_set (priv->layout, "has-tooltip", TRUE, NULL);
- g_signal_connect (priv->layout,
- "query-tooltip",
- G_CALLBACK (preview_layout_query_tooltip),
- preview);
-
- priv->scrolled_window = gtk_scrolled_window_new (NULL, NULL);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (priv->scrolled_window),
- GTK_POLICY_AUTOMATIC,
- GTK_POLICY_AUTOMATIC);
-
- gtk_container_add (GTK_CONTAINER (priv->scrolled_window), priv->layout);
- gtk_box_pack_end (GTK_BOX (preview),
- priv->scrolled_window,
- TRUE, TRUE, 0);
-
- gtk_widget_show_all (GTK_WIDGET (priv->scrolled_window));
- gtk_widget_grab_focus (GTK_WIDGET (priv->layout));
-}
-
-static void
-gedit_print_preview_init (GeditPrintPreview *preview)
-{
- GeditPrintPreviewPrivate *priv;
-
- priv = G_TYPE_INSTANCE_GET_PRIVATE (preview,
- GEDIT_TYPE_PRINT_PREVIEW,
- GeditPrintPreviewPrivate);
-
- preview->priv = priv;
-
- priv->operation = NULL;
- priv->context = NULL;
- priv->gtk_preview = NULL;
-
- create_bar (preview);
- create_preview_layout (preview);
-
- // FIXME
- priv->cur_page = 0;
- priv->paper_w = 0;
- priv->paper_h = 0;
- priv->dpi = PRINTER_DPI;
- priv->scale = 1.0;
- priv->rows = 1;
- priv->cols = 1;
-}
-
-static void
-draw_page_content (cairo_t *cr,
- gint page_number,
- GeditPrintPreview *preview)
-{
- /* scale to the desired size */
- cairo_scale (cr, preview->priv->scale, preview->priv->scale);
-
- /* rotate acording to page orientation if needed */
- if ((preview->priv->orientation == GTK_PAGE_ORIENTATION_LANDSCAPE) ||
- (preview->priv->orientation == GTK_PAGE_ORIENTATION_REVERSE_LANDSCAPE))
- {
- cairo_matrix_t matrix;
-
- cairo_matrix_init (&matrix,
- 0, -1,
- 1, 0,
- 0, get_paper_width (preview));
- cairo_transform (cr, &matrix);
- }
-
- gtk_print_context_set_cairo_context (preview->priv->context,
- cr,
- preview->priv->dpi,
- preview->priv->dpi);
-
- gtk_print_operation_preview_render_page (preview->priv->gtk_preview,
- page_number);
-}
-
-/* For the frame, we scale and rotate manually, since
- * the line width should not depend on the zoom and
- * the drop shadow should be on the bottom right no matter
- * the orientation */
-static void
-draw_page_frame (cairo_t *cr,
- GeditPrintPreview *preview)
-{
- double w, h;
-
- w = get_paper_width (preview);
- h = get_paper_height (preview);
-
- if ((preview->priv->orientation == GTK_PAGE_ORIENTATION_LANDSCAPE) ||
- (preview->priv->orientation == GTK_PAGE_ORIENTATION_REVERSE_LANDSCAPE))
- {
- double tmp;
-
- tmp = w;
- w = h;
- h = tmp;
- }
-
- w *= preview->priv->scale;
- h *= preview->priv->scale;
-
- /* drop shadow */
- cairo_set_source_rgb (cr, 0, 0, 0);
- cairo_rectangle (cr,
- PAGE_SHADOW_OFFSET, PAGE_SHADOW_OFFSET,
- w, h);
- cairo_fill (cr);
-
- /* page frame */
- cairo_set_source_rgb (cr, 1, 1, 1);
- cairo_rectangle (cr,
- 0, 0,
- w, h);
- cairo_fill_preserve (cr);
- cairo_set_source_rgb (cr, 0, 0, 0);
- cairo_set_line_width (cr, 1);
- cairo_stroke (cr);
-}
-
-static void
-draw_page (cairo_t *cr,
- double x,
- double y,
- gint page_number,
- GeditPrintPreview *preview)
-{
- cairo_save (cr);
-
- /* move to the page top left corner */
- cairo_translate (cr, x + PAGE_PAD, y + PAGE_PAD);
-
- draw_page_frame (cr, preview);
- draw_page_content (cr, page_number, preview);
-
- cairo_restore (cr);
-}
-
-static gboolean
-preview_expose (GtkWidget *widget,
- GdkEventExpose *event,
- GeditPrintPreview *preview)
-{
- GeditPrintPreviewPrivate *priv;
- GdkWindow *bin_window;
- cairo_t *cr;
- gint pg;
- gint i, j;
-
- priv = preview->priv;
-
- bin_window = gtk_layout_get_bin_window (GTK_LAYOUT (priv->layout));
- if (event->window != bin_window)
- return FALSE;
-
- cr = gdk_cairo_create (bin_window);
-
- gdk_cairo_rectangle (cr, &event->area);
- cairo_clip (cr);
-
- /* get the first page to display */
- pg = get_first_page_displayed (preview);
-
- for (i = 0; i < priv->cols; ++i)
- {
- for (j = 0; j < priv->rows; ++j)
- {
- if (!gtk_print_operation_preview_is_selected (priv->gtk_preview,
- pg))
- {
- continue;
- }
-
- if (pg == priv->n_pages)
- break;
-
- draw_page (cr,
- j * priv->tile_w,
- i * priv->tile_h,
- pg,
- preview);
-
- ++pg;
- }
- }
- cairo_destroy (cr);
-
- return TRUE;
-}
-
-static double
-get_screen_dpi (GeditPrintPreview *preview)
-{
- GdkScreen *screen;
- double dpi;
-
- screen = gtk_widget_get_screen (GTK_WIDGET (preview));
-
- dpi = gdk_screen_get_resolution (screen);
- if (dpi < 30. || 600. < dpi)
- {
- g_warning ("Invalid the x-resolution for the screen, assuming 96dpi");
- dpi = 96.;
- }
-
- return dpi;
-}
-
-static void
-set_n_pages (GeditPrintPreview *preview,
- gint n_pages)
-{
- gchar *str;
-
- preview->priv->n_pages = n_pages;
-
- // FIXME: count the visible pages
-
- str = g_strdup_printf ("%d", n_pages);
- gtk_label_set_markup (GTK_LABEL (preview->priv->last), str);
- g_free (str);
-}
-
-static void
-preview_ready (GtkPrintOperationPreview *gtk_preview,
- GtkPrintContext *context,
- GeditPrintPreview *preview)
-{
- gint n_pages;
-
- g_object_get (preview->priv->operation, "n-pages", &n_pages, NULL);
- set_n_pages (preview, n_pages);
- goto_page (preview, 0);
-
- /* figure out the dpi */
- preview->priv->dpi = get_screen_dpi (preview);
-
- set_zoom_factor (preview, 1.0);
-
- /* let the default gtklayout handler clear the background */
- g_signal_connect_after (preview->priv->layout,
- "expose-event",
- G_CALLBACK (preview_expose),
- preview);
-
- gtk_widget_queue_draw (preview->priv->layout);
-}
-
-static void
-update_paper_size (GeditPrintPreview *preview,
- GtkPageSetup *page_setup)
-{
- GtkPaperSize *paper_size;
-
- paper_size = gtk_page_setup_get_paper_size (page_setup);
-
- preview->priv->paper_w = gtk_paper_size_get_width (paper_size, GTK_UNIT_INCH);
- preview->priv->paper_h = gtk_paper_size_get_height (paper_size, GTK_UNIT_INCH);
-
- preview->priv->orientation = gtk_page_setup_get_orientation (page_setup);
-}
-
-static void
-preview_got_page_size (GtkPrintOperationPreview *gtk_preview,
- GtkPrintContext *context,
- GtkPageSetup *page_setup,
- GeditPrintPreview *preview)
-{
- update_paper_size (preview, page_setup);
-}
-
-/* HACK: we need a dummy surface to paginate... can we use something simpler? */
-
-static cairo_status_t
-dummy_write_func (G_GNUC_UNUSED gpointer closure,
- G_GNUC_UNUSED const guchar *data,
- G_GNUC_UNUSED guint length)
-{
- return CAIRO_STATUS_SUCCESS;
-}
-
-#define PRINTER_DPI (72.)
-
-static cairo_surface_t *
-create_preview_surface_platform (GtkPaperSize *paper_size,
- double *dpi_x,
- double *dpi_y)
-{
- double width, height;
- cairo_surface_t *sf;
-
- width = gtk_paper_size_get_width (paper_size, GTK_UNIT_POINTS);
- height = gtk_paper_size_get_height (paper_size, GTK_UNIT_POINTS);
-
- *dpi_x = *dpi_y = PRINTER_DPI;
-
- sf = cairo_pdf_surface_create_for_stream (dummy_write_func, NULL,
- width, height);
- return sf;
-}
-
-static cairo_surface_t *
-create_preview_surface (GeditPrintPreview *preview,
- double *dpi_x,
- double *dpi_y)
-{
- GtkPageSetup *page_setup;
- GtkPaperSize *paper_size;
-
- page_setup = gtk_print_context_get_page_setup (preview->priv->context);
- /* gtk_page_setup_get_paper_size swaps width and height for landscape */
- paper_size = gtk_page_setup_get_paper_size (page_setup);
-
- return create_preview_surface_platform (paper_size, dpi_x, dpi_y);
-}
-
-GtkWidget *
-gedit_print_preview_new (GtkPrintOperation *op,
- GtkPrintOperationPreview *gtk_preview,
- GtkPrintContext *context)
-{
- GeditPrintPreview *preview;
- GtkPageSetup *page_setup;
- cairo_surface_t *surface;
- cairo_t *cr;
- double dpi_x, dpi_y;
-
- g_return_val_if_fail (GTK_IS_PRINT_OPERATION (op), NULL);
- g_return_val_if_fail (GTK_IS_PRINT_OPERATION_PREVIEW (gtk_preview), NULL);
-
- preview = g_object_new (GEDIT_TYPE_PRINT_PREVIEW, NULL);
-
- preview->priv->operation = g_object_ref (op);
- preview->priv->gtk_preview = g_object_ref (gtk_preview);
- preview->priv->context = g_object_ref (context);
-
- /* FIXME: is this legal?? */
- gtk_print_operation_set_unit (op, GTK_UNIT_POINTS);
-
- g_signal_connect (gtk_preview, "ready",
- G_CALLBACK (preview_ready), preview);
- g_signal_connect (gtk_preview, "got-page-size",
- G_CALLBACK (preview_got_page_size), preview);
-
- page_setup = gtk_print_context_get_page_setup (preview->priv->context);
- update_paper_size (preview, page_setup);
-
- /* FIXME: we need a cr to paginate... but we can't get the drawing
- * area surface because it's not there yet... for now I create
- * a dummy pdf surface */
-
- surface = create_preview_surface (preview, &dpi_x, &dpi_y);
- cr = cairo_create (surface);
- gtk_print_context_set_cairo_context (context, cr, dpi_x, dpi_y);
- cairo_destroy (cr);
- cairo_surface_destroy (surface);
-
- return GTK_WIDGET (preview);
-}
-
diff --git a/gedit/gedit-print-preview.h b/gedit/gedit-print-preview.h
deleted file mode 100755
index f86ef87a..00000000
--- a/gedit/gedit-print-preview.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * gedit-print-preview.h
- *
- * Copyright (C) 2008 Paolo Borelli
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 1998-2006. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id: gedit-commands-search.c 5931 2007-09-25 20:05:40Z pborelli $
- */
-
-
-#ifndef __GEDIT_PRINT_PREVIEW_H__
-#define __GEDIT_PRINT_PREVIEW_H__
-
-#include <gtk/gtk.h>
-
-G_BEGIN_DECLS
-
-#define GEDIT_TYPE_PRINT_PREVIEW (gedit_print_preview_get_type ())
-#define GEDIT_PRINT_PREVIEW(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), GEDIT_TYPE_PRINT_PREVIEW, GeditPrintPreview))
-#define GEDIT_PRINT_PREVIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEDIT_TYPE_PRINT_PREVIEW, GeditPrintPreviewClass))
-#define GEDIT_IS_PRINT_PREVIEW(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GEDIT_TYPE_PRINT_PREVIEW))
-#define GEDIT_IS_PRINT_PREVIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEDIT_TYPE_PRINT_PREVIEW))
-#define GEDIT_PRINT_PREVIEW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEDIT_TYPE_PRINT_PREVIEW, GeditPrintPreviewClass))
-
-typedef struct _GeditPrintPreview GeditPrintPreview;
-typedef struct _GeditPrintPreviewPrivate GeditPrintPreviewPrivate;
-typedef struct _GeditPrintPreviewClass GeditPrintPreviewClass;
-
-struct _GeditPrintPreview
-{
- GtkVBox parent;
- GeditPrintPreviewPrivate *priv;
-};
-
-struct _GeditPrintPreviewClass
-{
- GtkVBoxClass parent_class;
-
- void (* close) (GeditPrintPreview *preview);
-};
-
-
-GType gedit_print_preview_get_type (void) G_GNUC_CONST;
-
-GtkWidget *gedit_print_preview_new (GtkPrintOperation *op,
- GtkPrintOperationPreview *gtk_preview,
- GtkPrintContext *context);
-
-G_END_DECLS
-
-#endif /* __GEDIT_PRINT_PREVIEW_H__ */
diff --git a/gedit/gedit-progress-message-area.c b/gedit/gedit-progress-message-area.c
deleted file mode 100755
index d408baee..00000000
--- a/gedit/gedit-progress-message-area.c
+++ /dev/null
@@ -1,261 +0,0 @@
-/*
- * gedit-progress-message-area.c
- * This file is part of gedit
- *
- * Copyright (C) 2005 - Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
- /* TODO: add properties */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <glib/gi18n.h>
-#include <gtk/gtk.h>
-#include <gdk/gdk.h>
-
-#include "gedit-progress-message-area.h"
-
-enum {
- PROP_0,
- PROP_HAS_CANCEL_BUTTON
-};
-
-
-#define GEDIT_PROGRESS_MESSAGE_AREA_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), GEDIT_TYPE_PROGRESS_MESSAGE_AREA, GeditProgressMessageAreaPrivate))
-
-struct _GeditProgressMessageAreaPrivate
-{
- GtkWidget *image;
- GtkWidget *label;
- GtkWidget *progress;
-};
-
-#if !GTK_CHECK_VERSION (2, 17, 1)
-G_DEFINE_TYPE(GeditProgressMessageArea, gedit_progress_message_area, GEDIT_TYPE_MESSAGE_AREA)
-#else
-G_DEFINE_TYPE(GeditProgressMessageArea, gedit_progress_message_area, GTK_TYPE_INFO_BAR)
-#endif
-
-static void
-gedit_progress_message_area_set_has_cancel_button (GeditProgressMessageArea *area,
- gboolean has_button)
-{
- if (has_button)
-#if !GTK_CHECK_VERSION (2, 17, 1)
- gedit_message_area_add_button (GEDIT_MESSAGE_AREA (area),
- GTK_STOCK_CANCEL,
- GTK_RESPONSE_CANCEL);
-#else
- gtk_info_bar_add_button (GTK_INFO_BAR (area),
- GTK_STOCK_CANCEL,
- GTK_RESPONSE_CANCEL);
-#endif
-
- g_object_notify (G_OBJECT (area), "has-cancel-button");
-}
-
-static void
-gedit_progress_message_area_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- GeditProgressMessageArea *area;
-
- area = GEDIT_PROGRESS_MESSAGE_AREA (object);
-
- switch (prop_id)
- {
- case PROP_HAS_CANCEL_BUTTON:
- gedit_progress_message_area_set_has_cancel_button (area,
- g_value_get_boolean (value));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gedit_progress_message_area_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- GeditProgressMessageArea *area;
-
- area = GEDIT_PROGRESS_MESSAGE_AREA (object);
-
- switch (prop_id)
- {
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gedit_progress_message_area_class_init (GeditProgressMessageAreaClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-
- gobject_class->set_property = gedit_progress_message_area_set_property;
- gobject_class->get_property = gedit_progress_message_area_get_property;
-
- g_object_class_install_property (gobject_class,
- PROP_HAS_CANCEL_BUTTON,
- g_param_spec_boolean ("has-cancel-button",
- "Has Cancel Button",
- "If the message area has a cancel button",
- TRUE,
- G_PARAM_WRITABLE |
- G_PARAM_CONSTRUCT_ONLY |
- G_PARAM_STATIC_STRINGS));
-
- g_type_class_add_private (gobject_class, sizeof(GeditProgressMessageAreaPrivate));
-}
-
-static void
-gedit_progress_message_area_init (GeditProgressMessageArea *area)
-{
- GtkWidget *vbox;
- GtkWidget *hbox;
-
- area->priv = GEDIT_PROGRESS_MESSAGE_AREA_GET_PRIVATE (area);
-
- vbox = gtk_vbox_new (FALSE, 6);
- gtk_widget_show (vbox);
-
- hbox = gtk_hbox_new (FALSE, 4);
- gtk_widget_show (hbox);
- gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
-
- area->priv->image = gtk_image_new_from_icon_name (GTK_STOCK_MISSING_IMAGE,
- GTK_ICON_SIZE_SMALL_TOOLBAR);
- gtk_widget_show (area->priv->image);
- gtk_misc_set_alignment (GTK_MISC (area->priv->image), 0.5, 0.5);
- gtk_box_pack_start (GTK_BOX (hbox), area->priv->image, FALSE, FALSE, 4);
-
- area->priv->label = gtk_label_new ("");
- gtk_widget_show (area->priv->label);
- gtk_box_pack_start (GTK_BOX (hbox), area->priv->label, TRUE, TRUE, 0);
- gtk_label_set_use_markup (GTK_LABEL (area->priv->label), TRUE);
- gtk_misc_set_alignment (GTK_MISC (area->priv->label), 0, 0.5);
- gtk_label_set_ellipsize (GTK_LABEL (area->priv->label),
- PANGO_ELLIPSIZE_END);
-
- area->priv->progress = gtk_progress_bar_new ();
- gtk_widget_show (area->priv->progress);
- gtk_box_pack_start (GTK_BOX (vbox), area->priv->progress, TRUE, FALSE, 0);
- gtk_widget_set_size_request (area->priv->progress, -1, 15);
-
-#if !GTK_CHECK_VERSION (2, 17, 1)
- gedit_message_area_set_contents (GEDIT_MESSAGE_AREA (area),
- vbox);
-#else
- GtkWidget *content;
-
- content = gtk_info_bar_get_content_area (GTK_INFO_BAR (area));
- gtk_container_add (GTK_CONTAINER (content), vbox);
-#endif
-}
-
-GtkWidget *
-gedit_progress_message_area_new (const gchar *stock_id,
- const gchar *markup,
- gboolean has_cancel)
-{
- GeditProgressMessageArea *area;
-
- g_return_val_if_fail (stock_id != NULL, NULL);
- g_return_val_if_fail (markup != NULL, NULL);
-
- area = GEDIT_PROGRESS_MESSAGE_AREA (g_object_new (GEDIT_TYPE_PROGRESS_MESSAGE_AREA,
- "has-cancel-button", has_cancel,
- NULL));
-
- gedit_progress_message_area_set_stock_image (area,
- stock_id);
-
- gedit_progress_message_area_set_markup (area,
- markup);
-
- return GTK_WIDGET (area);
-}
-
-void
-gedit_progress_message_area_set_stock_image (GeditProgressMessageArea *area,
- const gchar *stock_id)
-{
- g_return_if_fail (GEDIT_IS_PROGRESS_MESSAGE_AREA (area));
- g_return_if_fail (stock_id != NULL);
-
- gtk_image_set_from_stock (GTK_IMAGE (area->priv->image),
- stock_id,
- GTK_ICON_SIZE_SMALL_TOOLBAR);
-}
-
-void
-gedit_progress_message_area_set_markup (GeditProgressMessageArea *area,
- const gchar *markup)
-{
- g_return_if_fail (GEDIT_IS_PROGRESS_MESSAGE_AREA (area));
- g_return_if_fail (markup != NULL);
-
- gtk_label_set_markup (GTK_LABEL (area->priv->label),
- markup);
-}
-
-void
-gedit_progress_message_area_set_text (GeditProgressMessageArea *area,
- const gchar *text)
-{
- g_return_if_fail (GEDIT_IS_PROGRESS_MESSAGE_AREA (area));
- g_return_if_fail (text != NULL);
-
- gtk_label_set_text (GTK_LABEL (area->priv->label),
- text);
-}
-
-void
-gedit_progress_message_area_set_fraction (GeditProgressMessageArea *area,
- gdouble fraction)
-{
- g_return_if_fail (GEDIT_IS_PROGRESS_MESSAGE_AREA (area));
-
- gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (area->priv->progress),
- fraction);
-}
-
-void
-gedit_progress_message_area_pulse (GeditProgressMessageArea *area)
-{
- g_return_if_fail (GEDIT_IS_PROGRESS_MESSAGE_AREA (area));
-
- gtk_progress_bar_pulse (GTK_PROGRESS_BAR (area->priv->progress));
-}
diff --git a/gedit/gedit-progress-message-area.h b/gedit/gedit-progress-message-area.h
deleted file mode 100755
index ed5d8e32..00000000
--- a/gedit/gedit-progress-message-area.h
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * gedit-progress-message-area.h
- * This file is part of gedit
- *
- * Copyright (C) 2005 - Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifndef __GEDIT_PROGRESS_MESSAGE_AREA_H__
-#define __GEDIT_PROGRESS_MESSAGE_AREA_H__
-
-#if !GTK_CHECK_VERSION (2, 17, 1)
-#include <gedit/gedit-message-area.h>
-#else
-#include <gtk/gtk.h>
-#endif
-
-G_BEGIN_DECLS
-
-/*
- * Type checking and casting macros
- */
-#define GEDIT_TYPE_PROGRESS_MESSAGE_AREA (gedit_progress_message_area_get_type())
-#define GEDIT_PROGRESS_MESSAGE_AREA(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GEDIT_TYPE_PROGRESS_MESSAGE_AREA, GeditProgressMessageArea))
-#define GEDIT_PROGRESS_MESSAGE_AREA_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GEDIT_TYPE_PROGRESS_MESSAGE_AREA, GeditProgressMessageAreaClass))
-#define GEDIT_IS_PROGRESS_MESSAGE_AREA(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GEDIT_TYPE_PROGRESS_MESSAGE_AREA))
-#define GEDIT_IS_PROGRESS_MESSAGE_AREA_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEDIT_TYPE_PROGRESS_MESSAGE_AREA))
-#define GEDIT_PROGRESS_MESSAGE_AREA_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GEDIT_TYPE_PROGRESS_MESSAGE_AREA, GeditProgressMessageAreaClass))
-
-/* Private structure type */
-typedef struct _GeditProgressMessageAreaPrivate GeditProgressMessageAreaPrivate;
-
-/*
- * Main object structure
- */
-typedef struct _GeditProgressMessageArea GeditProgressMessageArea;
-
-struct _GeditProgressMessageArea
-{
-#if !GTK_CHECK_VERSION (2, 17, 1)
- GeditMessageArea parent;
-#else
- GtkInfoBar parent;
-#endif
-
- /*< private > */
- GeditProgressMessageAreaPrivate *priv;
-};
-
-/*
- * Class definition
- */
-typedef struct _GeditProgressMessageAreaClass GeditProgressMessageAreaClass;
-
-struct _GeditProgressMessageAreaClass
-{
-#if !GTK_CHECK_VERSION (2, 17, 1)
- GeditMessageAreaClass parent_class;
-#else
- GtkInfoBarClass parent_class;
-#endif
-};
-
-/*
- * Public methods
- */
-GType gedit_progress_message_area_get_type (void) G_GNUC_CONST;
-
-GtkWidget *gedit_progress_message_area_new (const gchar *stock_id,
- const gchar *markup,
- gboolean has_cancel);
-
-void gedit_progress_message_area_set_stock_image (GeditProgressMessageArea *area,
- const gchar *stock_id);
-
-void gedit_progress_message_area_set_markup (GeditProgressMessageArea *area,
- const gchar *markup);
-
-void gedit_progress_message_area_set_text (GeditProgressMessageArea *area,
- const gchar *text);
-
-void gedit_progress_message_area_set_fraction (GeditProgressMessageArea *area,
- gdouble fraction);
-
-void gedit_progress_message_area_pulse (GeditProgressMessageArea *area);
-
-
-G_END_DECLS
-
-#endif /* __GEDIT_PROGRESS_MESSAGE_AREA_H__ */
diff --git a/gedit/gedit-session.c b/gedit/gedit-session.c
deleted file mode 100755
index 3dc9f126..00000000
--- a/gedit/gedit-session.c
+++ /dev/null
@@ -1,601 +0,0 @@
-/*
- * gedit-session.c - Basic session management for gedit
- * This file is part of gedit
- *
- * Copyright (C) 2002 Ximian, Inc.
- * Copyright (C) 2005 - Paolo Maggi
- *
- * Author: Federico Mena-Quintero <[email protected]>
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2002-2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <unistd.h>
-#include <string.h>
-
-#include <libxml/tree.h>
-#include <libxml/xmlwriter.h>
-
-#include "gedit-session.h"
-
-#include "gedit-debug.h"
-#include "gedit-plugins-engine.h"
-#include "gedit-prefs-manager-app.h"
-#include "gedit-metadata-manager.h"
-#include "gedit-window.h"
-#include "gedit-app.h"
-#include "gedit-commands.h"
-#include "dialogs/gedit-close-confirmation-dialog.h"
-#include "smclient/eggsmclient.h"
-
-/* The master client we use for SM */
-static EggSMClient *master_client = NULL;
-
-/* global var used during quit_requested */
-static GSList *window_dirty_list;
-
-static void ask_next_confirmation (void);
-
-#define GEDIT_SESSION_LIST_OF_DOCS_TO_SAVE "gedit-session-list-of-docs-to-save-key"
-
-static void
-save_window_session (GKeyFile *state_file,
- const gchar *group_name,
- GeditWindow *window)
-{
- const gchar *role;
- int width, height;
- GeditPanel *panel;
- GList *docs, *l;
- GPtrArray *doc_array;
- GeditDocument *active_document;
- gchar *uri;
-
- gedit_debug (DEBUG_SESSION);
-
- role = gtk_window_get_role (GTK_WINDOW (window));
- g_key_file_set_string (state_file, group_name, "role", role);
- gtk_window_get_size (GTK_WINDOW (window), &width, &height);
- g_key_file_set_integer (state_file, group_name, "width", width);
- g_key_file_set_integer (state_file, group_name, "height", height);
-
- panel = gedit_window_get_side_panel (window);
- g_key_file_set_boolean (state_file, group_name, "side-panel-visible",
- GTK_WIDGET_VISIBLE (panel));
-
- panel = gedit_window_get_bottom_panel (window);
- g_key_file_set_boolean (state_file, group_name, "bottom-panel-visible",
- GTK_WIDGET_VISIBLE (panel));
-
- active_document = gedit_window_get_active_document (window);
- if (active_document)
- {
- uri = gedit_document_get_uri (active_document);
- g_key_file_set_string (state_file, group_name,
- "active-document", uri);
- }
-
- docs = gedit_window_get_documents (window);
-
- doc_array = g_ptr_array_new ();
- for (l = docs; l != NULL; l = g_list_next (l))
- {
- uri = gedit_document_get_uri (GEDIT_DOCUMENT (l->data));
-
- if (uri != NULL)
- g_ptr_array_add (doc_array, uri);
-
- }
- g_list_free (docs);
-
- if (doc_array->len)
- {
- guint i;
-
- g_key_file_set_string_list (state_file, group_name,
- "documents",
- (const char **)doc_array->pdata,
- doc_array->len);
- for (i = 0; i < doc_array->len; i++)
- g_free (doc_array->pdata[i]);
- }
- g_ptr_array_free (doc_array, TRUE);
-}
-
-static void
-client_save_state_cb (EggSMClient *client,
- GKeyFile *state_file,
- gpointer user_data)
-{
- const GList *windows;
- gchar *group_name;
- int n;
-
- windows = gedit_app_get_windows (gedit_app_get_default ());
- n = 1;
-
- while (windows != NULL)
- {
- group_name = g_strdup_printf ("gedit window %d", n);
- save_window_session (state_file,
- group_name,
- GEDIT_WINDOW (windows->data));
- g_free (group_name);
-
- windows = g_list_next (windows);
- n++;
- }
-}
-
-static void
-window_handled (GeditWindow *window)
-{
- window_dirty_list = g_slist_remove (window_dirty_list, window);
-
- /* whee... we made it! */
- if (window_dirty_list == NULL)
- egg_sm_client_will_quit (master_client, TRUE);
- else
- ask_next_confirmation ();
-}
-
-static void
-window_state_change (GeditWindow *window,
- GParamSpec *pspec,
- gpointer data)
-{
- GeditWindowState state;
- GList *unsaved_docs;
- GList *docs_to_save;
- GList *l;
- gboolean done = TRUE;
-
- state = gedit_window_get_state (window);
-
- /* we are still saving */
- if (state & GEDIT_WINDOW_STATE_SAVING)
- return;
-
- unsaved_docs = gedit_window_get_unsaved_documents (window);
-
- docs_to_save = g_object_get_data (G_OBJECT (window),
- GEDIT_SESSION_LIST_OF_DOCS_TO_SAVE);
-
-
- for (l = docs_to_save; l != NULL; l = l->next)
- {
- if (g_list_find (unsaved_docs, l->data))
- {
- done = FALSE;
- break;
- }
- }
-
- if (done)
- {
- g_signal_handlers_disconnect_by_func (window, window_state_change, data);
- g_list_free (docs_to_save);
- g_object_set_data (G_OBJECT (window),
- GEDIT_SESSION_LIST_OF_DOCS_TO_SAVE,
- NULL);
-
- window_handled (window);
- }
-
- g_list_free (unsaved_docs);
-}
-
-static void
-close_confirmation_dialog_response_handler (GeditCloseConfirmationDialog *dlg,
- gint response_id,
- GeditWindow *window)
-{
- GList *selected_documents;
- GSList *l;
-
- gedit_debug (DEBUG_COMMANDS);
-
- switch (response_id)
- {
- case GTK_RESPONSE_YES:
- /* save selected docs */
-
- g_signal_connect (window,
- "notify::state",
- G_CALLBACK (window_state_change),
- NULL);
-
- selected_documents = gedit_close_confirmation_dialog_get_selected_documents (dlg);
-
- g_return_if_fail (g_object_get_data (G_OBJECT (window),
- GEDIT_SESSION_LIST_OF_DOCS_TO_SAVE) == NULL);
-
- g_object_set_data (G_OBJECT (window),
- GEDIT_SESSION_LIST_OF_DOCS_TO_SAVE,
- selected_documents);
-
- _gedit_cmd_file_save_documents_list (window, selected_documents);
-
- /* FIXME: also need to lock the window to prevent further changes... */
-
- break;
-
- case GTK_RESPONSE_NO:
- /* dont save */
- window_handled (window);
- break;
-
- default:
- /* disconnect window_state_changed where needed */
- for (l = window_dirty_list; l != NULL; l = l->next)
- g_signal_handlers_disconnect_by_func (window,
- window_state_change, NULL);
- g_slist_free (window_dirty_list);
- window_dirty_list = NULL;
-
- /* cancel shutdown */
- egg_sm_client_will_quit (master_client, FALSE);
-
- break;
- }
-
- gtk_widget_destroy (GTK_WIDGET (dlg));
-}
-
-static void
-show_confirmation_dialog (GeditWindow *window)
-{
- GList *unsaved_docs;
- GtkWidget *dlg;
-
- gedit_debug (DEBUG_SESSION);
-
- unsaved_docs = gedit_window_get_unsaved_documents (window);
-
- g_return_if_fail (unsaved_docs != NULL);
-
- if (unsaved_docs->next == NULL)
- {
- /* There is only one unsaved document */
- GeditTab *tab;
- GeditDocument *doc;
-
- doc = GEDIT_DOCUMENT (unsaved_docs->data);
-
- tab = gedit_tab_get_from_document (doc);
- g_return_if_fail (tab != NULL);
-
- gedit_window_set_active_tab (window, tab);
-
- dlg = gedit_close_confirmation_dialog_new_single (
- GTK_WINDOW (window),
- doc,
- TRUE);
- }
- else
- {
- dlg = gedit_close_confirmation_dialog_new (GTK_WINDOW (window),
- unsaved_docs,
- TRUE);
- }
-
- g_list_free (unsaved_docs);
-
- g_signal_connect (dlg,
- "response",
- G_CALLBACK (close_confirmation_dialog_response_handler),
- window);
-
- gtk_widget_show (dlg);
-}
-
-static void
-ask_next_confirmation (void)
-{
- g_return_if_fail (window_dirty_list != NULL);
-
- /* pop up the confirmation dialog for the first window
- * in the dirty list. The next confirmation is asked once
- * this one has been handled.
- */
- show_confirmation_dialog (GEDIT_WINDOW (window_dirty_list->data));
-}
-
-/* quit_requested handler for the master client */
-static void
-client_quit_requested_cb (EggSMClient *client, gpointer data)
-{
- GeditApp *app;
- const GList *l;
-
- gedit_debug (DEBUG_SESSION);
-
- app = gedit_app_get_default ();
-
- if (window_dirty_list != NULL)
- {
- g_critical ("global variable window_dirty_list not NULL");
- window_dirty_list = NULL;
- }
-
- for (l = gedit_app_get_windows (app); l != NULL; l = l->next)
- {
- if (gedit_window_get_unsaved_documents (GEDIT_WINDOW (l->data)) != NULL)
- {
- window_dirty_list = g_slist_prepend (window_dirty_list, l->data);
- }
- }
-
- /* no modified docs */
- if (window_dirty_list == NULL)
- {
- egg_sm_client_will_quit (client, TRUE);
-
- return;
- }
-
- ask_next_confirmation ();
-
- gedit_debug_message (DEBUG_SESSION, "END");
-}
-
-/* quit handler for the master client */
-static void
-client_quit_cb (EggSMClient *client, gpointer data)
-{
-#if 0
- gedit_debug (DEBUG_SESSION);
-
- if (!client->save_yourself_emitted)
- gedit_file_close_all ();
-
- gedit_debug_message (DEBUG_FILE, "All files closed.");
-
- matecomponent_mdi_destroy (MATECOMPONENT_MDI (gedit_mdi));
-
- gedit_debug_message (DEBUG_FILE, "Unref gedit_mdi.");
-
- g_object_unref (G_OBJECT (gedit_mdi));
-
- gedit_debug_message (DEBUG_FILE, "Unref gedit_mdi: DONE");
-
- gedit_debug_message (DEBUG_FILE, "Unref gedit_app_server.");
-
- matecomponent_object_unref (gedit_app_server);
-
- gedit_debug_message (DEBUG_FILE, "Unref gedit_app_server: DONE");
-#endif
-
- gtk_main_quit ();
-}
-
-/**
- * gedit_session_init:
- *
- * Initializes session management support. This function should be called near
- * the beginning of the program.
- **/
-void
-gedit_session_init (void)
-{
- gedit_debug (DEBUG_SESSION);
-
- if (master_client)
- return;
-
- master_client = egg_sm_client_get ();
- g_signal_connect (master_client,
- "save_state",
- G_CALLBACK (client_save_state_cb),
- NULL);
- g_signal_connect (master_client,
- "quit_requested",
- G_CALLBACK (client_quit_requested_cb),
- NULL);
- g_signal_connect (master_client,
- "quit",
- G_CALLBACK (client_quit_cb),
- NULL);
-}
-
-/**
- * gedit_session_is_restored:
- *
- * Returns whether this gedit is running from a restarted session.
- *
- * Return value: TRUE if the session manager restarted us, FALSE otherwise.
- * This should be used to determine whether to pay attention to command line
- * arguments in case the session was not restored.
- **/
-gboolean
-gedit_session_is_restored (void)
-{
- gboolean restored;
-
- gedit_debug (DEBUG_SESSION);
-
- if (!master_client)
- return FALSE;
-
- restored = egg_sm_client_is_resumed (master_client);
-
- gedit_debug_message (DEBUG_SESSION, restored ? "RESTORED" : "NOT RESTORED");
-
- return restored;
-}
-
-static void
-parse_window (GKeyFile *state_file, const char *group_name)
-{
- GeditWindow *window;
- gchar *role, *active_document, **documents;
- int width, height;
- gboolean visible;
- GeditPanel *panel;
- GError *error = NULL;
-
- role = g_key_file_get_string (state_file, group_name, "role", NULL);
-
- gedit_debug_message (DEBUG_SESSION, "Window role: %s", role);
-
- window = _gedit_app_restore_window (gedit_app_get_default (), (gchar *) role);
- g_free (role);
-
- if (window == NULL)
- {
- g_warning ("Couldn't restore window");
- return;
- }
-
- width = g_key_file_get_integer (state_file, group_name,
- "width", &error);
- if (error)
- {
- g_clear_error (&error);
- width = -1;
- }
- height = g_key_file_get_integer (state_file, group_name,
- "height", &error);
- if (error)
- {
- g_clear_error (&error);
- height = -1;
- }
- gtk_window_set_default_size (GTK_WINDOW (window), width, height);
-
-
- visible = g_key_file_get_boolean (state_file, group_name,
- "side-panel-visible", &error);
- if (error)
- {
- g_clear_error (&error);
- visible = FALSE;
- }
-
- panel = gedit_window_get_side_panel (window);
-
- if (visible)
- {
- gedit_debug_message (DEBUG_SESSION, "Side panel visible");
- gtk_widget_show (GTK_WIDGET (panel));
- }
- else
- {
- gedit_debug_message (DEBUG_SESSION, "Side panel _NOT_ visible");
- gtk_widget_hide (GTK_WIDGET (panel));
- }
-
- visible = g_key_file_get_boolean (state_file, group_name,
- "bottom-panel-visible", &error);
- if (error)
- {
- g_clear_error (&error);
- visible = FALSE;
- }
-
- panel = gedit_window_get_bottom_panel (window);
- if (visible)
- {
- gedit_debug_message (DEBUG_SESSION, "Bottom panel visible");
- gtk_widget_show (GTK_WIDGET (panel));
- }
- else
- {
- gedit_debug_message (DEBUG_SESSION, "Bottom panel _NOT_ visible");
- gtk_widget_hide (GTK_WIDGET (panel));
- }
-
- active_document = g_key_file_get_string (state_file, group_name,
- "active-document", NULL);
- documents = g_key_file_get_string_list (state_file, group_name,
- "documents", NULL, NULL);
- if (documents)
- {
- int i;
- gboolean jump_to = FALSE;
-
- for (i = 0; documents[i]; i++)
- {
- if (active_document != NULL)
- jump_to = strcmp (active_document,
- documents[i]) == 0;
-
- gedit_debug_message (DEBUG_SESSION,
- "URI: %s (%s)",
- documents[i],
- jump_to ? "active" : "not active");
- gedit_window_create_tab_from_uri (window,
- documents[i],
- NULL,
- 0,
- FALSE,
- jump_to);
- }
- g_strfreev (documents);
- }
-
- g_free (active_document);
-
- gtk_widget_show (GTK_WIDGET (window));
-}
-
-/**
- * gedit_session_load:
- *
- * Loads the session by fetching the necessary information from the session
- * manager and opening files.
- *
- * Return value: TRUE if the session was loaded successfully, FALSE otherwise.
- **/
-gboolean
-gedit_session_load (void)
-{
- GKeyFile *state_file;
- gchar **groups;
- int i;
-
- gedit_debug (DEBUG_SESSION);
-
- state_file = egg_sm_client_get_state_file (master_client);
- if (state_file == NULL)
- return FALSE;
-
- groups = g_key_file_get_groups (state_file, NULL);
-
- for (i = 0; groups[i] != NULL; i++)
- {
- if (g_str_has_prefix (groups[i], "gedit window "))
- parse_window (state_file, groups[i]);
- }
-
- g_strfreev (groups);
- g_key_file_free (state_file);
-
- return TRUE;
-}
diff --git a/gedit/gedit-session.h b/gedit/gedit-session.h
deleted file mode 100755
index ba59c131..00000000
--- a/gedit/gedit-session.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * gedit-session.h - Basic session management for gedit
- * This file is part of gedit
- *
- * Copyright (C) 2002 Ximian, Inc.
- * Copyright (C) 2005 - Paolo Maggi
- *
- * Author: Federico Mena-Quintero <[email protected]>
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2002-2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id
- */
-
-#ifndef __GEDIT_SESSION_H__
-#define __GEDIT_SESSION_H__
-
-#include <glib.h>
-
-G_BEGIN_DECLS
-
-void gedit_session_init (void);
-gboolean gedit_session_is_restored (void);
-gboolean gedit_session_load (void);
-
-G_END_DECLS
-
-#endif /* __GEDIT_SESSION_H__ */
diff --git a/gedit/gedit-smart-charset-converter.c b/gedit/gedit-smart-charset-converter.c
deleted file mode 100755
index e32b0b17..00000000
--- a/gedit/gedit-smart-charset-converter.c
+++ /dev/null
@@ -1,422 +0,0 @@
-/*
- * gedit-smart-charset-converter.c
- * This file is part of gedit
- *
- * Copyright (C) 2009 - Ignacio Casal Quinteiro
- *
- * gedit 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.
- *
- * gedit 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 gedit; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- */
-
-#include "gedit-smart-charset-converter.h"
-#include "gedit-debug.h"
-#include "gedit-document.h"
-
-#include <gio/gio.h>
-#include <glib/gi18n.h>
-
-#define GEDIT_SMART_CHARSET_CONVERTER_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE((object), GEDIT_TYPE_SMART_CHARSET_CONVERTER, GeditSmartCharsetConverterPrivate))
-
-struct _GeditSmartCharsetConverterPrivate
-{
- GCharsetConverter *charset_conv;
-
- GSList *encodings;
- GSList *current_encoding;
-
- guint is_utf8 : 1;
- guint use_first : 1;
-};
-
-static void gedit_smart_charset_converter_iface_init (GConverterIface *iface);
-
-G_DEFINE_TYPE_WITH_CODE (GeditSmartCharsetConverter, gedit_smart_charset_converter,
- G_TYPE_OBJECT,
- G_IMPLEMENT_INTERFACE (G_TYPE_CONVERTER,
- gedit_smart_charset_converter_iface_init))
-
-static void
-gedit_smart_charset_converter_finalize (GObject *object)
-{
- GeditSmartCharsetConverter *smart = GEDIT_SMART_CHARSET_CONVERTER (object);
-
- g_slist_free (smart->priv->encodings);
-
- gedit_debug_message (DEBUG_UTILS, "finalizing smart charset converter");
-
- G_OBJECT_CLASS (gedit_smart_charset_converter_parent_class)->finalize (object);
-}
-
-static void
-gedit_smart_charset_converter_dispose (GObject *object)
-{
- GeditSmartCharsetConverter *smart = GEDIT_SMART_CHARSET_CONVERTER (object);
-
- if (smart->priv->charset_conv != NULL)
- {
- g_object_unref (smart->priv->charset_conv);
- smart->priv->charset_conv = NULL;
- }
-
- gedit_debug_message (DEBUG_UTILS, "disposing smart charset converter");
-
- G_OBJECT_CLASS (gedit_smart_charset_converter_parent_class)->dispose (object);
-}
-
-static void
-gedit_smart_charset_converter_class_init (GeditSmartCharsetConverterClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->finalize = gedit_smart_charset_converter_finalize;
- object_class->dispose = gedit_smart_charset_converter_dispose;
-
- g_type_class_add_private (object_class, sizeof (GeditSmartCharsetConverterPrivate));
-}
-
-static void
-gedit_smart_charset_converter_init (GeditSmartCharsetConverter *smart)
-{
- smart->priv = GEDIT_SMART_CHARSET_CONVERTER_GET_PRIVATE (smart);
-
- smart->priv->charset_conv = NULL;
- smart->priv->encodings = NULL;
- smart->priv->current_encoding = NULL;
- smart->priv->is_utf8 = FALSE;
- smart->priv->use_first = FALSE;
-
- gedit_debug_message (DEBUG_UTILS, "initializing smart charset converter");
-}
-
-static const GeditEncoding *
-get_encoding (GeditSmartCharsetConverter *smart)
-{
- if (smart->priv->current_encoding == NULL)
- {
- smart->priv->current_encoding = smart->priv->encodings;
- }
- else
- {
- smart->priv->current_encoding = g_slist_next (smart->priv->current_encoding);
- }
-
- if (smart->priv->current_encoding != NULL)
- return (const GeditEncoding *)smart->priv->current_encoding->data;
-
-#if 0
- FIXME: uncomment this when using fallback
- /* If we tried all encodings, we return the first encoding */
- smart->priv->use_first = TRUE;
- smart->priv->current_encoding = smart->priv->encodings;
-
- return (const GeditEncoding *)smart->priv->current_encoding->data;
-#endif
- return NULL;
-}
-
-static gboolean
-try_convert (GCharsetConverter *converter,
- const void *inbuf,
- gsize inbuf_size)
-{
- GError *err;
- gsize bytes_read, nread;
- gsize bytes_written, nwritten;
- GConverterResult res;
- gchar *out;
- gboolean ret;
- gsize out_size;
-
- if (inbuf == NULL || inbuf_size == 0)
- {
- return FALSE;
- }
-
- err = NULL;
- nread = 0;
- nwritten = 0;
- out_size = inbuf_size * 4;
- out = g_malloc (out_size);
-
- do
- {
- res = g_converter_convert (G_CONVERTER (converter),
- inbuf + nread,
- inbuf_size - nread,
- out + nwritten,
- out_size - nwritten,
- G_CONVERTER_INPUT_AT_END,
- &bytes_read,
- &bytes_written,
- &err);
-
- nread += bytes_read;
- nwritten += bytes_written;
- } while (res != G_CONVERTER_FINISHED && res != G_CONVERTER_ERROR && err == NULL);
-
- if (err != NULL)
- {
- if (err->code == G_CONVERT_ERROR_PARTIAL_INPUT)
- {
- /* FIXME We can get partial input while guessing the
- encoding because we just take some amount of text
- to guess from. */
- ret = TRUE;
- }
- else
- {
- ret = FALSE;
- }
-
- g_error_free (err);
- }
- else
- {
- ret = TRUE;
- }
-
- /* FIXME: Check the remainder? */
- if (ret == TRUE && !g_utf8_validate (out, nwritten, NULL))
- {
- ret = FALSE;
- }
-
- g_free (out);
-
- return ret;
-}
-
-static GCharsetConverter *
-guess_encoding (GeditSmartCharsetConverter *smart,
- const void *inbuf,
- gsize inbuf_size)
-{
- GCharsetConverter *conv = NULL;
-
- if (inbuf == NULL || inbuf_size == 0)
- {
- smart->priv->is_utf8 = TRUE;
- return NULL;
- }
-
- if (smart->priv->encodings != NULL &&
- smart->priv->encodings->next == NULL)
- smart->priv->use_first = TRUE;
-
- /* We just check the first block */
- while (TRUE)
- {
- const GeditEncoding *enc;
-
- if (conv != NULL)
- {
- g_object_unref (conv);
- conv = NULL;
- }
-
- /* We get an encoding from the list */
- enc = get_encoding (smart);
-
- /* if it is NULL we didn't guess anything */
- if (enc == NULL)
- {
- break;
- }
-
- gedit_debug_message (DEBUG_UTILS, "trying charset: %s",
- gedit_encoding_get_charset (smart->priv->current_encoding->data));
-
- if (enc == gedit_encoding_get_utf8 ())
- {
- gsize remainder;
- const gchar *end;
-
- if (g_utf8_validate (inbuf, inbuf_size, &end) ||
- smart->priv->use_first)
- {
- smart->priv->is_utf8 = TRUE;
- break;
- }
-
- /* Check if the end is less than one char */
- remainder = inbuf_size - (end - (gchar *)inbuf);
- if (remainder < 6)
- {
- smart->priv->is_utf8 = TRUE;
- break;
- }
-
- continue;
- }
-
- conv = g_charset_converter_new ("UTF-8",
- gedit_encoding_get_charset (enc),
- NULL);
-
- /* If we tried all encodings we use the first one */
- if (smart->priv->use_first)
- {
- break;
- }
-
- /* Try to convert */
- if (try_convert (conv, inbuf, inbuf_size))
- {
- break;
- }
- }
-
- if (conv != NULL)
- {
- g_converter_reset (G_CONVERTER (conv));
-
- /* FIXME: uncomment this when we want to use the fallback
- g_charset_converter_set_use_fallback (conv, TRUE);*/
- }
-
- return conv;
-}
-
-static GConverterResult
-gedit_smart_charset_converter_convert (GConverter *converter,
- const void *inbuf,
- gsize inbuf_size,
- void *outbuf,
- gsize outbuf_size,
- GConverterFlags flags,
- gsize *bytes_read,
- gsize *bytes_written,
- GError **error)
-{
- GeditSmartCharsetConverter *smart = GEDIT_SMART_CHARSET_CONVERTER (converter);
-
- /* Guess the encoding if we didn't make it yet */
- if (smart->priv->charset_conv == NULL &&
- !smart->priv->is_utf8)
- {
- smart->priv->charset_conv = guess_encoding (smart, inbuf, inbuf_size);
-
- /* If we still have the previous case is that we didn't guess
- anything */
- if (smart->priv->charset_conv == NULL &&
- !smart->priv->is_utf8)
- {
- /* FIXME: Add a different domain when we kill gedit_convert */
- g_set_error_literal (error, GEDIT_DOCUMENT_ERROR,
- GEDIT_DOCUMENT_ERROR_ENCODING_AUTO_DETECTION_FAILED,
- _("It is not possible to detect the encoding automatically"));
- return G_CONVERTER_ERROR;
- }
- }
-
- /* Now if the encoding is utf8 just redirect the input to the output */
- if (smart->priv->is_utf8)
- {
- gsize size;
- GConverterResult ret;
-
- size = MIN (inbuf_size, outbuf_size);
-
- memcpy (outbuf, inbuf, size);
- *bytes_read = size;
- *bytes_written = size;
-
- ret = G_CONVERTER_CONVERTED;
-
- if (flags & G_CONVERTER_INPUT_AT_END)
- ret = G_CONVERTER_FINISHED;
- else if (flags & G_CONVERTER_FLUSH)
- ret = G_CONVERTER_FLUSHED;
-
- return ret;
- }
-
- /* If we reached here is because we need to convert the text so, we
- convert it with the charset converter */
- return g_converter_convert (G_CONVERTER (smart->priv->charset_conv),
- inbuf,
- inbuf_size,
- outbuf,
- outbuf_size,
- flags,
- bytes_read,
- bytes_written,
- error);
-}
-
-static void
-gedit_smart_charset_converter_reset (GConverter *converter)
-{
- GeditSmartCharsetConverter *smart = GEDIT_SMART_CHARSET_CONVERTER (converter);
-
- smart->priv->current_encoding = NULL;
- smart->priv->is_utf8 = FALSE;
-
- if (smart->priv->charset_conv != NULL)
- {
- g_object_unref (smart->priv->charset_conv);
- smart->priv->charset_conv = NULL;
- }
-}
-
-static void
-gedit_smart_charset_converter_iface_init (GConverterIface *iface)
-{
- iface->convert = gedit_smart_charset_converter_convert;
- iface->reset = gedit_smart_charset_converter_reset;
-}
-
-GeditSmartCharsetConverter *
-gedit_smart_charset_converter_new (GSList *candidate_encodings)
-{
- GeditSmartCharsetConverter *smart;
-
- g_return_val_if_fail (candidate_encodings != NULL, NULL);
-
- smart = g_object_new (GEDIT_TYPE_SMART_CHARSET_CONVERTER, NULL);
-
- smart->priv->encodings = g_slist_copy (candidate_encodings);
-
- return smart;
-}
-
-const GeditEncoding *
-gedit_smart_charset_converter_get_guessed (GeditSmartCharsetConverter *smart)
-{
- g_return_val_if_fail (GEDIT_IS_SMART_CHARSET_CONVERTER (smart), NULL);
-
- if (smart->priv->current_encoding != NULL)
- {
- return (const GeditEncoding *)smart->priv->current_encoding->data;
- }
- else if (smart->priv->is_utf8)
- {
- return gedit_encoding_get_utf8 ();
- }
-
- return NULL;
-}
-
-guint
-gedit_smart_charset_converter_get_num_fallbacks (GeditSmartCharsetConverter *smart)
-{
- g_return_val_if_fail (GEDIT_IS_SMART_CHARSET_CONVERTER (smart), FALSE);
-
- if (smart->priv->charset_conv == NULL)
- return FALSE;
-
- return g_charset_converter_get_num_fallbacks (smart->priv->charset_conv) != 0;
-}
-
diff --git a/gedit/gedit-smart-charset-converter.h b/gedit/gedit-smart-charset-converter.h
deleted file mode 100755
index 803e07a5..00000000
--- a/gedit/gedit-smart-charset-converter.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * gedit-smart-charset-converter.h
- * This file is part of gedit
- *
- * Copyright (C) 2009 - Ignacio Casal Quinteiro
- *
- * gedit 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.
- *
- * gedit 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 gedit; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- */
-
-#ifndef __GEDIT_SMART_CHARSET_CONVERTER_H__
-#define __GEDIT_SMART_CHARSET_CONVERTER_H__
-
-#include <glib-object.h>
-
-#include "gedit-encodings.h"
-
-G_BEGIN_DECLS
-
-#define GEDIT_TYPE_SMART_CHARSET_CONVERTER (gedit_smart_charset_converter_get_type ())
-#define GEDIT_SMART_CHARSET_CONVERTER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEDIT_TYPE_SMART_CHARSET_CONVERTER, GeditSmartCharsetConverter))
-#define GEDIT_SMART_CHARSET_CONVERTER_CONST(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEDIT_TYPE_SMART_CHARSET_CONVERTER, GeditSmartCharsetConverter const))
-#define GEDIT_SMART_CHARSET_CONVERTER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEDIT_TYPE_SMART_CHARSET_CONVERTER, GeditSmartCharsetConverterClass))
-#define GEDIT_IS_SMART_CHARSET_CONVERTER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEDIT_TYPE_SMART_CHARSET_CONVERTER))
-#define GEDIT_IS_SMART_CHARSET_CONVERTER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEDIT_TYPE_SMART_CHARSET_CONVERTER))
-#define GEDIT_SMART_CHARSET_CONVERTER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEDIT_TYPE_SMART_CHARSET_CONVERTER, GeditSmartCharsetConverterClass))
-
-typedef struct _GeditSmartCharsetConverter GeditSmartCharsetConverter;
-typedef struct _GeditSmartCharsetConverterClass GeditSmartCharsetConverterClass;
-typedef struct _GeditSmartCharsetConverterPrivate GeditSmartCharsetConverterPrivate;
-
-struct _GeditSmartCharsetConverter
-{
- GObject parent;
-
- GeditSmartCharsetConverterPrivate *priv;
-};
-
-struct _GeditSmartCharsetConverterClass
-{
- GObjectClass parent_class;
-};
-
-GType gedit_smart_charset_converter_get_type (void) G_GNUC_CONST;
-
-GeditSmartCharsetConverter *gedit_smart_charset_converter_new (GSList *candidate_encodings);
-
-const GeditEncoding *gedit_smart_charset_converter_get_guessed (GeditSmartCharsetConverter *smart);
-
-guint gedit_smart_charset_converter_get_num_fallbacks(GeditSmartCharsetConverter *smart);
-
-G_END_DECLS
-
-#endif /* __GEDIT_SMART_CHARSET_CONVERTER_H__ */
diff --git a/gedit/gedit-spinner.c b/gedit/gedit-spinner.c
deleted file mode 100755
index 5cb74587..00000000
--- a/gedit/gedit-spinner.c
+++ /dev/null
@@ -1,989 +0,0 @@
-/*
- * gedit-spinner.c
- * This file is part of gedit
- *
- * Copyright (C) 2005 - Paolo Maggi
- * Copyright (C) 2002-2004 Marco Pesenti Gritti
- * Copyright (C) 2004 Christian Persch
- * Copyright (C) 2000 - Eazel, Inc.
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * This widget was originally written by Andy Hertzfeld <[email protected]> for
- * Caja. It was then modified by Marco Pesenti Gritti and Christian Persch
- * for Epiphany.
- *
- * Modified by the gedit Team, 2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "gedit-spinner.h"
-
-#include <gdk-pixbuf/gdk-pixbuf.h>
-#include <gtk/gtk.h>
-
-/* Spinner cache implementation */
-
-#define GEDIT_TYPE_SPINNER_CACHE (gedit_spinner_cache_get_type())
-#define GEDIT_SPINNER_CACHE(object) (G_TYPE_CHECK_INSTANCE_CAST((object), GEDIT_TYPE_SPINNER_CACHE, GeditSpinnerCache))
-#define GEDIT_SPINNER_CACHE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GEDIT_TYPE_SPINNER_CACHE, GeditSpinnerCacheClass))
-#define GEDIT_IS_SPINNER_CACHE(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), GEDIT_TYPE_SPINNER_CACHE))
-#define GEDIT_IS_SPINNER_CACHE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), GEDIT_TYPE_SPINNER_CACHE))
-#define GEDIT_SPINNER_CACHE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GEDIT_TYPE_SPINNER_CACHE, GeditSpinnerCacheClass))
-
-typedef struct _GeditSpinnerCache GeditSpinnerCache;
-typedef struct _GeditSpinnerCacheClass GeditSpinnerCacheClass;
-typedef struct _GeditSpinnerCachePrivate GeditSpinnerCachePrivate;
-
-struct _GeditSpinnerCacheClass
-{
- GObjectClass parent_class;
-};
-
-struct _GeditSpinnerCache
-{
- GObject parent_object;
-
- /*< private >*/
- GeditSpinnerCachePrivate *priv;
-};
-
-#define GEDIT_SPINNER_CACHE_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), GEDIT_TYPE_SPINNER_CACHE, GeditSpinnerCachePrivate))
-
-struct _GeditSpinnerCachePrivate
-{
- /* Hash table of GdkScreen -> GeditSpinnerCacheData */
- GHashTable *hash;
-};
-
-typedef struct
-{
- guint ref_count;
- GtkIconSize size;
- gint width;
- gint height;
- GdkPixbuf **animation_pixbufs;
- guint n_animation_pixbufs;
-} GeditSpinnerImages;
-
-#define LAST_ICON_SIZE GTK_ICON_SIZE_DIALOG + 1
-#define SPINNER_ICON_NAME "process-working"
-#define SPINNER_FALLBACK_ICON_NAME "mate-spinner"
-#define GEDIT_SPINNER_IMAGES_INVALID ((GeditSpinnerImages *) 0x1)
-
-typedef struct
-{
- GdkScreen *screen;
- GtkIconTheme *icon_theme;
- GeditSpinnerImages *images[LAST_ICON_SIZE];
-} GeditSpinnerCacheData;
-
-static void gedit_spinner_cache_class_init (GeditSpinnerCacheClass *klass);
-static void gedit_spinner_cache_init (GeditSpinnerCache *cache);
-
-static GObjectClass *gedit_spinner_cache_parent_class;
-
-static GType
-gedit_spinner_cache_get_type (void)
-{
- static GType type = 0;
-
- if (G_UNLIKELY (type == 0))
- {
- const GTypeInfo our_info =
- {
- sizeof (GeditSpinnerCacheClass),
- NULL,
- NULL,
- (GClassInitFunc) gedit_spinner_cache_class_init,
- NULL,
- NULL,
- sizeof (GeditSpinnerCache),
- 0,
- (GInstanceInitFunc) gedit_spinner_cache_init
- };
-
- type = g_type_register_static (G_TYPE_OBJECT,
- "GeditSpinnerCache",
- &our_info, 0);
- }
-
- return type;
-}
-
-static GeditSpinnerImages *
-gedit_spinner_images_ref (GeditSpinnerImages *images)
-{
- g_return_val_if_fail (images != NULL, NULL);
-
- images->ref_count++;
-
- return images;
-}
-
-static void
-gedit_spinner_images_unref (GeditSpinnerImages *images)
-{
- g_return_if_fail (images != NULL);
-
- images->ref_count--;
- if (images->ref_count == 0)
- {
- guint i;
-
- /* LOG ("Freeing spinner images %p for size %d", images, images->size); */
-
- for (i = 0; i < images->n_animation_pixbufs; ++i)
- {
- g_object_unref (images->animation_pixbufs[i]);
- }
- g_free (images->animation_pixbufs);
-
- g_free (images);
- }
-}
-
-static void
-gedit_spinner_cache_data_unload (GeditSpinnerCacheData *data)
-{
- GtkIconSize size;
- GeditSpinnerImages *images;
-
- g_return_if_fail (data != NULL);
-
- /* LOG ("GeditSpinnerDataCache unload for screen %p", data->screen); */
-
- for (size = GTK_ICON_SIZE_INVALID; size < LAST_ICON_SIZE; ++size)
- {
- images = data->images[size];
- data->images[size] = NULL;
-
- if (images != NULL && images != GEDIT_SPINNER_IMAGES_INVALID)
- {
- gedit_spinner_images_unref (images);
- }
- }
-}
-
-static GdkPixbuf *
-extract_frame (GdkPixbuf *grid_pixbuf,
- int x,
- int y,
- int size)
-{
- GdkPixbuf *pixbuf;
-
- if (x + size > gdk_pixbuf_get_width (grid_pixbuf) ||
- y + size > gdk_pixbuf_get_height (grid_pixbuf))
- {
- return NULL;
- }
-
- pixbuf = gdk_pixbuf_new_subpixbuf (grid_pixbuf,
- x, y,
- size, size);
- g_return_val_if_fail (pixbuf != NULL, NULL);
-
- return pixbuf;
-}
-
-static GdkPixbuf *
-scale_to_size (GdkPixbuf *pixbuf,
- int dw,
- int dh)
-{
- GdkPixbuf *result;
- int pw, ph;
-
- g_return_val_if_fail (pixbuf != NULL, NULL);
-
- pw = gdk_pixbuf_get_width (pixbuf);
- ph = gdk_pixbuf_get_height (pixbuf);
-
- if (pw != dw || ph != dh)
- {
- result = gdk_pixbuf_scale_simple (pixbuf, dw, dh,
- GDK_INTERP_BILINEAR);
- g_object_unref (pixbuf);
- return result;
- }
-
- return pixbuf;
-}
-
-static GeditSpinnerImages *
-gedit_spinner_images_load (GdkScreen *screen,
- GtkIconTheme *icon_theme,
- GtkIconSize icon_size)
-{
- GeditSpinnerImages *images;
- GdkPixbuf *icon_pixbuf, *pixbuf;
- GtkIconInfo *icon_info = NULL;
- int grid_width, grid_height, x, y, requested_size, size, isw, ish, n;
- const char *icon;
- GSList *list = NULL, *l;
-
- /* LOG ("GeditSpinnerCacheData loading for screen %p at size %d", screen, icon_size); */
-
- /* START_PROFILER ("loading spinner animation") */
-
- if (!gtk_icon_size_lookup_for_settings (gtk_settings_get_for_screen (screen),
- icon_size, &isw, &ish))
- goto loser;
-
- requested_size = MAX (ish, isw);
-
- /* Load the animation. The 'rest icon' is the 0th frame */
- icon_info = gtk_icon_theme_lookup_icon (icon_theme,
- SPINNER_ICON_NAME,
- requested_size, 0);
- if (icon_info == NULL)
- {
- g_warning ("Throbber animation not found");
-
- /* If the icon naming spec compliant name wasn't found, try the old name */
- icon_info = gtk_icon_theme_lookup_icon (icon_theme,
- SPINNER_FALLBACK_ICON_NAME,
- requested_size, 0);
- if (icon_info == NULL)
- {
- g_warning ("Throbber fallback animation not found either");
- goto loser;
- }
- }
-
- g_assert (icon_info != NULL);
-
- size = gtk_icon_info_get_base_size (icon_info);
- icon = gtk_icon_info_get_filename (icon_info);
-
- if (icon == NULL)
- goto loser;
-
- icon_pixbuf = gdk_pixbuf_new_from_file (icon, NULL);
- gtk_icon_info_free (icon_info);
- icon_info = NULL;
-
- if (icon_pixbuf == NULL)
- {
- g_warning ("Could not load the spinner file");
- goto loser;
- }
-
- grid_width = gdk_pixbuf_get_width (icon_pixbuf);
- grid_height = gdk_pixbuf_get_height (icon_pixbuf);
-
- n = 0;
- for (y = 0; y < grid_height; y += size)
- {
- for (x = 0; x < grid_width ; x += size)
- {
- pixbuf = extract_frame (icon_pixbuf, x, y, size);
-
- if (pixbuf)
- {
- list = g_slist_prepend (list, pixbuf);
- ++n;
- }
- else
- {
- g_warning ("Cannot extract frame (%d, %d) from the grid\n", x, y);
- }
- }
- }
-
- g_object_unref (icon_pixbuf);
-
- if (list == NULL)
- goto loser;
-
- /* g_assert (n > 0); */
-
- if (size > requested_size)
- {
- for (l = list; l != NULL; l = l->next)
- {
- l->data = scale_to_size (l->data, isw, ish);
- }
- }
-
- /* Now we've successfully got all the data */
- images = g_new (GeditSpinnerImages, 1);
- images->ref_count = 1;
-
- images->size = icon_size;
- images->width = images->height = requested_size;
-
- images->n_animation_pixbufs = n;
- images->animation_pixbufs = g_new (GdkPixbuf *, n);
-
- for (l = list; l != NULL; l = l->next)
- {
- g_assert (l->data != NULL);
- images->animation_pixbufs[--n] = l->data;
- }
- g_assert (n == 0);
-
- g_slist_free (list);
-
- /* STOP_PROFILER ("loading spinner animation") */
- return images;
-
-loser:
- if (icon_info)
- {
- gtk_icon_info_free (icon_info);
- }
-
- g_slist_foreach (list, (GFunc) g_object_unref, NULL);
-
- /* STOP_PROFILER ("loading spinner animation") */
-
- return NULL;
-}
-
-static GeditSpinnerCacheData *
-gedit_spinner_cache_data_new (GdkScreen *screen)
-{
- GeditSpinnerCacheData *data;
-
- data = g_new0 (GeditSpinnerCacheData, 1);
-
- data->screen = screen;
- data->icon_theme = gtk_icon_theme_get_for_screen (screen);
- g_signal_connect_swapped (data->icon_theme,
- "changed",
- G_CALLBACK (gedit_spinner_cache_data_unload),
- data);
-
- return data;
-}
-
-static void
-gedit_spinner_cache_data_free (GeditSpinnerCacheData *data)
-{
- g_return_if_fail (data != NULL);
- g_return_if_fail (data->icon_theme != NULL);
-
- g_signal_handlers_disconnect_by_func (data->icon_theme,
- G_CALLBACK (gedit_spinner_cache_data_unload),
- data);
-
- gedit_spinner_cache_data_unload (data);
-
- g_free (data);
-}
-
-static GeditSpinnerImages *
-gedit_spinner_cache_get_images (GeditSpinnerCache *cache,
- GdkScreen *screen,
- GtkIconSize icon_size)
-{
- GeditSpinnerCachePrivate *priv = cache->priv;
- GeditSpinnerCacheData *data;
- GeditSpinnerImages *images;
-
- /* LOG ("Getting animation images for screen %p at size %d", screen, icon_size); */
-
- g_return_val_if_fail (icon_size >= 0 && icon_size < LAST_ICON_SIZE, NULL);
-
- /* Backward compat: "invalid" meant "native" size which doesn't exist anymore */
- if (icon_size == GTK_ICON_SIZE_INVALID)
- {
- icon_size = GTK_ICON_SIZE_DIALOG;
- }
-
- data = g_hash_table_lookup (priv->hash, screen);
- if (data == NULL)
- {
- data = gedit_spinner_cache_data_new (screen);
- /* FIXME: think about what happens when the screen's display is closed later on */
- g_hash_table_insert (priv->hash, screen, data);
- }
-
- images = data->images[icon_size];
- if (images == GEDIT_SPINNER_IMAGES_INVALID)
- {
- /* Load failed, but don't try endlessly again! */
- return NULL;
- }
-
- if (images != NULL)
- {
- /* Return cached data */
- return gedit_spinner_images_ref (images);
- }
-
- images = gedit_spinner_images_load (screen, data->icon_theme, icon_size);
-
- if (images == NULL)
- {
- /* Mark as failed-to-load */
- data->images[icon_size] = GEDIT_SPINNER_IMAGES_INVALID;
-
- return NULL;
- }
-
- data->images[icon_size] = images;
-
- return gedit_spinner_images_ref (images);
-}
-
-static void
-gedit_spinner_cache_init (GeditSpinnerCache *cache)
-{
- GeditSpinnerCachePrivate *priv;
-
- priv = cache->priv = GEDIT_SPINNER_CACHE_GET_PRIVATE (cache);
-
- /* LOG ("GeditSpinnerCache initialising"); */
-
- priv->hash = g_hash_table_new_full (g_direct_hash,
- g_direct_equal,
- NULL,
- (GDestroyNotify) gedit_spinner_cache_data_free);
-}
-
-static void
-gedit_spinner_cache_finalize (GObject *object)
-{
- GeditSpinnerCache *cache = GEDIT_SPINNER_CACHE (object);
- GeditSpinnerCachePrivate *priv = cache->priv;
-
- g_hash_table_destroy (priv->hash);
-
- /* LOG ("GeditSpinnerCache finalised"); */
-
- G_OBJECT_CLASS (gedit_spinner_cache_parent_class)->finalize (object);
-}
-
-static void
-gedit_spinner_cache_class_init (GeditSpinnerCacheClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- gedit_spinner_cache_parent_class = g_type_class_peek_parent (klass);
-
- object_class->finalize = gedit_spinner_cache_finalize;
-
- g_type_class_add_private (object_class, sizeof (GeditSpinnerCachePrivate));
-}
-
-static GeditSpinnerCache *spinner_cache = NULL;
-
-static GeditSpinnerCache *
-gedit_spinner_cache_ref (void)
-{
- if (spinner_cache == NULL)
- {
- GeditSpinnerCache **cache_ptr;
-
- spinner_cache = g_object_new (GEDIT_TYPE_SPINNER_CACHE, NULL);
- cache_ptr = &spinner_cache;
- g_object_add_weak_pointer (G_OBJECT (spinner_cache),
- (gpointer *) cache_ptr);
-
- return spinner_cache;
- }
-
- return g_object_ref (spinner_cache);
-}
-
-/* Spinner implementation */
-
-#define SPINNER_TIMEOUT 125 /* ms */
-
-#define GEDIT_SPINNER_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), GEDIT_TYPE_SPINNER, GeditSpinnerPrivate))
-
-struct _GeditSpinnerPrivate
-{
- GtkIconTheme *icon_theme;
- GeditSpinnerCache *cache;
- GtkIconSize size;
- GeditSpinnerImages *images;
- guint current_image;
- guint timeout;
- guint timer_task;
- guint spinning : 1;
- guint need_load : 1;
-};
-
-static void gedit_spinner_class_init (GeditSpinnerClass *class);
-static void gedit_spinner_init (GeditSpinner *spinner);
-
-static GObjectClass *parent_class;
-
-GType
-gedit_spinner_get_type (void)
-{
- static GType type = 0;
-
- if (G_UNLIKELY (type == 0))
- {
- const GTypeInfo our_info =
- {
- sizeof (GeditSpinnerClass),
- NULL, /* base_init */
- NULL, /* base_finalize */
- (GClassInitFunc) gedit_spinner_class_init,
- NULL,
- NULL, /* class_data */
- sizeof (GeditSpinner),
- 0, /* n_preallocs */
- (GInstanceInitFunc) gedit_spinner_init
- };
-
- type = g_type_register_static (GTK_TYPE_WIDGET,
- "GeditSpinner",
- &our_info, 0);
- }
-
- return type;
-}
-
-static gboolean
-gedit_spinner_load_images (GeditSpinner *spinner)
-{
- GeditSpinnerPrivate *priv = spinner->priv;
-
- if (priv->need_load)
- {
- /* START_PROFILER ("gedit_spinner_load_images") */
-
- priv->images =
- gedit_spinner_cache_get_images (priv->cache,
- gtk_widget_get_screen (GTK_WIDGET (spinner)),
- priv->size);
-
- /* STOP_PROFILER ("gedit_spinner_load_images") */
-
- priv->current_image = 0; /* 'rest' icon */
- priv->need_load = FALSE;
- }
-
- return priv->images != NULL;
-}
-
-static void
-gedit_spinner_unload_images (GeditSpinner *spinner)
-{
- GeditSpinnerPrivate *priv = spinner->priv;
-
- if (priv->images != NULL)
- {
- gedit_spinner_images_unref (priv->images);
- priv->images = NULL;
- }
-
- priv->current_image = 0;
- priv->need_load = TRUE;
-}
-
-static void
-icon_theme_changed_cb (GtkIconTheme *icon_theme,
- GeditSpinner *spinner)
-{
- gedit_spinner_unload_images (spinner);
- gtk_widget_queue_resize (GTK_WIDGET (spinner));
-}
-
-static void
-gedit_spinner_init (GeditSpinner *spinner)
-{
- GeditSpinnerPrivate *priv;
-
- priv = spinner->priv = GEDIT_SPINNER_GET_PRIVATE (spinner);
-
- GTK_WIDGET_SET_FLAGS (GTK_WIDGET (spinner), GTK_NO_WINDOW);
-
- priv->cache = gedit_spinner_cache_ref ();
- priv->size = GTK_ICON_SIZE_DIALOG;
- priv->spinning = FALSE;
- priv->timeout = SPINNER_TIMEOUT;
- priv->need_load = TRUE;
-}
-
-static int
-gedit_spinner_expose (GtkWidget *widget,
- GdkEventExpose *event)
-{
- GeditSpinner *spinner = GEDIT_SPINNER (widget);
- GeditSpinnerPrivate *priv = spinner->priv;
- GeditSpinnerImages *images;
- GdkPixbuf *pixbuf;
- GdkGC *gc;
- int x_offset, y_offset, width, height;
- GdkRectangle pix_area, dest;
-
- if (!GTK_WIDGET_DRAWABLE (spinner))
- {
- return FALSE;
- }
-
- if (priv->need_load &&
- !gedit_spinner_load_images (spinner))
- {
- return FALSE;
- }
-
- images = priv->images;
- if (images == NULL)
- {
- return FALSE;
- }
-
- /* Otherwise |images| will be NULL anyway */
- g_assert (images->n_animation_pixbufs > 0);
-
- g_assert (priv->current_image >= 0 &&
- priv->current_image < images->n_animation_pixbufs);
-
- pixbuf = images->animation_pixbufs[priv->current_image];
-
- g_assert (pixbuf != NULL);
-
- width = gdk_pixbuf_get_width (pixbuf);
- height = gdk_pixbuf_get_height (pixbuf);
-
- /* Compute the offsets for the image centered on our allocation */
- x_offset = (widget->allocation.width - width) / 2;
- y_offset = (widget->allocation.height - height) / 2;
-
- pix_area.x = x_offset + widget->allocation.x;
- pix_area.y = y_offset + widget->allocation.y;
- pix_area.width = width;
- pix_area.height = height;
-
- if (!gdk_rectangle_intersect (&event->area, &pix_area, &dest))
- {
- return FALSE;
- }
-
- gc = gdk_gc_new (widget->window);
- gdk_draw_pixbuf (widget->window, gc, pixbuf,
- dest.x - x_offset - widget->allocation.x,
- dest.y - y_offset - widget->allocation.y,
- dest.x, dest.y,
- dest.width, dest.height,
- GDK_RGB_DITHER_MAX, 0, 0);
- g_object_unref (gc);
-
- return FALSE;
-}
-
-static gboolean
-bump_spinner_frame_cb (GeditSpinner *spinner)
-{
- GeditSpinnerPrivate *priv = spinner->priv;
-
- /* This can happen when we've unloaded the images on a theme
- * change, but haven't been in the queued size request yet.
- * Just skip this update.
- */
- if (priv->images == NULL)
- return TRUE;
-
- priv->current_image++;
- if (priv->current_image >= priv->images->n_animation_pixbufs)
- {
- /* the 0th frame is the 'rest' icon */
- priv->current_image = MIN (1, priv->images->n_animation_pixbufs);
- }
-
- gtk_widget_queue_draw (GTK_WIDGET (spinner));
-
- /* run again */
- return TRUE;
-}
-
-/**
- * gedit_spinner_start:
- * @spinner: a #GeditSpinner
- *
- * Start the spinner animation.
- **/
-void
-gedit_spinner_start (GeditSpinner *spinner)
-{
- GeditSpinnerPrivate *priv = spinner->priv;
-
- priv->spinning = TRUE;
-
- if (GTK_WIDGET_MAPPED (GTK_WIDGET (spinner)) &&
- priv->timer_task == 0 &&
- gedit_spinner_load_images (spinner))
- {
- /* the 0th frame is the 'rest' icon */
- priv->current_image = MIN (1, priv->images->n_animation_pixbufs);
-
- priv->timer_task = g_timeout_add_full (G_PRIORITY_LOW,
- priv->timeout,
- (GSourceFunc) bump_spinner_frame_cb,
- spinner,
- NULL);
- }
-}
-
-static void
-gedit_spinner_remove_update_callback (GeditSpinner *spinner)
-{
- GeditSpinnerPrivate *priv = spinner->priv;
-
- if (priv->timer_task != 0)
- {
- g_source_remove (priv->timer_task);
- priv->timer_task = 0;
- }
-}
-
-/**
- * gedit_spinner_stop:
- * @spinner: a #GeditSpinner
- *
- * Stop the spinner animation.
- **/
-void
-gedit_spinner_stop (GeditSpinner *spinner)
-{
- GeditSpinnerPrivate *priv = spinner->priv;
-
- priv->spinning = FALSE;
- priv->current_image = 0;
-
- if (priv->timer_task != 0)
- {
- gedit_spinner_remove_update_callback (spinner);
-
- if (GTK_WIDGET_MAPPED (GTK_WIDGET (spinner)))
- gtk_widget_queue_draw (GTK_WIDGET (spinner));
- }
-}
-
-/*
- * gedit_spinner_set_size:
- * @spinner: a #GeditSpinner
- * @size: the size of type %GtkIconSize
- *
- * Set the size of the spinner.
- **/
-void
-gedit_spinner_set_size (GeditSpinner *spinner,
- GtkIconSize size)
-{
- if (size == GTK_ICON_SIZE_INVALID)
- {
- size = GTK_ICON_SIZE_DIALOG;
- }
-
- if (size != spinner->priv->size)
- {
- gedit_spinner_unload_images (spinner);
-
- spinner->priv->size = size;
-
- gtk_widget_queue_resize (GTK_WIDGET (spinner));
- }
-}
-
-#if 0
-/*
-* gedit_spinner_set_timeout:
-* @spinner: a #GeditSpinner
-* @timeout: time delay between updates to the spinner.
-*
-* Sets the timeout delay for spinner updates.
-**/
-void
-gedit_spinner_set_timeout (GeditSpinner *spinner,
- guint timeout)
-{
- GeditSpinnerPrivate *priv = spinner->priv;
-
- if (timeout != priv->timeout)
- {
- gedit_spinner_stop (spinner);
-
- priv->timeout = timeout;
-
- if (priv->spinning)
- {
- gedit_spinner_start (spinner);
- }
- }
-}
-#endif
-
-static void
-gedit_spinner_size_request (GtkWidget *widget,
- GtkRequisition *requisition)
-{
- GeditSpinner *spinner = GEDIT_SPINNER (widget);
- GeditSpinnerPrivate *priv = spinner->priv;
-
- if ((priv->need_load &&
- !gedit_spinner_load_images (spinner)) ||
- priv->images == NULL)
- {
- requisition->width = requisition->height = 0;
- gtk_icon_size_lookup_for_settings (gtk_widget_get_settings (widget),
- priv->size,
- &requisition->width,
- &requisition->height);
- return;
- }
-
- requisition->width = priv->images->width;
- requisition->height = priv->images->height;
-
- /* FIXME fix this hack */
- /* allocate some extra margin so we don't butt up against toolbar edges */
- if (priv->size != GTK_ICON_SIZE_MENU)
- {
- requisition->width += 2;
- requisition->height += 2;
- }
-}
-
-static void
-gedit_spinner_map (GtkWidget *widget)
-{
- GeditSpinner *spinner = GEDIT_SPINNER (widget);
- GeditSpinnerPrivate *priv = spinner->priv;
-
- GTK_WIDGET_CLASS (parent_class)->map (widget);
-
- if (priv->spinning)
- {
- gedit_spinner_start (spinner);
- }
-}
-
-static void
-gedit_spinner_unmap (GtkWidget *widget)
-{
- GeditSpinner *spinner = GEDIT_SPINNER (widget);
-
- gedit_spinner_remove_update_callback (spinner);
-
- GTK_WIDGET_CLASS (parent_class)->unmap (widget);
-}
-
-static void
-gedit_spinner_dispose (GObject *object)
-{
- GeditSpinner *spinner = GEDIT_SPINNER (object);
-
- g_signal_handlers_disconnect_by_func
- (spinner->priv->icon_theme,
- G_CALLBACK (icon_theme_changed_cb), spinner);
-
- G_OBJECT_CLASS (parent_class)->dispose (object);
-}
-
-static void
-gedit_spinner_finalize (GObject *object)
-{
- GeditSpinner *spinner = GEDIT_SPINNER (object);
-
- gedit_spinner_remove_update_callback (spinner);
- gedit_spinner_unload_images (spinner);
-
- g_object_unref (spinner->priv->cache);
-
- G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-static void
-gedit_spinner_screen_changed (GtkWidget *widget,
- GdkScreen *old_screen)
-{
- GeditSpinner *spinner = GEDIT_SPINNER (widget);
- GeditSpinnerPrivate *priv = spinner->priv;
- GdkScreen *screen;
-
- if (GTK_WIDGET_CLASS (parent_class)->screen_changed)
- {
- GTK_WIDGET_CLASS (parent_class)->screen_changed (widget, old_screen);
- }
-
- screen = gtk_widget_get_screen (widget);
-
- /* FIXME: this seems to be happening when then spinner is destroyed!? */
- if (old_screen == screen)
- return;
-
- /* We'll get mapped again on the new screen, but not unmapped from
- * the old screen, so remove timeout here.
- */
- gedit_spinner_remove_update_callback (spinner);
-
- gedit_spinner_unload_images (spinner);
-
- if (old_screen != NULL)
- {
- g_signal_handlers_disconnect_by_func
- (gtk_icon_theme_get_for_screen (old_screen),
- G_CALLBACK (icon_theme_changed_cb), spinner);
- }
-
- priv->icon_theme = gtk_icon_theme_get_for_screen (screen);
- g_signal_connect (priv->icon_theme, "changed",
- G_CALLBACK (icon_theme_changed_cb), spinner);
-}
-
-static void
-gedit_spinner_class_init (GeditSpinnerClass *class)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (class);
- GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (class);
-
- parent_class = g_type_class_peek_parent (class);
-
- object_class->dispose = gedit_spinner_dispose;
- object_class->finalize = gedit_spinner_finalize;
-
- widget_class->expose_event = gedit_spinner_expose;
- widget_class->size_request = gedit_spinner_size_request;
- widget_class->map = gedit_spinner_map;
- widget_class->unmap = gedit_spinner_unmap;
- widget_class->screen_changed = gedit_spinner_screen_changed;
-
- g_type_class_add_private (object_class, sizeof (GeditSpinnerPrivate));
-}
-
-/*
- * gedit_spinner_new:
- *
- * Create a new #GeditSpinner. The spinner is a widget
- * that gives the user feedback about network status with
- * an animated image.
- *
- * Return Value: the spinner #GtkWidget
- **/
-GtkWidget *
-gedit_spinner_new (void)
-{
- return GTK_WIDGET (g_object_new (GEDIT_TYPE_SPINNER, NULL));
-}
diff --git a/gedit/gedit-spinner.h b/gedit/gedit-spinner.h
deleted file mode 100755
index 807ba7c3..00000000
--- a/gedit/gedit-spinner.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * gedit-spinner.h
- * This file is part of gedit
- *
- * Copyright (C) 2005 - Paolo Maggi
- * Copyright (C) 2000 - Eazel, Inc.
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * This widget was originally written by Andy Hertzfeld <[email protected]> for
- * Caja.
- *
- * Modified by the gedit Team, 2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifndef __GEDIT_SPINNER_H__
-#define __GEDIT_SPINNER_H__
-
-#include <gtk/gtk.h>
-
-G_BEGIN_DECLS
-
-/*
- * Type checking and casting macros
- */
-#define GEDIT_TYPE_SPINNER (gedit_spinner_get_type ())
-#define GEDIT_SPINNER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GEDIT_TYPE_SPINNER, GeditSpinner))
-#define GEDIT_SPINNER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GEDIT_TYPE_SPINNER, GeditSpinnerClass))
-#define GEDIT_IS_SPINNER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GEDIT_TYPE_SPINNER))
-#define GEDIT_IS_SPINNER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GEDIT_TYPE_SPINNER))
-#define GEDIT_SPINNER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GEDIT_TYPE_SPINNER, GeditSpinnerClass))
-
-
-/* Private structure type */
-typedef struct _GeditSpinnerPrivate GeditSpinnerPrivate;
-
-/*
- * Main object structure
- */
-typedef struct _GeditSpinner GeditSpinner;
-
-struct _GeditSpinner
-{
- GtkWidget parent;
-
- /*< private >*/
- GeditSpinnerPrivate *priv;
-};
-
-/*
- * Class definition
- */
-typedef struct _GeditSpinnerClass GeditSpinnerClass;
-
-struct _GeditSpinnerClass
-{
- GtkWidgetClass parent_class;
-};
-
-/*
- * Public methods
- */
-GType gedit_spinner_get_type (void) G_GNUC_CONST;
-
-GtkWidget *gedit_spinner_new (void);
-
-void gedit_spinner_start (GeditSpinner *throbber);
-
-void gedit_spinner_stop (GeditSpinner *throbber);
-
-void gedit_spinner_set_size (GeditSpinner *spinner,
- GtkIconSize size);
-
-G_END_DECLS
-
-#endif /* __GEDIT_SPINNER_H__ */
diff --git a/gedit/gedit-status-combo-box.c b/gedit/gedit-status-combo-box.c
deleted file mode 100755
index 71ea8c9f..00000000
--- a/gedit/gedit-status-combo-box.c
+++ /dev/null
@@ -1,418 +0,0 @@
-/*
- * gedit-status-combo-box.c
- * This file is part of gedit
- *
- * Copyright (C) 2008 - Jesse van den Kieboom
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#include "gedit-status-combo-box.h"
-
-#define COMBO_BOX_TEXT_DATA "GeditStatusComboBoxTextData"
-
-#define GEDIT_STATUS_COMBO_BOX_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE((object), GEDIT_TYPE_STATUS_COMBO_BOX, GeditStatusComboBoxPrivate))
-
-struct _GeditStatusComboBoxPrivate
-{
- GtkWidget *frame;
- GtkWidget *button;
- GtkWidget *hbox;
- GtkWidget *label;
- GtkWidget *item;
- GtkWidget *arrow;
-
- GtkWidget *menu;
- GtkWidget *current_item;
-};
-
-/* Signals */
-enum
-{
- CHANGED,
- NUM_SIGNALS
-};
-
-/* Properties */
-enum
-{
- PROP_0,
-
- PROP_LABEL
-};
-
-static guint signals[NUM_SIGNALS] = { 0 };
-
-G_DEFINE_TYPE(GeditStatusComboBox, gedit_status_combo_box, GTK_TYPE_EVENT_BOX)
-
-static void
-gedit_status_combo_box_finalize (GObject *object)
-{
- G_OBJECT_CLASS (gedit_status_combo_box_parent_class)->finalize (object);
-}
-
-static void
-gedit_status_combo_box_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- GeditStatusComboBox *obj = GEDIT_STATUS_COMBO_BOX (object);
-
- switch (prop_id)
- {
- case PROP_LABEL:
- g_value_set_string (value, gedit_status_combo_box_get_label (obj));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gedit_status_combo_box_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- GeditStatusComboBox *obj = GEDIT_STATUS_COMBO_BOX (object);
-
- switch (prop_id)
- {
- case PROP_LABEL:
- gedit_status_combo_box_set_label (obj, g_value_get_string (value));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gedit_status_combo_box_changed (GeditStatusComboBox *combo,
- GtkMenuItem *item)
-{
- const gchar *text;
-
- text = g_object_get_data (G_OBJECT (item), COMBO_BOX_TEXT_DATA);
-
- if (text != NULL)
- {
- gtk_label_set_markup (GTK_LABEL (combo->priv->item), text);
- combo->priv->current_item = GTK_WIDGET (item);
- }
-}
-
-static void
-gedit_status_combo_box_class_init (GeditStatusComboBoxClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->finalize = gedit_status_combo_box_finalize;
- object_class->get_property = gedit_status_combo_box_get_property;
- object_class->set_property = gedit_status_combo_box_set_property;
-
- klass->changed = gedit_status_combo_box_changed;
-
- signals[CHANGED] =
- g_signal_new ("changed",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GeditStatusComboBoxClass,
- changed), NULL, NULL,
- g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1,
- GTK_TYPE_MENU_ITEM);
-
- g_object_class_install_property (object_class, PROP_LABEL,
- g_param_spec_string ("label",
- "LABEL",
- "The label",
- NULL,
- G_PARAM_READWRITE));
-
- /* Set up a style for the button to decrease spacing. */
- gtk_rc_parse_string (
- "style \"gedit-status-combo-button-style\"\n"
- "{\n"
- " GtkWidget::focus-padding = 0\n"
- " GtkWidget::focus-line-width = 0\n"
- " xthickness = 0\n"
- " ythickness = 0\n"
- "}\n"
- "widget \"*.gedit-status-combo-button\" style \"gedit-status-combo-button-style\"");
-
- g_type_class_add_private (object_class, sizeof(GeditStatusComboBoxPrivate));
-}
-
-static void
-menu_deactivate (GtkMenu *menu,
- GeditStatusComboBox *combo)
-{
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (combo->priv->button), FALSE);
-}
-
-static void
-menu_position_func (GtkMenu *menu,
- gint *x,
- gint *y,
- gboolean *push_in,
- GeditStatusComboBox *combo)
-{
- GtkRequisition request;
-
- *push_in = FALSE;
-
- gtk_widget_size_request (gtk_widget_get_toplevel (GTK_WIDGET (menu)), &request);
-
- /* get the origin... */
- gdk_window_get_origin (GTK_WIDGET (combo)->window, x, y);
-
- /* make the menu as wide as the widget */
- if (request.width < GTK_WIDGET (combo)->allocation.width)
- {
- gtk_widget_set_size_request (GTK_WIDGET (menu), GTK_WIDGET (combo)->allocation.width, -1);
- }
-
- /* position it above the widget */
- *y -= request.height;
-}
-
-static void
-button_press_event (GtkWidget *widget,
- GdkEventButton *event,
- GeditStatusComboBox *combo)
-{
- GtkRequisition request;
- gint max_height;
-
- gtk_widget_size_request (combo->priv->menu, &request);
-
- /* do something relative to our own height here, maybe we can do better */
- max_height = GTK_WIDGET (combo)->allocation.height * 20;
-
- if (request.height > max_height)
- {
- gtk_widget_set_size_request (combo->priv->menu, -1, max_height);
- gtk_widget_set_size_request (gtk_widget_get_toplevel (combo->priv->menu), -1, max_height);
- }
-
- gtk_menu_popup (GTK_MENU (combo->priv->menu),
- NULL,
- NULL,
- (GtkMenuPositionFunc)menu_position_func,
- combo,
- event->button,
- event->time);
-
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (combo->priv->button), TRUE);
-
- if (combo->priv->current_item)
- {
- gtk_menu_shell_select_item (GTK_MENU_SHELL (combo->priv->menu),
- combo->priv->current_item);
- }
-}
-
-static void
-set_shadow_type (GeditStatusComboBox *combo)
-{
- GtkShadowType shadow_type;
- GtkWidget *statusbar;
-
- /* This is a hack needed to use the shadow type of a statusbar */
- statusbar = gtk_statusbar_new ();
- gtk_widget_ensure_style (statusbar);
-
- gtk_widget_style_get (statusbar, "shadow-type", &shadow_type, NULL);
- gtk_frame_set_shadow_type (GTK_FRAME (combo->priv->frame), shadow_type);
-
- gtk_widget_destroy (statusbar);
-}
-
-static void
-gedit_status_combo_box_init (GeditStatusComboBox *self)
-{
- self->priv = GEDIT_STATUS_COMBO_BOX_GET_PRIVATE (self);
-
- gtk_event_box_set_visible_window (GTK_EVENT_BOX (self), TRUE);
-
- self->priv->frame = gtk_frame_new (NULL);
- gtk_widget_show (self->priv->frame);
-
- self->priv->button = gtk_toggle_button_new ();
- gtk_widget_set_name (self->priv->button, "gedit-status-combo-button");
- gtk_button_set_relief (GTK_BUTTON (self->priv->button), GTK_RELIEF_NONE);
- gtk_widget_show (self->priv->button);
-
- set_shadow_type (self);
-
- self->priv->hbox = gtk_hbox_new (FALSE, 3);
- gtk_widget_show (self->priv->hbox);
-
- gtk_container_add (GTK_CONTAINER (self), self->priv->frame);
- gtk_container_add (GTK_CONTAINER (self->priv->frame), self->priv->button);
- gtk_container_add (GTK_CONTAINER (self->priv->button), self->priv->hbox);
-
- self->priv->label = gtk_label_new ("");
- gtk_widget_show (self->priv->label);
-
- gtk_label_set_single_line_mode (GTK_LABEL (self->priv->label), TRUE);
- gtk_misc_set_alignment (GTK_MISC (self->priv->label), 0.0, 0.5);
-
- gtk_box_pack_start (GTK_BOX (self->priv->hbox), self->priv->label, FALSE, TRUE, 0);
-
- self->priv->item = gtk_label_new ("");
- gtk_widget_show (self->priv->item);
-
- gtk_label_set_single_line_mode (GTK_LABEL (self->priv->item), TRUE);
- gtk_misc_set_alignment (GTK_MISC (self->priv->item), 0, 0.5);
-
- gtk_box_pack_start (GTK_BOX (self->priv->hbox), self->priv->item, TRUE, TRUE, 0);
-
- self->priv->arrow = gtk_arrow_new (GTK_ARROW_DOWN, GTK_SHADOW_NONE);
- gtk_widget_show (self->priv->arrow);
- gtk_misc_set_alignment (GTK_MISC (self->priv->arrow), 0.5, 0.5);
-
- gtk_box_pack_start (GTK_BOX (self->priv->hbox), self->priv->arrow, FALSE, TRUE, 0);
-
- self->priv->menu = gtk_menu_new ();
- g_object_ref_sink (self->priv->menu);
-
- g_signal_connect (self->priv->button,
- "button-press-event",
- G_CALLBACK (button_press_event),
- self);
- g_signal_connect (self->priv->menu,
- "deactivate",
- G_CALLBACK (menu_deactivate),
- self);
-}
-
-/* public functions */
-GtkWidget *
-gedit_status_combo_box_new (const gchar *label)
-{
- return g_object_new (GEDIT_TYPE_STATUS_COMBO_BOX, "label", label, NULL);
-}
-
-void
-gedit_status_combo_box_set_label (GeditStatusComboBox *combo,
- const gchar *label)
-{
- gchar *text;
-
- g_return_if_fail (GEDIT_IS_STATUS_COMBO_BOX (combo));
-
- text = g_strconcat (" ", label, ": ", NULL);
- gtk_label_set_markup (GTK_LABEL (combo->priv->label), text);
- g_free (text);
-}
-
-const gchar *
-gedit_status_combo_box_get_label (GeditStatusComboBox *combo)
-{
- g_return_val_if_fail (GEDIT_IS_STATUS_COMBO_BOX (combo), NULL);
-
- return gtk_label_get_label (GTK_LABEL (combo->priv->label));
-}
-
-static void
-item_activated (GtkMenuItem *item,
- GeditStatusComboBox *combo)
-{
- gedit_status_combo_box_set_item (combo, item);
-}
-
-void
-gedit_status_combo_box_add_item (GeditStatusComboBox *combo,
- GtkMenuItem *item,
- const gchar *text)
-{
- g_return_if_fail (GEDIT_IS_STATUS_COMBO_BOX (combo));
- g_return_if_fail (GTK_IS_MENU_ITEM (item));
-
- gtk_menu_shell_append (GTK_MENU_SHELL (combo->priv->menu), GTK_WIDGET (item));
-
- gedit_status_combo_box_set_item_text (combo, item, text);
- g_signal_connect (item, "activate", G_CALLBACK (item_activated), combo);
-}
-
-void
-gedit_status_combo_box_remove_item (GeditStatusComboBox *combo,
- GtkMenuItem *item)
-{
- g_return_if_fail (GEDIT_IS_STATUS_COMBO_BOX (combo));
- g_return_if_fail (GTK_IS_MENU_ITEM (item));
-
- gtk_container_remove (GTK_CONTAINER (combo->priv->menu),
- GTK_WIDGET (item));
-}
-
-GList *
-gedit_status_combo_box_get_items (GeditStatusComboBox *combo)
-{
- g_return_val_if_fail (GEDIT_IS_STATUS_COMBO_BOX (combo), NULL);
-
- return gtk_container_get_children (GTK_CONTAINER (combo->priv->menu));
-}
-
-const gchar *
-gedit_status_combo_box_get_item_text (GeditStatusComboBox *combo,
- GtkMenuItem *item)
-{
- const gchar *ret = NULL;
-
- g_return_val_if_fail (GEDIT_IS_STATUS_COMBO_BOX (combo), NULL);
- g_return_val_if_fail (GTK_IS_MENU_ITEM (item), NULL);
-
- ret = g_object_get_data (G_OBJECT (item), COMBO_BOX_TEXT_DATA);
-
- return ret;
-}
-
-void
-gedit_status_combo_box_set_item_text (GeditStatusComboBox *combo,
- GtkMenuItem *item,
- const gchar *text)
-{
- g_return_if_fail (GEDIT_IS_STATUS_COMBO_BOX (combo));
- g_return_if_fail (GTK_IS_MENU_ITEM (item));
-
- g_object_set_data_full (G_OBJECT (item),
- COMBO_BOX_TEXT_DATA,
- g_strdup (text),
- (GDestroyNotify)g_free);
-}
-
-void
-gedit_status_combo_box_set_item (GeditStatusComboBox *combo,
- GtkMenuItem *item)
-{
- g_return_if_fail (GEDIT_IS_STATUS_COMBO_BOX (combo));
- g_return_if_fail (GTK_IS_MENU_ITEM (item));
-
- g_signal_emit (combo, signals[CHANGED], 0, item, NULL);
-}
-
-GtkLabel *
-gedit_status_combo_box_get_item_label (GeditStatusComboBox *combo)
-{
- g_return_val_if_fail (GEDIT_IS_STATUS_COMBO_BOX (combo), NULL);
-
- return GTK_LABEL (combo->priv->item);
-}
-
diff --git a/gedit/gedit-status-combo-box.h b/gedit/gedit-status-combo-box.h
deleted file mode 100755
index e3593a8a..00000000
--- a/gedit/gedit-status-combo-box.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * gedit-status-combo-box.h
- * This file is part of gedit
- *
- * Copyright (C) 2008 - Jesse van den Kieboom
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#ifndef __GEDIT_STATUS_COMBO_BOX_H__
-#define __GEDIT_STATUS_COMBO_BOX_H__
-
-#include <gtk/gtk.h>
-
-G_BEGIN_DECLS
-
-#define GEDIT_TYPE_STATUS_COMBO_BOX (gedit_status_combo_box_get_type ())
-#define GEDIT_STATUS_COMBO_BOX(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEDIT_TYPE_STATUS_COMBO_BOX, GeditStatusComboBox))
-#define GEDIT_STATUS_COMBO_BOX_CONST(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEDIT_TYPE_STATUS_COMBO_BOX, GeditStatusComboBox const))
-#define GEDIT_STATUS_COMBO_BOX_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEDIT_TYPE_STATUS_COMBO_BOX, GeditStatusComboBoxClass))
-#define GEDIT_IS_STATUS_COMBO_BOX(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEDIT_TYPE_STATUS_COMBO_BOX))
-#define GEDIT_IS_STATUS_COMBO_BOX_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEDIT_TYPE_STATUS_COMBO_BOX))
-#define GEDIT_STATUS_COMBO_BOX_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEDIT_TYPE_STATUS_COMBO_BOX, GeditStatusComboBoxClass))
-
-typedef struct _GeditStatusComboBox GeditStatusComboBox;
-typedef struct _GeditStatusComboBoxClass GeditStatusComboBoxClass;
-typedef struct _GeditStatusComboBoxPrivate GeditStatusComboBoxPrivate;
-
-struct _GeditStatusComboBox {
- GtkEventBox parent;
-
- GeditStatusComboBoxPrivate *priv;
-};
-
-struct _GeditStatusComboBoxClass {
- GtkEventBoxClass parent_class;
-
- void (*changed) (GeditStatusComboBox *combo,
- GtkMenuItem *item);
-};
-
-GType gedit_status_combo_box_get_type (void) G_GNUC_CONST;
-GtkWidget *gedit_status_combo_box_new (const gchar *label);
-
-const gchar *gedit_status_combo_box_get_label (GeditStatusComboBox *combo);
-void gedit_status_combo_box_set_label (GeditStatusComboBox *combo,
- const gchar *label);
-
-void gedit_status_combo_box_add_item (GeditStatusComboBox *combo,
- GtkMenuItem *item,
- const gchar *text);
-void gedit_status_combo_box_remove_item (GeditStatusComboBox *combo,
- GtkMenuItem *item);
-
-GList *gedit_status_combo_box_get_items (GeditStatusComboBox *combo);
-const gchar *gedit_status_combo_box_get_item_text (GeditStatusComboBox *combo,
- GtkMenuItem *item);
-void gedit_status_combo_box_set_item_text (GeditStatusComboBox *combo,
- GtkMenuItem *item,
- const gchar *text);
-
-void gedit_status_combo_box_set_item (GeditStatusComboBox *combo,
- GtkMenuItem *item);
-
-GtkLabel *gedit_status_combo_box_get_item_label (GeditStatusComboBox *combo);
-
-G_END_DECLS
-
-#endif /* __GEDIT_STATUS_COMBO_BOX_H__ */
diff --git a/gedit/gedit-statusbar.c b/gedit/gedit-statusbar.c
deleted file mode 100755
index 178147c8..00000000
--- a/gedit/gedit-statusbar.c
+++ /dev/null
@@ -1,448 +0,0 @@
-/*
- * gedit-statusbar.c
- * This file is part of gedit
- *
- * Copyright (C) 2005 - Paolo Borelli
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <string.h>
-#include <glib/gi18n.h>
-#include <gtk/gtk.h>
-
-#include "gedit-statusbar.h"
-
-#define GEDIT_STATUSBAR_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object),\
- GEDIT_TYPE_STATUSBAR,\
- GeditStatusbarPrivate))
-
-struct _GeditStatusbarPrivate
-{
- GtkWidget *overwrite_mode_statusbar;
- GtkWidget *cursor_position_statusbar;
-
- GtkWidget *state_frame;
- GtkWidget *load_image;
- GtkWidget *save_image;
- GtkWidget *print_image;
-
- GtkWidget *error_frame;
- GtkWidget *error_event_box;
-
- /* tmp flash timeout data */
- guint flash_timeout;
- guint flash_context_id;
- guint flash_message_id;
-};
-
-G_DEFINE_TYPE(GeditStatusbar, gedit_statusbar, GTK_TYPE_STATUSBAR)
-
-
-static gchar *
-get_overwrite_mode_string (gboolean overwrite)
-{
- return g_strconcat (" ", overwrite ? _("OVR") : _("INS"), NULL);
-}
-
-static gint
-get_overwrite_mode_length (void)
-{
- return 2 + MAX (g_utf8_strlen (_("OVR"), -1), g_utf8_strlen (_("INS"), -1));
-}
-
-static void
-gedit_statusbar_notify (GObject *object,
- GParamSpec *pspec)
-{
- /* don't allow gtk_statusbar_set_has_resize_grip to mess with us.
- * See _gedit_statusbar_set_has_resize_grip for an explanation.
- */
- if (strcmp (g_param_spec_get_name (pspec), "has-resize-grip") == 0)
- {
- gtk_statusbar_set_has_resize_grip (GTK_STATUSBAR (object), FALSE);
- return;
- }
-
- if (G_OBJECT_CLASS (gedit_statusbar_parent_class)->notify)
- G_OBJECT_CLASS (gedit_statusbar_parent_class)->notify (object, pspec);
-}
-
-static void
-gedit_statusbar_finalize (GObject *object)
-{
- GeditStatusbar *statusbar = GEDIT_STATUSBAR (object);
-
- if (statusbar->priv->flash_timeout > 0)
- g_source_remove (statusbar->priv->flash_timeout);
-
- G_OBJECT_CLASS (gedit_statusbar_parent_class)->finalize (object);
-}
-
-static void
-gedit_statusbar_class_init (GeditStatusbarClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->notify = gedit_statusbar_notify;
- object_class->finalize = gedit_statusbar_finalize;
-
- g_type_class_add_private (object_class, sizeof (GeditStatusbarPrivate));
-}
-
-#define RESIZE_GRIP_EXTRA_WIDTH 30
-
-static void
-set_statusbar_width_chars (GtkWidget *statusbar,
- gint n_chars,
- gboolean has_resize_grip)
-{
- PangoContext *context;
- PangoFontMetrics *metrics;
- gint char_width, digit_width, width;
- GtkStyle *style;
-
- context = gtk_widget_get_pango_context (statusbar);
- style = gtk_widget_get_style (GTK_WIDGET (statusbar));
- metrics = pango_context_get_metrics (context,
- style->font_desc,
- pango_context_get_language (context));
-
- char_width = pango_font_metrics_get_approximate_digit_width (metrics);
- digit_width = pango_font_metrics_get_approximate_char_width (metrics);
-
- width = PANGO_PIXELS (MAX (char_width, digit_width) * n_chars);
-
- pango_font_metrics_unref (metrics);
-
- /* If there is a resize grip, allocate some extra width.
- * It would be nice to calculate the exact size programmatically
- * but I could not find out how to do it */
- if (has_resize_grip)
- width += RESIZE_GRIP_EXTRA_WIDTH;
-
- gtk_widget_set_size_request (statusbar, width, -1);
-}
-
-static void
-gedit_statusbar_init (GeditStatusbar *statusbar)
-{
- GtkWidget *hbox;
- GtkWidget *error_image;
-
- statusbar->priv = GEDIT_STATUSBAR_GET_PRIVATE (statusbar);
-
- gtk_statusbar_set_has_resize_grip (GTK_STATUSBAR (statusbar), FALSE);
-
- statusbar->priv->overwrite_mode_statusbar = gtk_statusbar_new ();
- gtk_widget_show (statusbar->priv->overwrite_mode_statusbar);
- gtk_statusbar_set_has_resize_grip (GTK_STATUSBAR (statusbar->priv->overwrite_mode_statusbar),
- TRUE);
- set_statusbar_width_chars (statusbar->priv->overwrite_mode_statusbar,
- get_overwrite_mode_length (),
- TRUE);
- gtk_box_pack_end (GTK_BOX (statusbar),
- statusbar->priv->overwrite_mode_statusbar,
- FALSE, TRUE, 0);
-
- statusbar->priv->cursor_position_statusbar = gtk_statusbar_new ();
- gtk_widget_show (statusbar->priv->cursor_position_statusbar);
- gtk_statusbar_set_has_resize_grip (GTK_STATUSBAR (statusbar->priv->cursor_position_statusbar),
- FALSE);
- set_statusbar_width_chars (statusbar->priv->cursor_position_statusbar, 18, FALSE);
- gtk_box_pack_end (GTK_BOX (statusbar),
- statusbar->priv->cursor_position_statusbar,
- FALSE, TRUE, 0);
-
- statusbar->priv->state_frame = gtk_frame_new (NULL);
- gtk_frame_set_shadow_type (GTK_FRAME (statusbar->priv->state_frame), GTK_SHADOW_IN);
-
- hbox = gtk_hbox_new (FALSE, 0);
- gtk_container_add (GTK_CONTAINER (statusbar->priv->state_frame), hbox);
-
- statusbar->priv->load_image = gtk_image_new_from_stock (GTK_STOCK_OPEN, GTK_ICON_SIZE_MENU);
- statusbar->priv->save_image = gtk_image_new_from_stock (GTK_STOCK_SAVE, GTK_ICON_SIZE_MENU);
- statusbar->priv->print_image = gtk_image_new_from_stock (GTK_STOCK_PRINT, GTK_ICON_SIZE_MENU);
-
- gtk_widget_show (hbox);
-
- gtk_box_pack_start (GTK_BOX (hbox),
- statusbar->priv->load_image,
- FALSE, TRUE, 4);
- gtk_box_pack_start (GTK_BOX (hbox),
- statusbar->priv->save_image,
- FALSE, TRUE, 4);
- gtk_box_pack_start (GTK_BOX (hbox),
- statusbar->priv->print_image,
- FALSE, TRUE, 4);
-
- gtk_box_pack_start (GTK_BOX (statusbar),
- statusbar->priv->state_frame,
- FALSE, TRUE, 0);
-
- statusbar->priv->error_frame = gtk_frame_new (NULL);
- gtk_frame_set_shadow_type (GTK_FRAME (statusbar->priv->error_frame), GTK_SHADOW_IN);
-
- error_image = gtk_image_new_from_stock (GTK_STOCK_DIALOG_ERROR, GTK_ICON_SIZE_MENU);
- gtk_misc_set_padding (GTK_MISC (error_image), 4, 0);
- gtk_widget_show (error_image);
-
- statusbar->priv->error_event_box = gtk_event_box_new ();
- gtk_event_box_set_visible_window (GTK_EVENT_BOX (statusbar->priv->error_event_box),
- FALSE);
- gtk_widget_show (statusbar->priv->error_event_box);
-
- gtk_container_add (GTK_CONTAINER (statusbar->priv->error_frame),
- statusbar->priv->error_event_box);
- gtk_container_add (GTK_CONTAINER (statusbar->priv->error_event_box),
- error_image);
-
- gtk_box_pack_start (GTK_BOX (statusbar),
- statusbar->priv->error_frame,
- FALSE, TRUE, 0);
-
- gtk_box_reorder_child (GTK_BOX (statusbar),
- statusbar->priv->error_frame,
- 0);
-}
-
-/**
- * gedit_statusbar_new:
- *
- * Creates a new #GeditStatusbar.
- *
- * Return value: the new #GeditStatusbar object
- **/
-GtkWidget *
-gedit_statusbar_new (void)
-{
- return GTK_WIDGET (g_object_new (GEDIT_TYPE_STATUSBAR, NULL));
-}
-
-/**
- * gedit_set_has_resize_grip:
- * @statusbar: a #GeditStatusbar
- * @show: if the resize grip is shown
- *
- * Sets if a resize grip showld be shown.
- *
- **/
- /*
- * I don't like this much, in a perfect world it would have been
- * possible to override the parent property and use
- * gtk_statusbar_set_has_resize_grip. Unfortunately this is not
- * possible and it's not even possible to intercept the notify signal
- * since the parent property should always be set to false thus when
- * using set_resize_grip (FALSE) the property doesn't change and the
- * notification is not emitted.
- * For now just add this private method; if needed we can turn it into
- * a property.
- */
-void
-_gedit_statusbar_set_has_resize_grip (GeditStatusbar *bar,
- gboolean show)
-{
- g_return_if_fail (GEDIT_IS_STATUSBAR (bar));
-
- gtk_statusbar_set_has_resize_grip (GTK_STATUSBAR (bar->priv->overwrite_mode_statusbar),
- show);
-}
-
-/**
- * gedit_statusbar_set_overwrite:
- * @statusbar: a #GeditStatusbar
- * @overwrite: if the overwrite mode is set
- *
- * Sets the overwrite mode on the statusbar.
- **/
-void
-gedit_statusbar_set_overwrite (GeditStatusbar *statusbar,
- gboolean overwrite)
-{
- gchar *msg;
-
- g_return_if_fail (GEDIT_IS_STATUSBAR (statusbar));
-
- gtk_statusbar_pop (GTK_STATUSBAR (statusbar->priv->overwrite_mode_statusbar), 0);
-
- msg = get_overwrite_mode_string (overwrite);
-
- gtk_statusbar_push (GTK_STATUSBAR (statusbar->priv->overwrite_mode_statusbar), 0, msg);
-
- g_free (msg);
-}
-
-void
-gedit_statusbar_clear_overwrite (GeditStatusbar *statusbar)
-{
- g_return_if_fail (GEDIT_IS_STATUSBAR (statusbar));
-
- gtk_statusbar_pop (GTK_STATUSBAR (statusbar->priv->overwrite_mode_statusbar), 0);
-}
-
-/**
- * gedit_statusbar_cursor_position:
- * @statusbar: an #GeditStatusbar
- * @line: line position
- * @col: column position
- *
- * Sets the cursor position on the statusbar.
- **/
-void
-gedit_statusbar_set_cursor_position (GeditStatusbar *statusbar,
- gint line,
- gint col)
-{
- gchar *msg;
-
- g_return_if_fail (GEDIT_IS_STATUSBAR (statusbar));
-
- gtk_statusbar_pop (GTK_STATUSBAR (statusbar->priv->cursor_position_statusbar), 0);
-
- if ((line == -1) && (col == -1))
- return;
-
- /* Translators: "Ln" is an abbreviation for "Line", Col is an abbreviation for "Column". Please,
- use abbreviations if possible to avoid space problems. */
- msg = g_strdup_printf (_(" Ln %d, Col %d"), line, col);
-
- gtk_statusbar_push (GTK_STATUSBAR (statusbar->priv->cursor_position_statusbar), 0, msg);
-
- g_free (msg);
-}
-
-static gboolean
-remove_message_timeout (GeditStatusbar *statusbar)
-{
- gtk_statusbar_remove (GTK_STATUSBAR (statusbar),
- statusbar->priv->flash_context_id,
- statusbar->priv->flash_message_id);
-
- /* remove the timeout */
- statusbar->priv->flash_timeout = 0;
- return FALSE;
-}
-
-/**
- * gedit_statusbar_flash_message:
- * @statusbar: a #GeditStatusbar
- * @context_id: message context_id
- * @format: message to flash on the statusbar
- *
- * Flash a temporary message on the statusbar.
- */
-void
-gedit_statusbar_flash_message (GeditStatusbar *statusbar,
- guint context_id,
- const gchar *format, ...)
-{
- const guint32 flash_length = 3000; /* three seconds */
- va_list args;
- gchar *msg;
-
- g_return_if_fail (GEDIT_IS_STATUSBAR (statusbar));
- g_return_if_fail (format != NULL);
-
- va_start (args, format);
- msg = g_strdup_vprintf (format, args);
- va_end (args);
-
- /* remove a currently ongoing flash message */
- if (statusbar->priv->flash_timeout > 0)
- {
- g_source_remove (statusbar->priv->flash_timeout);
- statusbar->priv->flash_timeout = 0;
-
- gtk_statusbar_remove (GTK_STATUSBAR (statusbar),
- statusbar->priv->flash_context_id,
- statusbar->priv->flash_message_id);
- }
-
- statusbar->priv->flash_context_id = context_id;
- statusbar->priv->flash_message_id = gtk_statusbar_push (GTK_STATUSBAR (statusbar),
- context_id,
- msg);
-
- statusbar->priv->flash_timeout = g_timeout_add (flash_length,
- (GtkFunction) remove_message_timeout,
- statusbar);
-
- g_free (msg);
-}
-
-void
-gedit_statusbar_set_window_state (GeditStatusbar *statusbar,
- GeditWindowState state,
- gint num_of_errors)
-{
- g_return_if_fail (GEDIT_IS_STATUSBAR (statusbar));
-
- gtk_widget_hide (statusbar->priv->state_frame);
- gtk_widget_hide (statusbar->priv->save_image);
- gtk_widget_hide (statusbar->priv->load_image);
- gtk_widget_hide (statusbar->priv->print_image);
-
- if (state & GEDIT_WINDOW_STATE_SAVING)
- {
- gtk_widget_show (statusbar->priv->state_frame);
- gtk_widget_show (statusbar->priv->save_image);
- }
- if (state & GEDIT_WINDOW_STATE_LOADING)
- {
- gtk_widget_show (statusbar->priv->state_frame);
- gtk_widget_show (statusbar->priv->load_image);
- }
-
- if (state & GEDIT_WINDOW_STATE_PRINTING)
- {
- gtk_widget_show (statusbar->priv->state_frame);
- gtk_widget_show (statusbar->priv->print_image);
- }
-
- if (state & GEDIT_WINDOW_STATE_ERROR)
- {
- gchar *tip;
-
- tip = g_strdup_printf (ngettext("There is a tab with errors",
- "There are %d tabs with errors",
- num_of_errors),
- num_of_errors);
-
- gtk_widget_set_tooltip_text (statusbar->priv->error_event_box,
- tip);
- g_free (tip);
-
- gtk_widget_show (statusbar->priv->error_frame);
- }
- else
- {
- gtk_widget_hide (statusbar->priv->error_frame);
- }
-}
-
-
diff --git a/gedit/gedit-statusbar.h b/gedit/gedit-statusbar.h
deleted file mode 100755
index b98790b7..00000000
--- a/gedit/gedit-statusbar.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * gedit-statusbar.h
- * This file is part of gedit
- *
- * Copyright (C) 2005 - Paolo Borelli
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- */
-
-#ifndef GEDIT_STATUSBAR_H
-#define GEDIT_STATUSBAR_H
-
-#include <gtk/gtk.h>
-#include <gedit/gedit-window.h>
-
-G_BEGIN_DECLS
-
-#define GEDIT_TYPE_STATUSBAR (gedit_statusbar_get_type ())
-#define GEDIT_STATUSBAR(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GEDIT_TYPE_STATUSBAR, GeditStatusbar))
-#define GEDIT_STATUSBAR_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GEDIT_TYPE_STATUSBAR, GeditStatusbarClass))
-#define GEDIT_IS_STATUSBAR(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GEDIT_TYPE_STATUSBAR))
-#define GEDIT_IS_STATUSBAR_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GEDIT_TYPE_STATUSBAR))
-#define GEDIT_STATUSBAR_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GEDIT_TYPE_STATUSBAR, GeditStatusbarClass))
-
-typedef struct _GeditStatusbar GeditStatusbar;
-typedef struct _GeditStatusbarPrivate GeditStatusbarPrivate;
-typedef struct _GeditStatusbarClass GeditStatusbarClass;
-
-struct _GeditStatusbar
-{
- GtkStatusbar parent;
-
- /* <private/> */
- GeditStatusbarPrivate *priv;
-};
-
-struct _GeditStatusbarClass
-{
- GtkStatusbarClass parent_class;
-};
-
-GType gedit_statusbar_get_type (void) G_GNUC_CONST;
-
-GtkWidget *gedit_statusbar_new (void);
-
-/* FIXME: status is not defined in any .h */
-#define GeditStatus gint
-void gedit_statusbar_set_window_state (GeditStatusbar *statusbar,
- GeditWindowState state,
- gint num_of_errors);
-
-void gedit_statusbar_set_overwrite (GeditStatusbar *statusbar,
- gboolean overwrite);
-
-void gedit_statusbar_set_cursor_position (GeditStatusbar *statusbar,
- gint line,
- gint col);
-
-void gedit_statusbar_clear_overwrite (GeditStatusbar *statusbar);
-
-void gedit_statusbar_flash_message (GeditStatusbar *statusbar,
- guint context_id,
- const gchar *format,
- ...) G_GNUC_PRINTF(3, 4);
-/* FIXME: these would be nice for plugins...
-void gedit_statusbar_add_widget (GeditStatusbar *statusbar,
- GtkWidget *widget);
-void gedit_statusbar_remove_widget (GeditStatusbar *statusbar,
- GtkWidget *widget);
-*/
-
-/*
- * Non exported functions
- */
-void _gedit_statusbar_set_has_resize_grip (GeditStatusbar *statusbar,
- gboolean show);
-
-G_END_DECLS
-
-#endif
diff --git a/gedit/gedit-style-scheme-manager.c b/gedit/gedit-style-scheme-manager.c
deleted file mode 100755
index a65fedd7..00000000
--- a/gedit/gedit-style-scheme-manager.c
+++ /dev/null
@@ -1,364 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * gedit-source-style-manager.c
- *
- * Copyright (C) 2007 - Paolo Borelli and Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2007. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#include <string.h>
-#include <errno.h>
-
-#include <glib/gi18n.h>
-#include <glib/gstdio.h>
-
-#include "gedit-style-scheme-manager.h"
-#include "gedit-prefs-manager.h"
-#include "gedit-dirs.h"
-
-static GtkSourceStyleSchemeManager *style_scheme_manager = NULL;
-
-static gchar *
-get_gedit_styles_path (void)
-{
- gchar *config_dir;
- gchar *dir = NULL;
-
- config_dir = gedit_dirs_get_user_config_dir ();
-
- if (config_dir != NULL)
- {
- dir = g_build_filename (config_dir,
- "styles",
- NULL);
- g_free (config_dir);
- }
-
- return dir;
-}
-
-static void
-add_gedit_styles_path (GtkSourceStyleSchemeManager *mgr)
-{
- gchar *dir;
-
- dir = get_gedit_styles_path();
-
- if (dir != NULL)
- {
- gtk_source_style_scheme_manager_append_search_path (mgr, dir);
- g_free (dir);
- }
-}
-
-GtkSourceStyleSchemeManager *
-gedit_get_style_scheme_manager (void)
-{
- if (style_scheme_manager == NULL)
- {
- style_scheme_manager = gtk_source_style_scheme_manager_new ();
- add_gedit_styles_path (style_scheme_manager);
- }
-
- return style_scheme_manager;
-}
-
-static gint
-schemes_compare (gconstpointer a, gconstpointer b)
-{
- GtkSourceStyleScheme *scheme_a = (GtkSourceStyleScheme *)a;
- GtkSourceStyleScheme *scheme_b = (GtkSourceStyleScheme *)b;
-
- const gchar *name_a = gtk_source_style_scheme_get_name (scheme_a);
- const gchar *name_b = gtk_source_style_scheme_get_name (scheme_b);
-
- return g_utf8_collate (name_a, name_b);
-}
-
-GSList *
-gedit_style_scheme_manager_list_schemes_sorted (GtkSourceStyleSchemeManager *manager)
-{
- const gchar * const * scheme_ids;
- GSList *schemes = NULL;
-
- g_return_val_if_fail (GTK_IS_SOURCE_STYLE_SCHEME_MANAGER (manager), NULL);
-
- scheme_ids = gtk_source_style_scheme_manager_get_scheme_ids (manager);
-
- while (*scheme_ids != NULL)
- {
- GtkSourceStyleScheme *scheme;
-
- scheme = gtk_source_style_scheme_manager_get_scheme (manager,
- *scheme_ids);
-
- schemes = g_slist_prepend (schemes, scheme);
-
- ++scheme_ids;
- }
-
- if (schemes != NULL)
- schemes = g_slist_sort (schemes, (GCompareFunc)schemes_compare);
-
- return schemes;
-}
-
-gboolean
-_gedit_style_scheme_manager_scheme_is_gedit_user_scheme (GtkSourceStyleSchemeManager *manager,
- const gchar *scheme_id)
-{
- GtkSourceStyleScheme *scheme;
- const gchar *filename;
- gchar *dir;
- gboolean res = FALSE;
-
- scheme = gtk_source_style_scheme_manager_get_scheme (manager, scheme_id);
- if (scheme == NULL)
- return FALSE;
-
- filename = gtk_source_style_scheme_get_filename (scheme);
- if (filename == NULL)
- return FALSE;
-
- dir = get_gedit_styles_path ();
-
- res = g_str_has_prefix (filename, dir);
-
- g_free (dir);
-
- return res;
-}
-
-/**
- * file_copy:
- * @name: a pointer to a %NULL-terminated string, that names
- * the file to be copied, in the GLib file name encoding
- * @dest_name: a pointer to a %NULL-terminated string, that is the
- * name for the destination file, in the GLib file name encoding
- * @error: return location for a #GError, or %NULL
- *
- * Copies file @name to @dest_name.
- *
- * If the call was successful, it returns %TRUE. If the call was not
- * successful, it returns %FALSE and sets @error. The error domain
- * is #G_FILE_ERROR. Possible error
- * codes are those in the #GFileError enumeration.
- *
- * Return value: %TRUE on success, %FALSE otherwise.
- */
-static gboolean
-file_copy (const gchar *name,
- const gchar *dest_name,
- GError **error)
-{
- gchar *contents;
- gsize length;
- gchar *dest_dir;
-
- /* FIXME - Paolo (Aug. 13, 2007):
- * Since the style scheme files are relatively small, we can implement
- * file copy getting all the content of the source file in a buffer and
- * then write the content to the destination file. In this way we
- * can use the g_file_get_contents and g_file_set_contents and avoid to
- * write custom code to copy the file (with sane error management).
- * If needed we can improve this code later. */
-
- g_return_val_if_fail (name != NULL, FALSE);
- g_return_val_if_fail (dest_name != NULL, FALSE);
- g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
-
- /* Note: we allow to copy a file to itself since this is not a problem
- * in our use case */
-
- /* Ensure the destination directory exists */
- dest_dir = g_path_get_dirname (dest_name);
-
- errno = 0;
- if (g_mkdir_with_parents (dest_dir, 0755) != 0)
- {
- gint save_errno = errno;
- gchar *display_filename = g_filename_display_name (dest_dir);
-
- g_set_error (error,
- G_FILE_ERROR,
- g_file_error_from_errno (save_errno),
- _("Directory '%s' could not be created: g_mkdir_with_parents() failed: %s"),
- display_filename,
- g_strerror (save_errno));
-
- g_free (dest_dir);
- g_free (display_filename);
-
- return FALSE;
- }
-
- g_free (dest_dir);
-
- if (!g_file_get_contents (name, &contents, &length, error))
- return FALSE;
-
- if (!g_file_set_contents (dest_name, contents, length, error))
- return FALSE;
-
- g_free (contents);
-
- return TRUE;
-}
-
-/**
- * _gedit_style_scheme_manager_install_scheme:
- * @manager: a #GtkSourceStyleSchemeManager
- * @fname: the file name of the style scheme to be installed
- *
- * Install a new user scheme.
- * This function copies @fname in #GEDIT_STYLES_DIR and ask the style manager to
- * recompute the list of available style schemes. It then checks if a style
- * scheme with the right file name exists.
- *
- * If the call was succesful, it returns the id of the installed scheme
- * otherwise %NULL.
- *
- * Return value: the id of the installed scheme, %NULL otherwise.
- */
-const gchar *
-_gedit_style_scheme_manager_install_scheme (GtkSourceStyleSchemeManager *manager,
- const gchar *fname)
-{
- gchar *new_file_name = NULL;
- gchar *dirname;
- gchar *styles_dir;
- GError *error = NULL;
- gboolean copied = FALSE;
-
- const gchar* const *ids;
-
- g_return_val_if_fail (GTK_IS_SOURCE_STYLE_SCHEME_MANAGER (manager), NULL);
- g_return_val_if_fail (fname != NULL, NULL);
-
- dirname = g_path_get_dirname (fname);
- styles_dir = get_gedit_styles_path();
-
- if (strcmp (dirname, styles_dir) != 0)
- {
- gchar *basename;
-
- basename = g_path_get_basename (fname);
- new_file_name = g_build_filename (styles_dir, basename, NULL);
- g_free (basename);
-
- /* Copy the style scheme file into GEDIT_STYLES_DIR */
- if (!file_copy (fname, new_file_name, &error))
- {
- g_free (new_file_name);
-
- g_message ("Cannot install style scheme:\n%s",
- error->message);
-
- return NULL;
- }
-
- copied = TRUE;
- }
- else
- {
- new_file_name = g_strdup (fname);
- }
-
- g_free (dirname);
- g_free (styles_dir);
-
- /* Reload the available style schemes */
- gtk_source_style_scheme_manager_force_rescan (manager);
-
- /* Check the new style scheme has been actually installed */
- ids = gtk_source_style_scheme_manager_get_scheme_ids (manager);
-
- while (*ids != NULL)
- {
- GtkSourceStyleScheme *scheme;
- const gchar *filename;
-
- scheme = gtk_source_style_scheme_manager_get_scheme (
- gedit_get_style_scheme_manager (), *ids);
-
- filename = gtk_source_style_scheme_get_filename (scheme);
-
- if (filename && (strcmp (filename, new_file_name) == 0))
- {
- /* The style scheme has been correctly installed */
- g_free (new_file_name);
-
- return gtk_source_style_scheme_get_id (scheme);
- }
- ++ids;
- }
-
- /* The style scheme has not been correctly installed */
- if (copied)
- g_unlink (new_file_name);
-
- g_free (new_file_name);
-
- return NULL;
-}
-
-/**
- * _gedit_style_scheme_manager_uninstall_scheme:
- * @manager: a #GtkSourceStyleSchemeManager
- * @id: the id of the style scheme to be uninstalled
- *
- * Uninstall a user scheme.
- *
- * If the call was succesful, it returns %TRUE
- * otherwise %FALSE.
- *
- * Return value: %TRUE on success, %FALSE otherwise.
- */
-gboolean
-_gedit_style_scheme_manager_uninstall_scheme (GtkSourceStyleSchemeManager *manager,
- const gchar *id)
-{
- GtkSourceStyleScheme *scheme;
- const gchar *filename;
-
- g_return_val_if_fail (GTK_IS_SOURCE_STYLE_SCHEME_MANAGER (manager), FALSE);
- g_return_val_if_fail (id != NULL, FALSE);
-
- scheme = gtk_source_style_scheme_manager_get_scheme (manager, id);
- if (scheme == NULL)
- return FALSE;
-
- filename = gtk_source_style_scheme_get_filename (scheme);
- if (filename == NULL)
- return FALSE;
-
- if (g_unlink (filename) == -1)
- return FALSE;
-
- /* Reload the available style schemes */
- gtk_source_style_scheme_manager_force_rescan (manager);
-
- return TRUE;
-}
diff --git a/gedit/gedit-style-scheme-manager.h b/gedit/gedit-style-scheme-manager.h
deleted file mode 100755
index 406719ae..00000000
--- a/gedit/gedit-style-scheme-manager.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * gedit-style-scheme-manager.h
- *
- * Copyright (C) 2007 - Paolo Borelli
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * $Id: gedit-source-style-manager.h 5598 2007-04-15 13:16:24Z pborelli $
- */
-
-#ifndef __GEDIT_STYLE_SCHEME_MANAGER_H__
-#define __GEDIT_STYLE_SCHEME_MANAGER_H__
-
-#include <gtksourceview/gtksourcestyleschememanager.h>
-
-G_BEGIN_DECLS
-
-GtkSourceStyleSchemeManager *
- gedit_get_style_scheme_manager (void);
-
-/* Returns a sorted list of style schemes */
-GSList *gedit_style_scheme_manager_list_schemes_sorted
- (GtkSourceStyleSchemeManager *manager);
-
-/*
- * Non exported functions
- */
-gboolean _gedit_style_scheme_manager_scheme_is_gedit_user_scheme
- (GtkSourceStyleSchemeManager *manager,
- const gchar *scheme_id);
-
-const gchar *_gedit_style_scheme_manager_install_scheme
- (GtkSourceStyleSchemeManager *manager,
- const gchar *fname);
-
-gboolean _gedit_style_scheme_manager_uninstall_scheme
- (GtkSourceStyleSchemeManager *manager,
- const gchar *id);
-
-G_END_DECLS
-
-#endif /* __GEDIT_STYLE_SCHEME_MANAGER_H__ */
diff --git a/gedit/gedit-tab-label.c b/gedit/gedit-tab-label.c
deleted file mode 100755
index a358ae94..00000000
--- a/gedit/gedit-tab-label.c
+++ /dev/null
@@ -1,371 +0,0 @@
-/*
- * gedit-tab-label.c
- * This file is part of gedit
- *
- * Copyright (C) 2010 - Paolo Borelli
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <glib/gi18n.h>
-#include <gtk/gtk.h>
-#include "gedit-tab-label.h"
-#include "gedit-close-button.h"
-
-#ifdef BUILD_SPINNER
-#include "gedit-spinner.h"
-#endif
-
-#define GEDIT_TAB_LABEL_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE((object), GEDIT_TYPE_TAB_LABEL, GeditTabLabelPrivate))
-
-/* Signals */
-enum
-{
- CLOSE_CLICKED,
- LAST_SIGNAL
-};
-
-enum
-{
- PROP_0,
- PROP_TAB
-};
-
-struct _GeditTabLabelPrivate
-{
- GeditTab *tab;
-
- GtkWidget *ebox;
- GtkWidget *close_button;
- GtkWidget *spinner;
- GtkWidget *icon;
- GtkWidget *label;
-
- gboolean close_button_sensitive;
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
-G_DEFINE_TYPE (GeditTabLabel, gedit_tab_label, GTK_TYPE_HBOX)
-
-static void
-gedit_tab_label_finalize (GObject *object)
-{
- G_OBJECT_CLASS (gedit_tab_label_parent_class)->finalize (object);
-}
-
-static void
-gedit_tab_label_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- GeditTabLabel *tab_label = GEDIT_TAB_LABEL (object);
-
- switch (prop_id)
- {
- case PROP_TAB:
- tab_label->priv->tab = GEDIT_TAB (g_value_get_object (value));
- break;
-
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gedit_tab_label_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- GeditTabLabel *tab_label = GEDIT_TAB_LABEL (object);
-
- switch (prop_id)
- {
- case PROP_TAB:
- g_value_set_object (value, tab_label->priv->tab);
- break;
-
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-close_button_clicked_cb (GtkWidget *widget,
- GeditTabLabel *tab_label)
-{
- g_signal_emit (tab_label, signals[CLOSE_CLICKED], 0, NULL);
-}
-
-static void
-sync_tip (GeditTab *tab, GeditTabLabel *tab_label)
-{
- gchar *str;
-
- str = _gedit_tab_get_tooltips (tab);
- g_return_if_fail (str != NULL);
-
- gtk_widget_set_tooltip_markup (tab_label->priv->ebox, str);
- g_free (str);
-}
-
-static void
-sync_name (GeditTab *tab, GParamSpec *pspec, GeditTabLabel *tab_label)
-{
- gchar *str;
-
- g_return_if_fail (tab == tab_label->priv->tab);
-
- str = _gedit_tab_get_name (tab);
- g_return_if_fail (str != NULL);
-
- gtk_label_set_text (GTK_LABEL (tab_label->priv->label), str);
- g_free (str);
-
- sync_tip (tab, tab_label);
-}
-
-static void
-sync_state (GeditTab *tab, GParamSpec *pspec, GeditTabLabel *tab_label)
-{
- GeditTabState state;
-
- g_return_if_fail (tab == tab_label->priv->tab);
-
- state = gedit_tab_get_state (tab);
-
- gtk_widget_set_sensitive (tab_label->priv->close_button,
- tab_label->priv->close_button_sensitive &&
- (state != GEDIT_TAB_STATE_CLOSING) &&
- (state != GEDIT_TAB_STATE_SAVING) &&
- (state != GEDIT_TAB_STATE_SHOWING_PRINT_PREVIEW) &&
- (state != GEDIT_TAB_STATE_SAVING_ERROR));
-
- if ((state == GEDIT_TAB_STATE_LOADING) ||
- (state == GEDIT_TAB_STATE_SAVING) ||
- (state == GEDIT_TAB_STATE_REVERTING))
- {
- gtk_widget_hide (tab_label->priv->icon);
-
- gtk_widget_show (tab_label->priv->spinner);
-#ifdef BUILD_SPINNER
- gedit_spinner_start (GEDIT_SPINNER (tab_label->priv->spinner));
-#else
- gtk_spinner_start (GTK_SPINNER (tab_label->priv->spinner));
-#endif
- }
- else
- {
- GdkPixbuf *pixbuf;
-
- pixbuf = _gedit_tab_get_icon (tab);
- gtk_image_set_from_pixbuf (GTK_IMAGE (tab_label->priv->icon), pixbuf);
-
- if (pixbuf != NULL)
- g_object_unref (pixbuf);
-
- gtk_widget_show (tab_label->priv->icon);
-
- gtk_widget_hide (tab_label->priv->spinner);
-#ifdef BUILD_SPINNER
- gedit_spinner_stop (GEDIT_SPINNER (tab_label->priv->spinner));
-#else
- gtk_spinner_stop (GTK_SPINNER (tab_label->priv->spinner));
-#endif
- }
-
- /* sync tip since encoding is known only after load/save end */
- sync_tip (tab, tab_label);
-}
-
-static void
-gedit_tab_label_constructed (GObject *object)
-{
- GeditTabLabel *tab_label = GEDIT_TAB_LABEL (object);
-
- if (!tab_label->priv->tab)
- {
- g_critical ("The tab label was not properly constructed");
- return;
- }
-
- sync_name (tab_label->priv->tab, NULL, tab_label);
- sync_state (tab_label->priv->tab, NULL, tab_label);
-
- g_signal_connect_object (tab_label->priv->tab,
- "notify::name",
- G_CALLBACK (sync_name),
- tab_label,
- 0);
-
- g_signal_connect_object (tab_label->priv->tab,
- "notify::state",
- G_CALLBACK (sync_state),
- tab_label,
- 0);
-}
-
-static void
-gedit_tab_label_class_init (GeditTabLabelClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->finalize = gedit_tab_label_finalize;
- object_class->set_property = gedit_tab_label_set_property;
- object_class->get_property = gedit_tab_label_get_property;
- object_class->constructed = gedit_tab_label_constructed;
-
- signals[CLOSE_CLICKED] =
- g_signal_new ("close-clicked",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GeditTabLabelClass, close_clicked),
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE,
- 0);
-
- g_object_class_install_property (object_class,
- PROP_TAB,
- g_param_spec_object ("tab",
- "Tab",
- "The GeditTab",
- GEDIT_TYPE_TAB,
- G_PARAM_READWRITE |
- G_PARAM_CONSTRUCT_ONLY));
-
- g_type_class_add_private (object_class, sizeof(GeditTabLabelPrivate));
-}
-
-static void
-gedit_tab_label_init (GeditTabLabel *tab_label)
-{
- GtkWidget *ebox;
- GtkWidget *hbox;
- GtkWidget *close_button;
- GtkWidget *spinner;
- GtkWidget *icon;
- GtkWidget *label;
- GtkWidget *dummy_label;
-
- tab_label->priv = GEDIT_TAB_LABEL_GET_PRIVATE (tab_label);
-
- tab_label->priv->close_button_sensitive = TRUE;
-
- ebox = gtk_event_box_new ();
- gtk_event_box_set_visible_window (GTK_EVENT_BOX (ebox), FALSE);
- gtk_box_pack_start (GTK_BOX (tab_label), ebox, TRUE, TRUE, 0);
- tab_label->priv->ebox = ebox;
-
- hbox = gtk_hbox_new (FALSE, 4);
- gtk_container_add (GTK_CONTAINER (ebox), hbox);
-
- close_button = gedit_close_button_new ();
- gtk_widget_set_tooltip_text (close_button, _("Close document"));
- gtk_box_pack_start (GTK_BOX (tab_label), close_button, FALSE, FALSE, 0);
- tab_label->priv->close_button = close_button;
-
- g_signal_connect (close_button,
- "clicked",
- G_CALLBACK (close_button_clicked_cb),
- tab_label);
-
-#ifdef BUILD_SPINNER
- spinner = gedit_spinner_new ();
- gedit_spinner_set_size (GEDIT_SPINNER (spinner), GTK_ICON_SIZE_MENU);
-#else
- spinner = gtk_spinner_new ();
-#endif
- gtk_box_pack_start (GTK_BOX (hbox), spinner, FALSE, FALSE, 0);
- tab_label->priv->spinner = spinner;
-
- /* setup icon, empty by default */
- icon = gtk_image_new ();
- gtk_box_pack_start (GTK_BOX (hbox), icon, FALSE, FALSE, 0);
- tab_label->priv->icon = icon;
-
- label = gtk_label_new ("");
- gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
- gtk_misc_set_padding (GTK_MISC (label), 0, 0);
- gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
- tab_label->priv->label = label;
-
- dummy_label = gtk_label_new ("");
- gtk_box_pack_start (GTK_BOX (hbox), dummy_label, TRUE, TRUE, 0);
-
- gtk_widget_show (ebox);
- gtk_widget_show (hbox);
- gtk_widget_show (close_button);
- gtk_widget_show (icon);
- gtk_widget_show (label);
- gtk_widget_show (dummy_label);
-}
-
-void
-gedit_tab_label_set_close_button_sensitive (GeditTabLabel *tab_label,
- gboolean sensitive)
-{
- GeditTabState state;
-
- g_return_if_fail (GEDIT_IS_TAB_LABEL (tab_label));
-
- sensitive = (sensitive != FALSE);
-
- if (sensitive == tab_label->priv->close_button_sensitive)
- return;
-
- tab_label->priv->close_button_sensitive = sensitive;
-
- state = gedit_tab_get_state (tab_label->priv->tab);
-
- gtk_widget_set_sensitive (tab_label->priv->close_button,
- tab_label->priv->close_button_sensitive &&
- (state != GEDIT_TAB_STATE_CLOSING) &&
- (state != GEDIT_TAB_STATE_SAVING) &&
- (state != GEDIT_TAB_STATE_SHOWING_PRINT_PREVIEW) &&
- (state != GEDIT_TAB_STATE_PRINTING) &&
- (state != GEDIT_TAB_STATE_PRINT_PREVIEWING) &&
- (state != GEDIT_TAB_STATE_SAVING_ERROR));
-}
-
-GeditTab *
-gedit_tab_label_get_tab (GeditTabLabel *tab_label)
-{
- g_return_val_if_fail (GEDIT_IS_TAB_LABEL (tab_label), NULL);
-
- return tab_label->priv->tab;
-}
-
-GtkWidget *
-gedit_tab_label_new (GeditTab *tab)
-{
- GeditTabLabel *tab_label;
-
- tab_label = g_object_new (GEDIT_TYPE_TAB_LABEL,
- "homogeneous", FALSE,
- "tab", tab,
- NULL);
-
- return GTK_WIDGET (tab_label);
-}
diff --git a/gedit/gedit-tab-label.h b/gedit/gedit-tab-label.h
deleted file mode 100755
index 4b0360ad..00000000
--- a/gedit/gedit-tab-label.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * gedit-tab-label.h
- * This file is part of gedit
- *
- * Copyright (C) 2010 - Paolo Borelli
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#ifndef __GEDIT_TAB_LABEL_H__
-#define __GEDIT_TAB_LABEL_H__
-
-#include <gtk/gtk.h>
-#include <gedit/gedit-tab.h>
-
-G_BEGIN_DECLS
-
-#define GEDIT_TYPE_TAB_LABEL (gedit_tab_label_get_type ())
-#define GEDIT_TAB_LABEL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEDIT_TYPE_TAB_LABEL, GeditTabLabel))
-#define GEDIT_TAB_LABEL_CONST(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GEDIT_TYPE_TAB_LABEL, GeditTabLabel const))
-#define GEDIT_TAB_LABEL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GEDIT_TYPE_TAB_LABEL, GeditTabLabelClass))
-#define GEDIT_IS_TAB_LABEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GEDIT_TYPE_TAB_LABEL))
-#define GEDIT_IS_TAB_LABEL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEDIT_TYPE_TAB_LABEL))
-#define GEDIT_TAB_LABEL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GEDIT_TYPE_TAB_LABEL, GeditTabLabelClass))
-
-typedef struct _GeditTabLabel GeditTabLabel;
-typedef struct _GeditTabLabelClass GeditTabLabelClass;
-typedef struct _GeditTabLabelPrivate GeditTabLabelPrivate;
-
-struct _GeditTabLabel {
- GtkHBox parent;
-
- GeditTabLabelPrivate *priv;
-};
-
-struct _GeditTabLabelClass {
- GtkHBoxClass parent_class;
-
- void (* close_clicked) (GeditTabLabel *tab_label);
-};
-
-GType gedit_tab_label_get_type (void) G_GNUC_CONST;
-
-GtkWidget *gedit_tab_label_new (GeditTab *tab);
-
-GeditTab *gedit_tab_label_get_tab (GeditTabLabel *tab_label);
-
-void gedit_tab_label_set_close_button_sensitive (GeditTabLabel *tab_label,
- gboolean sensitive);
-
-G_END_DECLS
-
-#endif /* __GEDIT_TAB_LABEL_H__ */
diff --git a/gedit/gedit-tab.c b/gedit/gedit-tab.c
deleted file mode 100755
index 9f26c692..00000000
--- a/gedit/gedit-tab.c
+++ /dev/null
@@ -1,2832 +0,0 @@
-/*
- * gedit-tab.c
- * This file is part of gedit
- *
- * Copyright (C) 2005 - Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <glib/gi18n.h>
-#include <gio/gio.h>
-
-#include "gedit-app.h"
-#include "gedit-notebook.h"
-#include "gedit-tab.h"
-#include "gedit-utils.h"
-#include "gedit-io-error-message-area.h"
-#include "gedit-print-job.h"
-#include "gedit-print-preview.h"
-#include "gedit-progress-message-area.h"
-#include "gedit-debug.h"
-#include "gedit-prefs-manager-app.h"
-#include "gedit-enum-types.h"
-
-#if !GTK_CHECK_VERSION (2, 17, 1)
-#include "gedit-message-area.h"
-#endif
-
-#define GEDIT_TAB_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), GEDIT_TYPE_TAB, GeditTabPrivate))
-
-#define GEDIT_TAB_KEY "GEDIT_TAB_KEY"
-
-struct _GeditTabPrivate
-{
- GeditTabState state;
-
- GtkWidget *view;
- GtkWidget *view_scrolled_window;
-
- GtkWidget *message_area;
- GtkWidget *print_preview;
-
- GeditPrintJob *print_job;
-
- /* tmp data for saving */
- gchar *tmp_save_uri;
-
- /* tmp data for loading */
- gint tmp_line_pos;
- const GeditEncoding *tmp_encoding;
-
- GTimer *timer;
- guint times_called;
-
- GeditDocumentSaveFlags save_flags;
-
- gint auto_save_interval;
- guint auto_save_timeout;
-
- gint not_editable : 1;
- gint auto_save : 1;
-
- gint ask_if_externally_modified : 1;
-};
-
-G_DEFINE_TYPE(GeditTab, gedit_tab, GTK_TYPE_VBOX)
-
-enum
-{
- PROP_0,
- PROP_NAME,
- PROP_STATE,
- PROP_AUTO_SAVE,
- PROP_AUTO_SAVE_INTERVAL
-};
-
-static gboolean gedit_tab_auto_save (GeditTab *tab);
-
-static void
-install_auto_save_timeout (GeditTab *tab)
-{
- gint timeout;
-
- gedit_debug (DEBUG_TAB);
-
- g_return_if_fail (tab->priv->auto_save_timeout <= 0);
- g_return_if_fail (tab->priv->auto_save);
- g_return_if_fail (tab->priv->auto_save_interval > 0);
-
- g_return_if_fail (tab->priv->state != GEDIT_TAB_STATE_LOADING);
- g_return_if_fail (tab->priv->state != GEDIT_TAB_STATE_SAVING);
- g_return_if_fail (tab->priv->state != GEDIT_TAB_STATE_REVERTING);
- g_return_if_fail (tab->priv->state != GEDIT_TAB_STATE_LOADING_ERROR);
- g_return_if_fail (tab->priv->state != GEDIT_TAB_STATE_SAVING_ERROR);
- g_return_if_fail (tab->priv->state != GEDIT_TAB_STATE_SAVING_ERROR);
- g_return_if_fail (tab->priv->state != GEDIT_TAB_STATE_REVERTING_ERROR);
-
- /* Add a new timeout */
- timeout = g_timeout_add_seconds (tab->priv->auto_save_interval * 60,
- (GSourceFunc) gedit_tab_auto_save,
- tab);
-
- tab->priv->auto_save_timeout = timeout;
-}
-
-static gboolean
-install_auto_save_timeout_if_needed (GeditTab *tab)
-{
- GeditDocument *doc;
-
- gedit_debug (DEBUG_TAB);
-
- g_return_val_if_fail (tab->priv->auto_save_timeout <= 0, FALSE);
- g_return_val_if_fail ((tab->priv->state == GEDIT_TAB_STATE_NORMAL) ||
- (tab->priv->state == GEDIT_TAB_STATE_SHOWING_PRINT_PREVIEW) ||
- (tab->priv->state == GEDIT_TAB_STATE_CLOSING), FALSE);
-
- if (tab->priv->state == GEDIT_TAB_STATE_CLOSING)
- return FALSE;
-
- doc = gedit_tab_get_document (tab);
-
- if (tab->priv->auto_save &&
- !gedit_document_is_untitled (doc) &&
- !gedit_document_get_readonly (doc))
- {
- install_auto_save_timeout (tab);
-
- return TRUE;
- }
-
- return FALSE;
-}
-
-static void
-remove_auto_save_timeout (GeditTab *tab)
-{
- gedit_debug (DEBUG_TAB);
-
- /* FIXME: check sugli stati */
-
- g_return_if_fail (tab->priv->auto_save_timeout > 0);
-
- g_source_remove (tab->priv->auto_save_timeout);
- tab->priv->auto_save_timeout = 0;
-}
-
-static void
-gedit_tab_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- GeditTab *tab = GEDIT_TAB (object);
-
- switch (prop_id)
- {
- case PROP_NAME:
- g_value_take_string (value,
- _gedit_tab_get_name (tab));
- break;
- case PROP_STATE:
- g_value_set_enum (value,
- gedit_tab_get_state (tab));
- break;
- case PROP_AUTO_SAVE:
- g_value_set_boolean (value,
- gedit_tab_get_auto_save_enabled (tab));
- break;
- case PROP_AUTO_SAVE_INTERVAL:
- g_value_set_int (value,
- gedit_tab_get_auto_save_interval (tab));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gedit_tab_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- GeditTab *tab = GEDIT_TAB (object);
-
- switch (prop_id)
- {
- case PROP_AUTO_SAVE:
- gedit_tab_set_auto_save_enabled (tab,
- g_value_get_boolean (value));
- break;
- case PROP_AUTO_SAVE_INTERVAL:
- gedit_tab_set_auto_save_interval (tab,
- g_value_get_int (value));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gedit_tab_finalize (GObject *object)
-{
- GeditTab *tab = GEDIT_TAB (object);
-
- if (tab->priv->timer != NULL)
- g_timer_destroy (tab->priv->timer);
-
- g_free (tab->priv->tmp_save_uri);
-
- if (tab->priv->auto_save_timeout > 0)
- remove_auto_save_timeout (tab);
-
- G_OBJECT_CLASS (gedit_tab_parent_class)->finalize (object);
-}
-
-static void
-gedit_tab_class_init (GeditTabClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->finalize = gedit_tab_finalize;
- object_class->get_property = gedit_tab_get_property;
- object_class->set_property = gedit_tab_set_property;
-
- g_object_class_install_property (object_class,
- PROP_NAME,
- g_param_spec_string ("name",
- "Name",
- "The tab's name",
- NULL,
- G_PARAM_READABLE |
- G_PARAM_STATIC_STRINGS));
-
- g_object_class_install_property (object_class,
- PROP_STATE,
- g_param_spec_enum ("state",
- "State",
- "The tab's state",
- GEDIT_TYPE_TAB_STATE,
- GEDIT_TAB_STATE_NORMAL,
- G_PARAM_READABLE |
- G_PARAM_STATIC_STRINGS));
-
- g_object_class_install_property (object_class,
- PROP_AUTO_SAVE,
- g_param_spec_boolean ("autosave",
- "Autosave",
- "Autosave feature",
- TRUE,
- G_PARAM_READWRITE |
- G_PARAM_STATIC_STRINGS));
-
- g_object_class_install_property (object_class,
- PROP_AUTO_SAVE_INTERVAL,
- g_param_spec_int ("autosave-interval",
- "AutosaveInterval",
- "Time between two autosaves",
- 0,
- G_MAXINT,
- 0,
- G_PARAM_READWRITE |
- G_PARAM_STATIC_STRINGS));
-
- g_type_class_add_private (object_class, sizeof (GeditTabPrivate));
-}
-
-/**
- * gedit_tab_get_state:
- * @tab: a #GeditTab
- *
- * Gets the #GeditTabState of @tab.
- *
- * Returns: the #GeditTabState of @tab
- */
-GeditTabState
-gedit_tab_get_state (GeditTab *tab)
-{
- g_return_val_if_fail (GEDIT_IS_TAB (tab), GEDIT_TAB_STATE_NORMAL);
-
- return tab->priv->state;
-}
-
-static void
-set_cursor_according_to_state (GtkTextView *view,
- GeditTabState state)
-{
- GdkCursor *cursor;
- GdkWindow *text_window;
- GdkWindow *left_window;
-
- text_window = gtk_text_view_get_window (view, GTK_TEXT_WINDOW_TEXT);
- left_window = gtk_text_view_get_window (view, GTK_TEXT_WINDOW_LEFT);
-
- if ((state == GEDIT_TAB_STATE_LOADING) ||
- (state == GEDIT_TAB_STATE_REVERTING) ||
- (state == GEDIT_TAB_STATE_SAVING) ||
- (state == GEDIT_TAB_STATE_PRINTING) ||
- (state == GEDIT_TAB_STATE_PRINT_PREVIEWING) ||
- (state == GEDIT_TAB_STATE_CLOSING))
- {
- cursor = gdk_cursor_new_for_display (
- gtk_widget_get_display (GTK_WIDGET (view)),
- GDK_WATCH);
-
- if (text_window != NULL)
- gdk_window_set_cursor (text_window, cursor);
- if (left_window != NULL)
- gdk_window_set_cursor (left_window, cursor);
-
- gdk_cursor_unref (cursor);
- }
- else
- {
- cursor = gdk_cursor_new_for_display (
- gtk_widget_get_display (GTK_WIDGET (view)),
- GDK_XTERM);
-
- if (text_window != NULL)
- gdk_window_set_cursor (text_window, cursor);
- if (left_window != NULL)
- gdk_window_set_cursor (left_window, NULL);
-
- gdk_cursor_unref (cursor);
- }
-}
-
-static void
-view_realized (GtkTextView *view,
- GeditTab *tab)
-{
- set_cursor_according_to_state (view, tab->priv->state);
-}
-
-static void
-set_view_properties_according_to_state (GeditTab *tab,
- GeditTabState state)
-{
- gboolean val;
-
- val = ((state == GEDIT_TAB_STATE_NORMAL) &&
- (tab->priv->print_preview == NULL) &&
- !tab->priv->not_editable);
- gtk_text_view_set_editable (GTK_TEXT_VIEW (tab->priv->view), val);
-
- val = ((state != GEDIT_TAB_STATE_LOADING) &&
- (state != GEDIT_TAB_STATE_CLOSING));
- gtk_text_view_set_cursor_visible (GTK_TEXT_VIEW (tab->priv->view), val);
-
- val = ((state != GEDIT_TAB_STATE_LOADING) &&
- (state != GEDIT_TAB_STATE_CLOSING) &&
- (gedit_prefs_manager_get_highlight_current_line ()));
- gtk_source_view_set_highlight_current_line (GTK_SOURCE_VIEW (tab->priv->view), val);
-}
-
-static void
-gedit_tab_set_state (GeditTab *tab,
- GeditTabState state)
-{
- g_return_if_fail (GEDIT_IS_TAB (tab));
- g_return_if_fail ((state >= 0) && (state < GEDIT_TAB_NUM_OF_STATES));
-
- if (tab->priv->state == state)
- return;
-
- tab->priv->state = state;
-
- set_view_properties_according_to_state (tab, state);
-
- if ((state == GEDIT_TAB_STATE_LOADING_ERROR) || /* FIXME: add other states if needed */
- (state == GEDIT_TAB_STATE_SHOWING_PRINT_PREVIEW))
- {
- gtk_widget_hide (tab->priv->view_scrolled_window);
- }
- else
- {
- if (tab->priv->print_preview == NULL)
- gtk_widget_show (tab->priv->view_scrolled_window);
- }
-
- set_cursor_according_to_state (GTK_TEXT_VIEW (tab->priv->view),
- state);
-
- g_object_notify (G_OBJECT (tab), "state");
-}
-
-static void
-document_uri_notify_handler (GeditDocument *document,
- GParamSpec *pspec,
- GeditTab *tab)
-{
- gedit_debug (DEBUG_TAB);
-
- /* Notify the change in the URI */
- g_object_notify (G_OBJECT (tab), "name");
-}
-
-static void
-document_shortname_notify_handler (GeditDocument *document,
- GParamSpec *pspec,
- GeditTab *tab)
-{
- gedit_debug (DEBUG_TAB);
-
- /* Notify the change in the shortname */
- g_object_notify (G_OBJECT (tab), "name");
-}
-
-static void
-document_modified_changed (GtkTextBuffer *document,
- GeditTab *tab)
-{
- g_object_notify (G_OBJECT (tab), "name");
-}
-
-static void
-set_message_area (GeditTab *tab,
- GtkWidget *message_area)
-{
- if (tab->priv->message_area == message_area)
- return;
-
- if (tab->priv->message_area != NULL)
- gtk_widget_destroy (tab->priv->message_area);
-
- tab->priv->message_area = message_area;
-
- if (message_area == NULL)
- return;
-
- gtk_box_pack_start (GTK_BOX (tab),
- tab->priv->message_area,
- FALSE,
- FALSE,
- 0);
-
- g_object_add_weak_pointer (G_OBJECT (tab->priv->message_area),
- (gpointer *)&tab->priv->message_area);
-}
-
-static void
-remove_tab (GeditTab *tab)
-{
- GeditNotebook *notebook;
-
- notebook = GEDIT_NOTEBOOK (gtk_widget_get_parent (GTK_WIDGET (tab)));
-
- gedit_notebook_remove_tab (notebook, tab);
-}
-
-static void
-io_loading_error_message_area_response (GtkWidget *message_area,
- gint response_id,
- GeditTab *tab)
-{
- GeditDocument *doc;
- GeditView *view;
- gchar *uri;
- const GeditEncoding *encoding;
-
- doc = gedit_tab_get_document (tab);
- g_return_if_fail (GEDIT_IS_DOCUMENT (doc));
-
- view = gedit_tab_get_view (tab);
- g_return_if_fail (GEDIT_IS_VIEW (view));
-
- uri = gedit_document_get_uri (doc);
- g_return_if_fail (uri != NULL);
-
- switch (response_id)
- {
- case GTK_RESPONSE_OK:
- encoding = gedit_conversion_error_message_area_get_encoding (
- GTK_WIDGET (message_area));
-
- if (encoding != NULL)
- {
- tab->priv->tmp_encoding = encoding;
- }
-
- set_message_area (tab, NULL);
- gedit_tab_set_state (tab, GEDIT_TAB_STATE_LOADING);
-
- g_return_if_fail (tab->priv->auto_save_timeout <= 0);
-
- gedit_document_load (doc,
- uri,
- tab->priv->tmp_encoding,
- tab->priv->tmp_line_pos,
- FALSE);
- break;
- case GTK_RESPONSE_YES:
- /* This means that we want to edit the document anyway */
- set_message_area (tab, NULL);
- _gedit_document_set_readonly (doc, FALSE);
- break;
- case GTK_RESPONSE_NO:
- /* We don't want to edit the document just show it */
- set_message_area (tab, NULL);
- break;
- default:
- _gedit_recent_remove (GEDIT_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (tab))), uri);
-
- remove_tab (tab);
- break;
- }
-
- g_free (uri);
-}
-
-static void
-file_already_open_warning_message_area_response (GtkWidget *message_area,
- gint response_id,
- GeditTab *tab)
-{
- GeditView *view;
-
- view = gedit_tab_get_view (tab);
-
- if (response_id == GTK_RESPONSE_YES)
- {
- tab->priv->not_editable = FALSE;
-
- gtk_text_view_set_editable (GTK_TEXT_VIEW (view),
- TRUE);
- }
-
- gtk_widget_destroy (message_area);
-
- gtk_widget_grab_focus (GTK_WIDGET (view));
-}
-
-static void
-load_cancelled (GtkWidget *area,
- gint response_id,
- GeditTab *tab)
-{
- g_return_if_fail (GEDIT_IS_PROGRESS_MESSAGE_AREA (tab->priv->message_area));
-
- g_object_ref (tab);
- gedit_document_load_cancel (gedit_tab_get_document (tab));
- g_object_unref (tab);
-}
-
-static void
-unrecoverable_reverting_error_message_area_response (GtkWidget *message_area,
- gint response_id,
- GeditTab *tab)
-{
- GeditView *view;
-
- gedit_tab_set_state (tab,
- GEDIT_TAB_STATE_NORMAL);
-
- set_message_area (tab, NULL);
-
- view = gedit_tab_get_view (tab);
-
- gtk_widget_grab_focus (GTK_WIDGET (view));
-
- install_auto_save_timeout_if_needed (tab);
-}
-
-#define MAX_MSG_LENGTH 100
-
-static void
-show_loading_message_area (GeditTab *tab)
-{
- GtkWidget *area;
- GeditDocument *doc = NULL;
- gchar *name;
- gchar *dirname = NULL;
- gchar *msg = NULL;
- gchar *name_markup;
- gchar *dirname_markup;
- gint len;
-
- if (tab->priv->message_area != NULL)
- return;
-
- gedit_debug (DEBUG_TAB);
-
- doc = gedit_tab_get_document (tab);
- g_return_if_fail (doc != NULL);
-
- name = gedit_document_get_short_name_for_display (doc);
- len = g_utf8_strlen (name, -1);
-
- /* if the name is awfully long, truncate it and be done with it,
- * otherwise also show the directory (ellipsized if needed)
- */
- if (len > MAX_MSG_LENGTH)
- {
- gchar *str;
-
- str = gedit_utils_str_middle_truncate (name, MAX_MSG_LENGTH);
- g_free (name);
- name = str;
- }
- else
- {
- GFile *file;
-
- file = gedit_document_get_location (doc);
- if (file != NULL)
- {
- gchar *str;
-
- str = gedit_utils_location_get_dirname_for_display (file);
- g_object_unref (file);
-
- /* use the remaining space for the dir, but use a min of 20 chars
- * so that we do not end up with a dirname like "(a...b)".
- * This means that in the worst case when the filename is long 99
- * we have a title long 99 + 20, but I think it's a rare enough
- * case to be acceptable. It's justa darn title afterall :)
- */
- dirname = gedit_utils_str_middle_truncate (str,
- MAX (20, MAX_MSG_LENGTH - len));
- g_free (str);
- }
- }
-
- name_markup = g_markup_printf_escaped ("<b>%s</b>", name);
-
- if (tab->priv->state == GEDIT_TAB_STATE_REVERTING)
- {
- if (dirname != NULL)
- {
- dirname_markup = g_markup_printf_escaped ("<b>%s</b>", dirname);
-
- /* Translators: the first %s is a file name (e.g. test.txt) the second one
- is a directory (e.g. ssh://master.mate.org/home/users/paolo) */
- msg = g_strdup_printf (_("Reverting %s from %s"),
- name_markup,
- dirname_markup);
- g_free (dirname_markup);
- }
- else
- {
- msg = g_strdup_printf (_("Reverting %s"),
- name_markup);
- }
-
- area = gedit_progress_message_area_new (GTK_STOCK_REVERT_TO_SAVED,
- msg,
- TRUE);
- }
- else
- {
- if (dirname != NULL)
- {
- dirname_markup = g_markup_printf_escaped ("<b>%s</b>", dirname);
-
- /* Translators: the first %s is a file name (e.g. test.txt) the second one
- is a directory (e.g. ssh://master.mate.org/home/users/paolo) */
- msg = g_strdup_printf (_("Loading %s from %s"),
- name_markup,
- dirname_markup);
- g_free (dirname_markup);
- }
- else
- {
- msg = g_strdup_printf (_("Loading %s"),
- name_markup);
- }
-
- area = gedit_progress_message_area_new (GTK_STOCK_OPEN,
- msg,
- TRUE);
- }
-
- g_signal_connect (area,
- "response",
- G_CALLBACK (load_cancelled),
- tab);
-
- gtk_widget_show (area);
-
- set_message_area (tab, area);
-
- g_free (msg);
- g_free (name);
- g_free (name_markup);
- g_free (dirname);
-}
-
-static void
-show_saving_message_area (GeditTab *tab)
-{
- GtkWidget *area;
- GeditDocument *doc = NULL;
- gchar *short_name;
- gchar *from;
- gchar *to = NULL;
- gchar *from_markup;
- gchar *to_markup;
- gchar *msg = NULL;
- gint len;
-
- g_return_if_fail (tab->priv->tmp_save_uri != NULL);
-
- if (tab->priv->message_area != NULL)
- return;
-
- gedit_debug (DEBUG_TAB);
-
- doc = gedit_tab_get_document (tab);
- g_return_if_fail (doc != NULL);
-
- short_name = gedit_document_get_short_name_for_display (doc);
-
- len = g_utf8_strlen (short_name, -1);
-
- /* if the name is awfully long, truncate it and be done with it,
- * otherwise also show the directory (ellipsized if needed)
- */
- if (len > MAX_MSG_LENGTH)
- {
- from = gedit_utils_str_middle_truncate (short_name,
- MAX_MSG_LENGTH);
- g_free (short_name);
- }
- else
- {
- gchar *str;
-
- from = short_name;
-
- to = gedit_utils_uri_for_display (tab->priv->tmp_save_uri);
-
- str = gedit_utils_str_middle_truncate (to,
- MAX (20, MAX_MSG_LENGTH - len));
- g_free (to);
-
- to = str;
- }
-
- from_markup = g_markup_printf_escaped ("<b>%s</b>", from);
-
- if (to != NULL)
- {
- to_markup = g_markup_printf_escaped ("<b>%s</b>", to);
-
- /* Translators: the first %s is a file name (e.g. test.txt) the second one
- is a directory (e.g. ssh://master.mate.org/home/users/paolo) */
- msg = g_strdup_printf (_("Saving %s to %s"),
- from_markup,
- to_markup);
- g_free (to_markup);
- }
- else
- {
- msg = g_strdup_printf (_("Saving %s"), from_markup);
- }
-
- area = gedit_progress_message_area_new (GTK_STOCK_SAVE,
- msg,
- FALSE);
-
- gtk_widget_show (area);
-
- set_message_area (tab, area);
-
- g_free (msg);
- g_free (to);
- g_free (from);
- g_free (from_markup);
-}
-
-static void
-message_area_set_progress (GeditTab *tab,
- goffset size,
- goffset total_size)
-{
- if (tab->priv->message_area == NULL)
- return;
-
- gedit_debug_message (DEBUG_TAB, "%" G_GUINT64_FORMAT "/%" G_GUINT64_FORMAT, size, total_size);
-
- g_return_if_fail (GEDIT_IS_PROGRESS_MESSAGE_AREA (tab->priv->message_area));
-
- if (total_size == 0)
- {
- if (size != 0)
- gedit_progress_message_area_pulse (
- GEDIT_PROGRESS_MESSAGE_AREA (tab->priv->message_area));
- else
- gedit_progress_message_area_set_fraction (
- GEDIT_PROGRESS_MESSAGE_AREA (tab->priv->message_area),
- 0);
- }
- else
- {
- gdouble frac;
-
- frac = (gdouble)size / (gdouble)total_size;
-
- gedit_progress_message_area_set_fraction (
- GEDIT_PROGRESS_MESSAGE_AREA (tab->priv->message_area),
- frac);
- }
-}
-
-static void
-document_loading (GeditDocument *document,
- goffset size,
- goffset total_size,
- GeditTab *tab)
-{
- gdouble et;
- gdouble total_time;
-
- g_return_if_fail ((tab->priv->state == GEDIT_TAB_STATE_LOADING) ||
- (tab->priv->state == GEDIT_TAB_STATE_REVERTING));
-
- gedit_debug_message (DEBUG_TAB, "%" G_GUINT64_FORMAT "/%" G_GUINT64_FORMAT, size, total_size);
-
- if (tab->priv->timer == NULL)
- {
- g_return_if_fail (tab->priv->times_called == 0);
- tab->priv->timer = g_timer_new ();
- }
-
- et = g_timer_elapsed (tab->priv->timer, NULL);
-
- /* et : total_time = size : total_size */
- total_time = (et * total_size) / size;
-
- if ((total_time - et) > 3.0)
- {
- show_loading_message_area (tab);
- }
-
- message_area_set_progress (tab, size, total_size);
-}
-
-static gboolean
-remove_tab_idle (GeditTab *tab)
-{
- remove_tab (tab);
-
- return FALSE;
-}
-
-static void
-document_loaded (GeditDocument *document,
- const GError *error,
- GeditTab *tab)
-{
- GtkWidget *emsg;
- GFile *location;
- gchar *uri;
- const GeditEncoding *encoding;
-
- g_return_if_fail ((tab->priv->state == GEDIT_TAB_STATE_LOADING) ||
- (tab->priv->state == GEDIT_TAB_STATE_REVERTING));
- g_return_if_fail (tab->priv->auto_save_timeout <= 0);
-
- if (tab->priv->timer != NULL)
- {
- g_timer_destroy (tab->priv->timer);
- tab->priv->timer = NULL;
- }
- tab->priv->times_called = 0;
-
- set_message_area (tab, NULL);
-
- location = gedit_document_get_location (document);
- uri = gedit_document_get_uri (document);
-
- /* if the error is CONVERSION FALLBACK don't treat it as a normal error */
- if (error != NULL &&
- (error->domain != GEDIT_DOCUMENT_ERROR || error->code != GEDIT_DOCUMENT_ERROR_CONVERSION_FALLBACK))
- {
- if (tab->priv->state == GEDIT_TAB_STATE_LOADING)
- gedit_tab_set_state (tab, GEDIT_TAB_STATE_LOADING_ERROR);
- else
- gedit_tab_set_state (tab, GEDIT_TAB_STATE_REVERTING_ERROR);
-
- encoding = gedit_document_get_encoding (document);
-
- if (error->domain == G_IO_ERROR &&
- error->code == G_IO_ERROR_CANCELLED)
- {
- /* remove the tab, but in an idle handler, since
- * we are in the handler of doc loaded and we
- * don't want doc and tab to be finalized now.
- */
- g_idle_add ((GSourceFunc) remove_tab_idle, tab);
-
- goto end;
- }
- else
- {
- _gedit_recent_remove (GEDIT_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (tab))), uri);
-
- if (tab->priv->state == GEDIT_TAB_STATE_LOADING_ERROR)
- {
- emsg = gedit_io_loading_error_message_area_new (uri,
- tab->priv->tmp_encoding,
- error);
- g_signal_connect (emsg,
- "response",
- G_CALLBACK (io_loading_error_message_area_response),
- tab);
- }
- else
- {
- g_return_if_fail (tab->priv->state == GEDIT_TAB_STATE_REVERTING_ERROR);
-
- emsg = gedit_unrecoverable_reverting_error_message_area_new (uri,
- error);
-
- g_signal_connect (emsg,
- "response",
- G_CALLBACK (unrecoverable_reverting_error_message_area_response),
- tab);
- }
-
- set_message_area (tab, emsg);
- }
-
-#if !GTK_CHECK_VERSION (2, 17, 1)
- gedit_message_area_set_default_response (GEDIT_MESSAGE_AREA (emsg),
- GTK_RESPONSE_CANCEL);
-#else
- gtk_info_bar_set_default_response (GTK_INFO_BAR (emsg),
- GTK_RESPONSE_CANCEL);
-#endif
-
- gtk_widget_show (emsg);
-
- g_object_unref (location);
- g_free (uri);
-
- return;
- }
- else
- {
- gchar *mime;
- GList *all_documents;
- GList *l;
-
- g_return_if_fail (uri != NULL);
-
- mime = gedit_document_get_mime_type (document);
- _gedit_recent_add (GEDIT_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (tab))),
- uri,
- mime);
- g_free (mime);
-
- if (error &&
- error->domain == GEDIT_DOCUMENT_ERROR &&
- error->code == GEDIT_DOCUMENT_ERROR_CONVERSION_FALLBACK)
- {
- GtkWidget *emsg;
-
- _gedit_document_set_readonly (document, TRUE);
-
- emsg = gedit_io_loading_error_message_area_new (uri,
- tab->priv->tmp_encoding,
- error);
-
- set_message_area (tab, emsg);
-
- g_signal_connect (emsg,
- "response",
- G_CALLBACK (io_loading_error_message_area_response),
- tab);
-
-#if !GTK_CHECK_VERSION (2, 17, 1)
- gedit_message_area_set_default_response (GEDIT_MESSAGE_AREA (emsg),
- GTK_RESPONSE_CANCEL);
-#else
- gtk_info_bar_set_default_response (GTK_INFO_BAR (emsg),
- GTK_RESPONSE_CANCEL);
-#endif
-
- gtk_widget_show (emsg);
- }
-
- /* Scroll to the cursor when the document is loaded */
- gedit_view_scroll_to_cursor (GEDIT_VIEW (tab->priv->view));
-
- all_documents = gedit_app_get_documents (gedit_app_get_default ());
-
- for (l = all_documents; l != NULL; l = g_list_next (l))
- {
- GeditDocument *d = GEDIT_DOCUMENT (l->data);
-
- if (d != document)
- {
- GFile *loc;
-
- loc = gedit_document_get_location (d);
-
- if ((loc != NULL) &&
- g_file_equal (location, loc))
- {
- GtkWidget *w;
- GeditView *view;
-
- view = gedit_tab_get_view (tab);
-
- tab->priv->not_editable = TRUE;
-
- w = gedit_file_already_open_warning_message_area_new (uri);
-
- set_message_area (tab, w);
-
-#if !GTK_CHECK_VERSION (2, 17, 1)
- gedit_message_area_set_default_response (GEDIT_MESSAGE_AREA (w),
- GTK_RESPONSE_CANCEL);
-#else
- gtk_info_bar_set_default_response (GTK_INFO_BAR (w),
- GTK_RESPONSE_CANCEL);
-#endif
-
- gtk_widget_show (w);
-
- g_signal_connect (w,
- "response",
- G_CALLBACK (file_already_open_warning_message_area_response),
- tab);
-
- g_object_unref (loc);
- break;
- }
-
- if (loc != NULL)
- g_object_unref (loc);
- }
- }
-
- g_list_free (all_documents);
-
- gedit_tab_set_state (tab, GEDIT_TAB_STATE_NORMAL);
-
- install_auto_save_timeout_if_needed (tab);
-
- tab->priv->ask_if_externally_modified = TRUE;
- }
-
- end:
- g_object_unref (location);
- g_free (uri);
-
- tab->priv->tmp_line_pos = 0;
- tab->priv->tmp_encoding = NULL;
-}
-
-static void
-document_saving (GeditDocument *document,
- goffset size,
- goffset total_size,
- GeditTab *tab)
-{
- gdouble et;
- gdouble total_time;
-
- g_return_if_fail (tab->priv->state == GEDIT_TAB_STATE_SAVING);
-
- gedit_debug_message (DEBUG_TAB, "%" G_GUINT64_FORMAT "/%" G_GUINT64_FORMAT, size, total_size);
-
-
- if (tab->priv->timer == NULL)
- {
- g_return_if_fail (tab->priv->times_called == 0);
- tab->priv->timer = g_timer_new ();
- }
-
- et = g_timer_elapsed (tab->priv->timer, NULL);
-
- /* et : total_time = size : total_size */
- total_time = (et * total_size)/size;
-
- if ((total_time - et) > 3.0)
- {
- show_saving_message_area (tab);
- }
-
- message_area_set_progress (tab, size, total_size);
-
- tab->priv->times_called++;
-}
-
-static void
-end_saving (GeditTab *tab)
-{
- /* Reset tmp data for saving */
- g_free (tab->priv->tmp_save_uri);
- tab->priv->tmp_save_uri = NULL;
- tab->priv->tmp_encoding = NULL;
-
- install_auto_save_timeout_if_needed (tab);
-}
-
-static void
-unrecoverable_saving_error_message_area_response (GtkWidget *message_area,
- gint response_id,
- GeditTab *tab)
-{
- GeditView *view;
-
- if (tab->priv->print_preview != NULL)
- gedit_tab_set_state (tab, GEDIT_TAB_STATE_SHOWING_PRINT_PREVIEW);
- else
- gedit_tab_set_state (tab, GEDIT_TAB_STATE_NORMAL);
-
- end_saving (tab);
-
- set_message_area (tab, NULL);
-
- view = gedit_tab_get_view (tab);
-
- gtk_widget_grab_focus (GTK_WIDGET (view));
-}
-
-static void
-no_backup_error_message_area_response (GtkWidget *message_area,
- gint response_id,
- GeditTab *tab)
-{
- if (response_id == GTK_RESPONSE_YES)
- {
- GeditDocument *doc;
-
- doc = gedit_tab_get_document (tab);
- g_return_if_fail (GEDIT_IS_DOCUMENT (doc));
-
- set_message_area (tab, NULL);
-
- g_return_if_fail (tab->priv->tmp_save_uri != NULL);
- g_return_if_fail (tab->priv->tmp_encoding != NULL);
-
- gedit_tab_set_state (tab, GEDIT_TAB_STATE_SAVING);
-
- /* don't bug the user again with this... */
- tab->priv->save_flags |= GEDIT_DOCUMENT_SAVE_IGNORE_BACKUP;
-
- g_return_if_fail (tab->priv->auto_save_timeout <= 0);
-
- /* Force saving */
- gedit_document_save (doc, tab->priv->save_flags);
- }
- else
- {
- unrecoverable_saving_error_message_area_response (message_area,
- response_id,
- tab);
- }
-}
-
-static void
-externally_modified_error_message_area_response (GtkWidget *message_area,
- gint response_id,
- GeditTab *tab)
-{
- if (response_id == GTK_RESPONSE_YES)
- {
- GeditDocument *doc;
-
- doc = gedit_tab_get_document (tab);
- g_return_if_fail (GEDIT_IS_DOCUMENT (doc));
-
- set_message_area (tab, NULL);
-
- g_return_if_fail (tab->priv->tmp_save_uri != NULL);
- g_return_if_fail (tab->priv->tmp_encoding != NULL);
-
- gedit_tab_set_state (tab, GEDIT_TAB_STATE_SAVING);
-
- g_return_if_fail (tab->priv->auto_save_timeout <= 0);
-
- /* ignore mtime should not be persisted in save flags across saves */
-
- /* Force saving */
- gedit_document_save (doc, tab->priv->save_flags | GEDIT_DOCUMENT_SAVE_IGNORE_MTIME);
- }
- else
- {
- unrecoverable_saving_error_message_area_response (message_area,
- response_id,
- tab);
- }
-}
-
-static void
-recoverable_saving_error_message_area_response (GtkWidget *message_area,
- gint response_id,
- GeditTab *tab)
-{
- GeditDocument *doc;
-
- doc = gedit_tab_get_document (tab);
- g_return_if_fail (GEDIT_IS_DOCUMENT (doc));
-
- if (response_id == GTK_RESPONSE_OK)
- {
- const GeditEncoding *encoding;
-
- encoding = gedit_conversion_error_message_area_get_encoding (
- GTK_WIDGET (message_area));
-
- g_return_if_fail (encoding != NULL);
-
- set_message_area (tab, NULL);
-
- g_return_if_fail (tab->priv->tmp_save_uri != NULL);
-
- gedit_tab_set_state (tab, GEDIT_TAB_STATE_SAVING);
-
- tab->priv->tmp_encoding = encoding;
-
- gedit_debug_message (DEBUG_TAB, "Force saving with URI '%s'", tab->priv->tmp_save_uri);
-
- g_return_if_fail (tab->priv->auto_save_timeout <= 0);
-
- gedit_document_save_as (doc,
- tab->priv->tmp_save_uri,
- tab->priv->tmp_encoding,
- tab->priv->save_flags);
- }
- else
- {
- unrecoverable_saving_error_message_area_response (message_area,
- response_id,
- tab);
- }
-}
-
-static void
-document_saved (GeditDocument *document,
- const GError *error,
- GeditTab *tab)
-{
- GtkWidget *emsg;
-
- g_return_if_fail (tab->priv->state == GEDIT_TAB_STATE_SAVING);
-
- g_return_if_fail (tab->priv->tmp_save_uri != NULL);
- g_return_if_fail (tab->priv->tmp_encoding != NULL);
- g_return_if_fail (tab->priv->auto_save_timeout <= 0);
-
- g_timer_destroy (tab->priv->timer);
- tab->priv->timer = NULL;
- tab->priv->times_called = 0;
-
- set_message_area (tab, NULL);
-
- if (error != NULL)
- {
- gedit_tab_set_state (tab, GEDIT_TAB_STATE_SAVING_ERROR);
-
- if (error->domain == GEDIT_DOCUMENT_ERROR &&
- error->code == GEDIT_DOCUMENT_ERROR_EXTERNALLY_MODIFIED)
- {
- /* This error is recoverable */
- emsg = gedit_externally_modified_saving_error_message_area_new (
- tab->priv->tmp_save_uri,
- error);
- g_return_if_fail (emsg != NULL);
-
- set_message_area (tab, emsg);
-
- g_signal_connect (emsg,
- "response",
- G_CALLBACK (externally_modified_error_message_area_response),
- tab);
- }
- else if ((error->domain == GEDIT_DOCUMENT_ERROR &&
- error->code == GEDIT_DOCUMENT_ERROR_CANT_CREATE_BACKUP) ||
- (error->domain == G_IO_ERROR &&
- error->code == G_IO_ERROR_CANT_CREATE_BACKUP))
- {
- /* This error is recoverable */
- emsg = gedit_no_backup_saving_error_message_area_new (
- tab->priv->tmp_save_uri,
- error);
- g_return_if_fail (emsg != NULL);
-
- set_message_area (tab, emsg);
-
- g_signal_connect (emsg,
- "response",
- G_CALLBACK (no_backup_error_message_area_response),
- tab);
- }
- else if (error->domain == GEDIT_DOCUMENT_ERROR ||
- (error->domain == G_IO_ERROR &&
- error->code != G_IO_ERROR_INVALID_DATA &&
- error->code != G_IO_ERROR_PARTIAL_INPUT))
- {
- /* These errors are _NOT_ recoverable */
- _gedit_recent_remove (GEDIT_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (tab))),
- tab->priv->tmp_save_uri);
-
- emsg = gedit_unrecoverable_saving_error_message_area_new (tab->priv->tmp_save_uri,
- error);
- g_return_if_fail (emsg != NULL);
-
- set_message_area (tab, emsg);
-
- g_signal_connect (emsg,
- "response",
- G_CALLBACK (unrecoverable_saving_error_message_area_response),
- tab);
- }
- else
- {
- /* This error is recoverable */
- g_return_if_fail (error->domain == G_CONVERT_ERROR ||
- error->domain == G_IO_ERROR);
-
- emsg = gedit_conversion_error_while_saving_message_area_new (
- tab->priv->tmp_save_uri,
- tab->priv->tmp_encoding,
- error);
-
- set_message_area (tab, emsg);
-
- g_signal_connect (emsg,
- "response",
- G_CALLBACK (recoverable_saving_error_message_area_response),
- tab);
- }
-
-#if !GTK_CHECK_VERSION (2, 17, 1)
- gedit_message_area_set_default_response (GEDIT_MESSAGE_AREA (emsg),
- GTK_RESPONSE_CANCEL);
-#else
- gtk_info_bar_set_default_response (GTK_INFO_BAR (emsg),
- GTK_RESPONSE_CANCEL);
-#endif
-
- gtk_widget_show (emsg);
- }
- else
- {
- gchar *mime = gedit_document_get_mime_type (document);
-
- _gedit_recent_add (GEDIT_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (tab))),
- tab->priv->tmp_save_uri,
- mime);
- g_free (mime);
-
- if (tab->priv->print_preview != NULL)
- gedit_tab_set_state (tab, GEDIT_TAB_STATE_SHOWING_PRINT_PREVIEW);
- else
- gedit_tab_set_state (tab, GEDIT_TAB_STATE_NORMAL);
-
- tab->priv->ask_if_externally_modified = TRUE;
-
- end_saving (tab);
- }
-}
-
-static void
-externally_modified_notification_message_area_response (GtkWidget *message_area,
- gint response_id,
- GeditTab *tab)
-{
- GeditView *view;
-
- set_message_area (tab, NULL);
- view = gedit_tab_get_view (tab);
-
- if (response_id == GTK_RESPONSE_OK)
- {
- _gedit_tab_revert (tab);
- }
- else
- {
- tab->priv->ask_if_externally_modified = FALSE;
-
- /* go back to normal state */
- gedit_tab_set_state (tab, GEDIT_TAB_STATE_NORMAL);
- }
-
- gtk_widget_grab_focus (GTK_WIDGET (view));
-}
-
-static void
-display_externally_modified_notification (GeditTab *tab)
-{
- GtkWidget *message_area;
- GeditDocument *doc;
- gchar *uri;
- gboolean document_modified;
-
- doc = gedit_tab_get_document (tab);
- g_return_if_fail (GEDIT_IS_DOCUMENT (doc));
-
- /* uri cannot be NULL, we're here because
- * the file we're editing changed on disk */
- uri = gedit_document_get_uri (doc);
- g_return_if_fail (uri != NULL);
-
- document_modified = gtk_text_buffer_get_modified (GTK_TEXT_BUFFER(doc));
- message_area = gedit_externally_modified_message_area_new (uri, document_modified);
- g_free (uri);
-
- tab->priv->message_area = NULL;
- set_message_area (tab, message_area);
- gtk_widget_show (message_area);
-
- g_signal_connect (message_area,
- "response",
- G_CALLBACK (externally_modified_notification_message_area_response),
- tab);
-}
-
-static gboolean
-view_focused_in (GtkWidget *widget,
- GdkEventFocus *event,
- GeditTab *tab)
-{
- GeditDocument *doc;
-
- g_return_val_if_fail (GEDIT_IS_TAB (tab), FALSE);
-
- /* we try to detect file changes only in the normal state */
- if (tab->priv->state != GEDIT_TAB_STATE_NORMAL)
- {
- return FALSE;
- }
-
- /* we already asked, don't bug the user again */
- if (!tab->priv->ask_if_externally_modified)
- {
- return FALSE;
- }
-
- doc = gedit_tab_get_document (tab);
-
- /* If file was never saved or is remote we do not check */
- if (!gedit_document_is_local (doc))
- {
- return FALSE;
- }
-
- if (_gedit_document_check_externally_modified (doc))
- {
- gedit_tab_set_state (tab, GEDIT_TAB_STATE_EXTERNALLY_MODIFIED_NOTIFICATION);
-
- display_externally_modified_notification (tab);
-
- return FALSE;
- }
-
- return FALSE;
-}
-
-static GMountOperation *
-tab_mount_operation_factory (GeditDocument *doc,
- gpointer userdata)
-{
- GeditTab *tab = GEDIT_TAB (userdata);
- GtkWidget *window;
-
- window = gtk_widget_get_toplevel (GTK_WIDGET (tab));
- return gtk_mount_operation_new (GTK_WINDOW (window));
-}
-
-static void
-gedit_tab_init (GeditTab *tab)
-{
- GtkWidget *sw;
- GeditDocument *doc;
- GeditLockdownMask lockdown;
-
- tab->priv = GEDIT_TAB_GET_PRIVATE (tab);
-
- tab->priv->state = GEDIT_TAB_STATE_NORMAL;
-
- tab->priv->not_editable = FALSE;
-
- tab->priv->save_flags = 0;
-
- tab->priv->ask_if_externally_modified = TRUE;
-
- /* Create the scrolled window */
- sw = gtk_scrolled_window_new (NULL, NULL);
- tab->priv->view_scrolled_window = sw;
-
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
- GTK_POLICY_AUTOMATIC,
- GTK_POLICY_AUTOMATIC);
-
- /* Manage auto save data */
- lockdown = gedit_app_get_lockdown (gedit_app_get_default ());
- tab->priv->auto_save = gedit_prefs_manager_get_auto_save () &&
- !(lockdown & GEDIT_LOCKDOWN_SAVE_TO_DISK);
- tab->priv->auto_save = (tab->priv->auto_save != FALSE);
-
- tab->priv->auto_save_interval = gedit_prefs_manager_get_auto_save_interval ();
- if (tab->priv->auto_save_interval <= 0)
- tab->priv->auto_save_interval = GPM_DEFAULT_AUTO_SAVE_INTERVAL;
-
- /* Create the view */
- doc = gedit_document_new ();
- g_object_set_data (G_OBJECT (doc), GEDIT_TAB_KEY, tab);
-
- _gedit_document_set_mount_operation_factory (doc,
- tab_mount_operation_factory,
- tab);
-
- tab->priv->view = gedit_view_new (doc);
- g_object_unref (doc);
- gtk_widget_show (tab->priv->view);
- g_object_set_data (G_OBJECT (tab->priv->view), GEDIT_TAB_KEY, tab);
-
- gtk_box_pack_end (GTK_BOX (tab), sw, TRUE, TRUE, 0);
- gtk_container_add (GTK_CONTAINER (sw), tab->priv->view);
- gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw),
- GTK_SHADOW_IN);
- gtk_widget_show (sw);
-
- g_signal_connect (doc,
- "notify::uri",
- G_CALLBACK (document_uri_notify_handler),
- tab);
- g_signal_connect (doc,
- "notify::shortname",
- G_CALLBACK (document_shortname_notify_handler),
- tab);
- g_signal_connect (doc,
- "modified_changed",
- G_CALLBACK (document_modified_changed),
- tab);
- g_signal_connect (doc,
- "loading",
- G_CALLBACK (document_loading),
- tab);
- g_signal_connect (doc,
- "loaded",
- G_CALLBACK (document_loaded),
- tab);
- g_signal_connect (doc,
- "saving",
- G_CALLBACK (document_saving),
- tab);
- g_signal_connect (doc,
- "saved",
- G_CALLBACK (document_saved),
- tab);
-
- g_signal_connect_after (tab->priv->view,
- "focus-in-event",
- G_CALLBACK (view_focused_in),
- tab);
-
- g_signal_connect_after (tab->priv->view,
- "realize",
- G_CALLBACK (view_realized),
- tab);
-}
-
-GtkWidget *
-_gedit_tab_new (void)
-{
- return GTK_WIDGET (g_object_new (GEDIT_TYPE_TAB, NULL));
-}
-
-/* Whether create is TRUE, creates a new empty document if location does
- not refer to an existing file */
-GtkWidget *
-_gedit_tab_new_from_uri (const gchar *uri,
- const GeditEncoding *encoding,
- gint line_pos,
- gboolean create)
-{
- GeditTab *tab;
-
- g_return_val_if_fail (uri != NULL, NULL);
-
- tab = GEDIT_TAB (_gedit_tab_new ());
-
- _gedit_tab_load (tab,
- uri,
- encoding,
- line_pos,
- create);
-
- return GTK_WIDGET (tab);
-}
-
-/**
- * gedit_tab_get_view:
- * @tab: a #GeditTab
- *
- * Gets the #GeditView inside @tab.
- *
- * Returns: the #GeditView inside @tab
- */
-GeditView *
-gedit_tab_get_view (GeditTab *tab)
-{
- return GEDIT_VIEW (tab->priv->view);
-}
-
-/**
- * gedit_tab_get_document:
- * @tab: a #GeditTab
- *
- * Gets the #GeditDocument associated to @tab.
- *
- * Returns: the #GeditDocument associated to @tab
- */
-GeditDocument *
-gedit_tab_get_document (GeditTab *tab)
-{
- return GEDIT_DOCUMENT (gtk_text_view_get_buffer (
- GTK_TEXT_VIEW (tab->priv->view)));
-}
-
-#define MAX_DOC_NAME_LENGTH 40
-
-gchar *
-_gedit_tab_get_name (GeditTab *tab)
-{
- GeditDocument *doc;
- gchar *name;
- gchar *docname;
- gchar *tab_name;
-
- g_return_val_if_fail (GEDIT_IS_TAB (tab), NULL);
-
- doc = gedit_tab_get_document (tab);
-
- name = gedit_document_get_short_name_for_display (doc);
-
- /* Truncate the name so it doesn't get insanely wide. */
- docname = gedit_utils_str_middle_truncate (name, MAX_DOC_NAME_LENGTH);
-
- if (gtk_text_buffer_get_modified (GTK_TEXT_BUFFER (doc)))
- {
- tab_name = g_strdup_printf ("*%s", docname);
- }
- else
- {
- #if 0
- if (gedit_document_get_readonly (doc))
- {
- tab_name = g_strdup_printf ("%s [%s]", docname,
- /*Read only*/ _("RO"));
- }
- else
- {
- tab_name = g_strdup_printf ("%s", docname);
- }
-#endif
- tab_name = g_strdup (docname);
- }
-
- g_free (docname);
- g_free (name);
-
- return tab_name;
-}
-
-gchar *
-_gedit_tab_get_tooltips (GeditTab *tab)
-{
- GeditDocument *doc;
- gchar *tip;
- gchar *uri;
- gchar *ruri;
- gchar *ruri_markup;
-
- g_return_val_if_fail (GEDIT_IS_TAB (tab), NULL);
-
- doc = gedit_tab_get_document (tab);
-
- uri = gedit_document_get_uri_for_display (doc);
- g_return_val_if_fail (uri != NULL, NULL);
-
- ruri = gedit_utils_replace_home_dir_with_tilde (uri);
- g_free (uri);
-
- ruri_markup = g_markup_printf_escaped ("<i>%s</i>", ruri);
-
- switch (tab->priv->state)
- {
- gchar *content_type;
- gchar *mime_type;
- gchar *content_description;
- gchar *content_full_description;
- gchar *encoding;
- const GeditEncoding *enc;
-
- case GEDIT_TAB_STATE_LOADING_ERROR:
- tip = g_strdup_printf (_("Error opening file %s"),
- ruri_markup);
- break;
-
- case GEDIT_TAB_STATE_REVERTING_ERROR:
- tip = g_strdup_printf (_("Error reverting file %s"),
- ruri_markup);
- break;
-
- case GEDIT_TAB_STATE_SAVING_ERROR:
- tip = g_strdup_printf (_("Error saving file %s"),
- ruri_markup);
- break;
- default:
- content_type = gedit_document_get_content_type (doc);
- mime_type = gedit_document_get_mime_type (doc);
- content_description = g_content_type_get_description (content_type);
-
- if (content_description == NULL)
- content_full_description = g_strdup (mime_type);
- else
- content_full_description = g_strdup_printf ("%s (%s)",
- content_description, mime_type);
-
- g_free (content_type);
- g_free (mime_type);
- g_free (content_description);
-
- enc = gedit_document_get_encoding (doc);
-
- if (enc == NULL)
- encoding = g_strdup (_("Unicode (UTF-8)"));
- else
- encoding = gedit_encoding_to_string (enc);
-
- tip = g_markup_printf_escaped ("<b>%s</b> %s\n\n"
- "<b>%s</b> %s\n"
- "<b>%s</b> %s",
- _("Name:"), ruri,
- _("MIME Type:"), content_full_description,
- _("Encoding:"), encoding);
-
- g_free (encoding);
- g_free (content_full_description);
-
- break;
- }
-
- g_free (ruri);
- g_free (ruri_markup);
-
- return tip;
-}
-
-static GdkPixbuf *
-resize_icon (GdkPixbuf *pixbuf,
- gint size)
-{
- gint width, height;
-
- width = gdk_pixbuf_get_width (pixbuf);
- height = gdk_pixbuf_get_height (pixbuf);
-
- /* if the icon is larger than the nominal size, scale down */
- if (MAX (width, height) > size)
- {
- GdkPixbuf *scaled_pixbuf;
-
- if (width > height)
- {
- height = height * size / width;
- width = size;
- }
- else
- {
- width = width * size / height;
- height = size;
- }
-
- scaled_pixbuf = gdk_pixbuf_scale_simple (pixbuf,
- width,
- height,
- GDK_INTERP_BILINEAR);
- g_object_unref (pixbuf);
- pixbuf = scaled_pixbuf;
- }
-
- return pixbuf;
-}
-
-static GdkPixbuf *
-get_stock_icon (GtkIconTheme *theme,
- const gchar *stock,
- gint size)
-{
- GdkPixbuf *pixbuf;
-
- pixbuf = gtk_icon_theme_load_icon (theme, stock, size, 0, NULL);
- if (pixbuf == NULL)
- return NULL;
-
- return resize_icon (pixbuf, size);
-}
-
-static GdkPixbuf *
-get_icon (GtkIconTheme *theme,
- GFile *location,
- gint size)
-{
- GdkPixbuf *pixbuf;
- GtkIconInfo *icon_info;
- GFileInfo *info;
- GIcon *gicon;
-
- if (location == NULL)
- return get_stock_icon (theme, GTK_STOCK_FILE, size);
-
- /* FIXME: Doing a sync stat is bad, this should be fixed */
- info = g_file_query_info (location,
- G_FILE_ATTRIBUTE_STANDARD_ICON,
- G_FILE_QUERY_INFO_NONE,
- NULL,
- NULL);
- if (info == NULL)
- return get_stock_icon (theme, GTK_STOCK_FILE, size);
-
- gicon = g_file_info_get_icon (info);
-
- if (gicon == NULL)
- {
- g_object_unref (info);
- return get_stock_icon (theme, GTK_STOCK_FILE, size);
- }
-
- icon_info = gtk_icon_theme_lookup_by_gicon (theme, gicon, size, 0);
- g_object_unref (info);
-
- if (icon_info == NULL)
- return get_stock_icon (theme, GTK_STOCK_FILE, size);
-
- pixbuf = gtk_icon_info_load_icon (icon_info, NULL);
- gtk_icon_info_free (icon_info);
-
- if (pixbuf == NULL)
- return get_stock_icon (theme, GTK_STOCK_FILE, size);
-
- return resize_icon (pixbuf, size);
-}
-
-/* FIXME: add support for theme changed. I think it should be as easy as
- call g_object_notify (tab, "name") when the icon theme changes */
-GdkPixbuf *
-_gedit_tab_get_icon (GeditTab *tab)
-{
- GdkPixbuf *pixbuf;
- GtkIconTheme *theme;
- GdkScreen *screen;
- gint icon_size;
-
- g_return_val_if_fail (GEDIT_IS_TAB (tab), NULL);
-
- screen = gtk_widget_get_screen (GTK_WIDGET (tab));
-
- theme = gtk_icon_theme_get_for_screen (screen);
- g_return_val_if_fail (theme != NULL, NULL);
-
- gtk_icon_size_lookup_for_settings (gtk_widget_get_settings (GTK_WIDGET (tab)),
- GTK_ICON_SIZE_MENU,
- NULL,
- &icon_size);
-
- switch (tab->priv->state)
- {
- case GEDIT_TAB_STATE_LOADING:
- pixbuf = get_stock_icon (theme,
- GTK_STOCK_OPEN,
- icon_size);
- break;
-
- case GEDIT_TAB_STATE_REVERTING:
- pixbuf = get_stock_icon (theme,
- GTK_STOCK_REVERT_TO_SAVED,
- icon_size);
- break;
-
- case GEDIT_TAB_STATE_SAVING:
- pixbuf = get_stock_icon (theme,
- GTK_STOCK_SAVE,
- icon_size);
- break;
-
- case GEDIT_TAB_STATE_PRINTING:
- pixbuf = get_stock_icon (theme,
- GTK_STOCK_PRINT,
- icon_size);
- break;
-
- case GEDIT_TAB_STATE_PRINT_PREVIEWING:
- case GEDIT_TAB_STATE_SHOWING_PRINT_PREVIEW:
- pixbuf = get_stock_icon (theme,
- GTK_STOCK_PRINT_PREVIEW,
- icon_size);
- break;
-
- case GEDIT_TAB_STATE_LOADING_ERROR:
- case GEDIT_TAB_STATE_REVERTING_ERROR:
- case GEDIT_TAB_STATE_SAVING_ERROR:
- case GEDIT_TAB_STATE_GENERIC_ERROR:
- pixbuf = get_stock_icon (theme,
- GTK_STOCK_DIALOG_ERROR,
- icon_size);
- break;
-
- case GEDIT_TAB_STATE_EXTERNALLY_MODIFIED_NOTIFICATION:
- pixbuf = get_stock_icon (theme,
- GTK_STOCK_DIALOG_WARNING,
- icon_size);
- break;
-
- default:
- {
- GFile *location;
- GeditDocument *doc;
-
- doc = gedit_tab_get_document (tab);
-
- location = gedit_document_get_location (doc);
- pixbuf = get_icon (theme, location, icon_size);
-
- if (location)
- g_object_unref (location);
- }
- }
-
- return pixbuf;
-}
-
-/**
- * gedit_tab_get_from_document:
- * @doc: a #GeditDocument
- *
- * Gets the #GeditTab associated with @doc.
- *
- * Returns: the #GeditTab associated with @doc
- */
-GeditTab *
-gedit_tab_get_from_document (GeditDocument *doc)
-{
- gpointer res;
-
- g_return_val_if_fail (GEDIT_IS_DOCUMENT (doc), NULL);
-
- res = g_object_get_data (G_OBJECT (doc), GEDIT_TAB_KEY);
-
- return (res != NULL) ? GEDIT_TAB (res) : NULL;
-}
-
-void
-_gedit_tab_load (GeditTab *tab,
- const gchar *uri,
- const GeditEncoding *encoding,
- gint line_pos,
- gboolean create)
-{
- GeditDocument *doc;
-
- g_return_if_fail (GEDIT_IS_TAB (tab));
- g_return_if_fail (tab->priv->state == GEDIT_TAB_STATE_NORMAL);
-
- doc = gedit_tab_get_document (tab);
- g_return_if_fail (GEDIT_IS_DOCUMENT (doc));
-
- gedit_tab_set_state (tab, GEDIT_TAB_STATE_LOADING);
-
- tab->priv->tmp_line_pos = line_pos;
- tab->priv->tmp_encoding = encoding;
-
- if (tab->priv->auto_save_timeout > 0)
- remove_auto_save_timeout (tab);
-
- gedit_document_load (doc,
- uri,
- encoding,
- line_pos,
- create);
-}
-
-void
-_gedit_tab_revert (GeditTab *tab)
-{
- GeditDocument *doc;
- gchar *uri;
-
- g_return_if_fail (GEDIT_IS_TAB (tab));
- g_return_if_fail ((tab->priv->state == GEDIT_TAB_STATE_NORMAL) ||
- (tab->priv->state == GEDIT_TAB_STATE_EXTERNALLY_MODIFIED_NOTIFICATION));
-
- if (tab->priv->state == GEDIT_TAB_STATE_EXTERNALLY_MODIFIED_NOTIFICATION)
- {
- set_message_area (tab, NULL);
- }
-
- doc = gedit_tab_get_document (tab);
- g_return_if_fail (GEDIT_IS_DOCUMENT (doc));
-
- gedit_tab_set_state (tab, GEDIT_TAB_STATE_REVERTING);
-
- uri = gedit_document_get_uri (doc);
- g_return_if_fail (uri != NULL);
-
- tab->priv->tmp_line_pos = 0;
- tab->priv->tmp_encoding = gedit_document_get_encoding (doc);
-
- if (tab->priv->auto_save_timeout > 0)
- remove_auto_save_timeout (tab);
-
- gedit_document_load (doc,
- uri,
- tab->priv->tmp_encoding,
- 0,
- FALSE);
-
- g_free (uri);
-}
-
-void
-_gedit_tab_save (GeditTab *tab)
-{
- GeditDocument *doc;
- GeditDocumentSaveFlags save_flags;
-
- g_return_if_fail (GEDIT_IS_TAB (tab));
- g_return_if_fail ((tab->priv->state == GEDIT_TAB_STATE_NORMAL) ||
- (tab->priv->state == GEDIT_TAB_STATE_EXTERNALLY_MODIFIED_NOTIFICATION) ||
- (tab->priv->state == GEDIT_TAB_STATE_SHOWING_PRINT_PREVIEW));
- g_return_if_fail (tab->priv->tmp_save_uri == NULL);
- g_return_if_fail (tab->priv->tmp_encoding == NULL);
-
- doc = gedit_tab_get_document (tab);
- g_return_if_fail (GEDIT_IS_DOCUMENT (doc));
- g_return_if_fail (!gedit_document_is_untitled (doc));
-
- if (tab->priv->state == GEDIT_TAB_STATE_EXTERNALLY_MODIFIED_NOTIFICATION)
- {
- /* We already told the user about the external
- * modification: hide the message area and set
- * the save flag.
- */
-
- set_message_area (tab, NULL);
- save_flags = tab->priv->save_flags | GEDIT_DOCUMENT_SAVE_IGNORE_MTIME;
- }
- else
- {
- save_flags = tab->priv->save_flags;
- }
-
- gedit_tab_set_state (tab, GEDIT_TAB_STATE_SAVING);
-
- /* uri used in error messages, will be freed in document_saved */
- tab->priv->tmp_save_uri = gedit_document_get_uri (doc);
- tab->priv->tmp_encoding = gedit_document_get_encoding (doc);
-
- if (tab->priv->auto_save_timeout > 0)
- remove_auto_save_timeout (tab);
-
- gedit_document_save (doc, save_flags);
-}
-
-static gboolean
-gedit_tab_auto_save (GeditTab *tab)
-{
- GeditDocument *doc;
-
- gedit_debug (DEBUG_TAB);
-
- g_return_val_if_fail (tab->priv->tmp_save_uri == NULL, FALSE);
- g_return_val_if_fail (tab->priv->tmp_encoding == NULL, FALSE);
-
- doc = gedit_tab_get_document (tab);
-
- g_return_val_if_fail (!gedit_document_is_untitled (doc), FALSE);
- g_return_val_if_fail (!gedit_document_get_readonly (doc), FALSE);
-
- g_return_val_if_fail (tab->priv->auto_save_timeout > 0, FALSE);
- g_return_val_if_fail (tab->priv->auto_save, FALSE);
- g_return_val_if_fail (tab->priv->auto_save_interval > 0, FALSE);
-
- if (!gtk_text_buffer_get_modified (GTK_TEXT_BUFFER(doc)))
- {
- gedit_debug_message (DEBUG_TAB, "Document not modified");
-
- return TRUE;
- }
-
- if ((tab->priv->state != GEDIT_TAB_STATE_NORMAL) &&
- (tab->priv->state != GEDIT_TAB_STATE_SHOWING_PRINT_PREVIEW))
- {
- /* Retry after 30 seconds */
- guint timeout;
-
- gedit_debug_message (DEBUG_TAB, "Retry after 30 seconds");
-
- /* Add a new timeout */
- timeout = g_timeout_add_seconds (30,
- (GSourceFunc) gedit_tab_auto_save,
- tab);
-
- tab->priv->auto_save_timeout = timeout;
-
- /* Returns FALSE so the old timeout is "destroyed" */
- return FALSE;
- }
-
- gedit_tab_set_state (tab, GEDIT_TAB_STATE_SAVING);
-
- /* uri used in error messages, will be freed in document_saved */
- tab->priv->tmp_save_uri = gedit_document_get_uri (doc);
- tab->priv->tmp_encoding = gedit_document_get_encoding (doc);
-
- /* Set auto_save_timeout to 0 since the timeout is going to be destroyed */
- tab->priv->auto_save_timeout = 0;
-
- /* Since we are autosaving, we need to preserve the backup that was produced
- the last time the user "manually" saved the file. In the case a recoverable
- error happens while saving, the last backup is not preserved since the user
- expressed his willing of saving the file */
- gedit_document_save (doc, tab->priv->save_flags | GEDIT_DOCUMENT_SAVE_PRESERVE_BACKUP);
-
- gedit_debug_message (DEBUG_TAB, "Done");
-
- /* Returns FALSE so the old timeout is "destroyed" */
- return FALSE;
-}
-
-void
-_gedit_tab_save_as (GeditTab *tab,
- const gchar *uri,
- const GeditEncoding *encoding,
- GeditDocumentNewlineType newline_type)
-{
- GeditDocument *doc;
- GeditDocumentSaveFlags save_flags;
-
- g_return_if_fail (GEDIT_IS_TAB (tab));
- g_return_if_fail ((tab->priv->state == GEDIT_TAB_STATE_NORMAL) ||
- (tab->priv->state == GEDIT_TAB_STATE_EXTERNALLY_MODIFIED_NOTIFICATION) ||
- (tab->priv->state == GEDIT_TAB_STATE_SHOWING_PRINT_PREVIEW));
- g_return_if_fail (encoding != NULL);
-
- g_return_if_fail (tab->priv->tmp_save_uri == NULL);
- g_return_if_fail (tab->priv->tmp_encoding == NULL);
-
- doc = gedit_tab_get_document (tab);
- g_return_if_fail (GEDIT_IS_DOCUMENT (doc));
-
- /* reset the save flags, when saving as */
- tab->priv->save_flags = 0;
-
- if (tab->priv->state == GEDIT_TAB_STATE_EXTERNALLY_MODIFIED_NOTIFICATION)
- {
- /* We already told the user about the external
- * modification: hide the message area and set
- * the save flag.
- */
-
- set_message_area (tab, NULL);
- save_flags = tab->priv->save_flags | GEDIT_DOCUMENT_SAVE_IGNORE_MTIME;
- }
- else
- {
- save_flags = tab->priv->save_flags;
- }
-
- gedit_tab_set_state (tab, GEDIT_TAB_STATE_SAVING);
-
- /* uri used in error messages... strdup because errors are async
- * and the string can go away, will be freed in document_saved */
- tab->priv->tmp_save_uri = g_strdup (uri);
- tab->priv->tmp_encoding = encoding;
-
- if (tab->priv->auto_save_timeout > 0)
- remove_auto_save_timeout (tab);
-
- /* FIXME: this should behave the same as encoding, setting it here
- makes it persistent (if save fails, it's remembered). It's not
- a very big deal, but would be nice to have them follow the
- same pattern. This can be changed once we break API for 3.0 */
- gedit_document_set_newline_type (doc, newline_type);
- gedit_document_save_as (doc, uri, encoding, tab->priv->save_flags);
-}
-
-#define GEDIT_PAGE_SETUP_KEY "gedit-page-setup-key"
-#define GEDIT_PRINT_SETTINGS_KEY "gedit-print-settings-key"
-
-static GtkPageSetup *
-get_page_setup (GeditTab *tab)
-{
- gpointer data;
- GeditDocument *doc;
-
- doc = gedit_tab_get_document (tab);
-
- data = g_object_get_data (G_OBJECT (doc),
- GEDIT_PAGE_SETUP_KEY);
-
- if (data == NULL)
- {
- return _gedit_app_get_default_page_setup (gedit_app_get_default());
- }
- else
- {
- return gtk_page_setup_copy (GTK_PAGE_SETUP (data));
- }
-}
-
-static GtkPrintSettings *
-get_print_settings (GeditTab *tab)
-{
- gpointer data;
- GeditDocument *doc;
-
- doc = gedit_tab_get_document (tab);
-
- data = g_object_get_data (G_OBJECT (doc),
- GEDIT_PRINT_SETTINGS_KEY);
-
- if (data == NULL)
- {
- return _gedit_app_get_default_print_settings (gedit_app_get_default());
- }
- else
- {
- return gtk_print_settings_copy (GTK_PRINT_SETTINGS (data));
- }
-}
-
-/* FIXME: show the message area only if the operation will be "long" */
-static void
-printing_cb (GeditPrintJob *job,
- GeditPrintJobStatus status,
- GeditTab *tab)
-{
- g_return_if_fail (GEDIT_IS_PROGRESS_MESSAGE_AREA (tab->priv->message_area));
-
- gtk_widget_show (tab->priv->message_area);
-
- gedit_progress_message_area_set_text (GEDIT_PROGRESS_MESSAGE_AREA (tab->priv->message_area),
- gedit_print_job_get_status_string (job));
-
- gedit_progress_message_area_set_fraction (GEDIT_PROGRESS_MESSAGE_AREA (tab->priv->message_area),
- gedit_print_job_get_progress (job));
-}
-
-static void
-store_print_settings (GeditTab *tab,
- GeditPrintJob *job)
-{
- GeditDocument *doc;
- GtkPrintSettings *settings;
- GtkPageSetup *page_setup;
-
- doc = gedit_tab_get_document (tab);
-
- settings = gedit_print_job_get_print_settings (job);
-
- /* clear n-copies settings since we do not want to
- * persist that one */
- gtk_print_settings_unset (settings,
- GTK_PRINT_SETTINGS_N_COPIES);
-
- /* remember settings for this document */
- g_object_set_data_full (G_OBJECT (doc),
- GEDIT_PRINT_SETTINGS_KEY,
- g_object_ref (settings),
- (GDestroyNotify)g_object_unref);
-
- /* make them the default */
- _gedit_app_set_default_print_settings (gedit_app_get_default (),
- settings);
-
- page_setup = gedit_print_job_get_page_setup (job);
-
- /* remember page setup for this document */
- g_object_set_data_full (G_OBJECT (doc),
- GEDIT_PAGE_SETUP_KEY,
- g_object_ref (page_setup),
- (GDestroyNotify)g_object_unref);
-
- /* make it the default */
- _gedit_app_set_default_page_setup (gedit_app_get_default (),
- page_setup);
-}
-
-static void
-done_printing_cb (GeditPrintJob *job,
- GeditPrintJobResult result,
- const GError *error,
- GeditTab *tab)
-{
- GeditView *view;
-
- g_return_if_fail (tab->priv->state == GEDIT_TAB_STATE_PRINT_PREVIEWING ||
- tab->priv->state == GEDIT_TAB_STATE_SHOWING_PRINT_PREVIEW ||
- tab->priv->state == GEDIT_TAB_STATE_PRINTING);
-
- if (tab->priv->state == GEDIT_TAB_STATE_SHOWING_PRINT_PREVIEW)
- {
- /* print preview has been destroyed... */
- tab->priv->print_preview = NULL;
- }
- else
- {
- g_return_if_fail (GEDIT_IS_PROGRESS_MESSAGE_AREA (tab->priv->message_area));
-
- set_message_area (tab, NULL); /* destroy the message area */
- }
-
- // TODO: check status and error
-
- if (result == GEDIT_PRINT_JOB_RESULT_OK)
- {
- store_print_settings (tab, job);
- }
-
-#if 0
- if (tab->priv->print_preview != NULL)
- {
- /* If we were printing while showing the print preview,
- see bug #352658 */
- gtk_widget_destroy (tab->priv->print_preview);
- g_return_if_fail (tab->priv->state == GEDIT_TAB_STATE_PRINTING);
- }
-#endif
-
- gedit_tab_set_state (tab, GEDIT_TAB_STATE_NORMAL);
-
- view = gedit_tab_get_view (tab);
- gtk_widget_grab_focus (GTK_WIDGET (view));
-
- g_object_unref (tab->priv->print_job);
- tab->priv->print_job = NULL;
-}
-
-#if 0
-static void
-print_preview_destroyed (GtkWidget *preview,
- GeditTab *tab)
-{
- tab->priv->print_preview = NULL;
-
- if (tab->priv->state == GEDIT_TAB_STATE_SHOWING_PRINT_PREVIEW)
- {
- GeditView *view;
-
- gedit_tab_set_state (tab, GEDIT_TAB_STATE_NORMAL);
-
- view = gedit_tab_get_view (tab);
- gtk_widget_grab_focus (GTK_WIDGET (view));
- }
- else
- {
- /* This should happen only when printing while showing the print
- * preview. In this case let us continue whithout changing
- * the state and show the document. See bug #352658 */
- gtk_widget_show (tab->priv->view_scrolled_window);
-
- g_return_if_fail (tab->priv->state == GEDIT_TAB_STATE_PRINTING);
- }
-}
-#endif
-
-static void
-show_preview_cb (GeditPrintJob *job,
- GeditPrintPreview *preview,
- GeditTab *tab)
-{
-// g_return_if_fail (tab->priv->state == GEDIT_TAB_STATE_PRINT_PREVIEWING);
- g_return_if_fail (tab->priv->print_preview == NULL);
-
- set_message_area (tab, NULL); /* destroy the message area */
-
- tab->priv->print_preview = GTK_WIDGET (preview);
- gtk_box_pack_end (GTK_BOX (tab),
- tab->priv->print_preview,
- TRUE,
- TRUE,
- 0);
- gtk_widget_show (tab->priv->print_preview);
- gtk_widget_grab_focus (tab->priv->print_preview);
-
-/* when the preview gets destroyed we get "done" signal
- g_signal_connect (tab->priv->print_preview,
- "destroy",
- G_CALLBACK (print_preview_destroyed),
- tab);
-*/
- gedit_tab_set_state (tab, GEDIT_TAB_STATE_SHOWING_PRINT_PREVIEW);
-}
-
-#if 0
-
-static void
-set_print_preview (GeditTab *tab,
- GtkWidget *print_preview)
-{
- if (tab->priv->print_preview == print_preview)
- return;
-
- if (tab->priv->print_preview != NULL)
- gtk_widget_destroy (tab->priv->print_preview);
-
- tab->priv->print_preview = print_preview;
-
- gtk_box_pack_end (GTK_BOX (tab),
- tab->priv->print_preview,
- TRUE,
- TRUE,
- 0);
-
- gtk_widget_grab_focus (tab->priv->print_preview);
-
- g_signal_connect (tab->priv->print_preview,
- "destroy",
- G_CALLBACK (print_preview_destroyed),
- tab);
-}
-
-static void
-preview_finished_cb (GtkSourcePrintJob *pjob, GeditTab *tab)
-{
- MatePrintJob *gjob;
- GtkWidget *preview = NULL;
-
- g_return_if_fail (GEDIT_IS_PROGRESS_MESSAGE_AREA (tab->priv->message_area));
- set_message_area (tab, NULL); /* destroy the message area */
-
- gjob = gtk_source_print_job_get_print_job (pjob);
-
- preview = gedit_print_job_preview_new (gjob);
- g_object_unref (gjob);
-
- set_print_preview (tab, preview);
-
- gtk_widget_show (preview);
- g_object_unref (pjob);
-
- gedit_tab_set_state (tab, GEDIT_TAB_STATE_SHOWING_PRINT_PREVIEW);
-}
-
-
-#endif
-
-static void
-print_cancelled (GtkWidget *area,
- gint response_id,
- GeditTab *tab)
-{
- g_return_if_fail (GEDIT_IS_PROGRESS_MESSAGE_AREA (tab->priv->message_area));
-
- gedit_print_job_cancel (tab->priv->print_job);
-
- g_debug ("print_cancelled");
-}
-
-static void
-show_printing_message_area (GeditTab *tab, gboolean preview)
-{
- GtkWidget *area;
-
- if (preview)
- area = gedit_progress_message_area_new (GTK_STOCK_PRINT_PREVIEW,
- "",
- TRUE);
- else
- area = gedit_progress_message_area_new (GTK_STOCK_PRINT,
- "",
- TRUE);
-
- g_signal_connect (area,
- "response",
- G_CALLBACK (print_cancelled),
- tab);
-
- set_message_area (tab, area);
-}
-
-#if !GTK_CHECK_VERSION (2, 17, 4)
-
-static void
-page_setup_done_cb (GtkPageSetup *setup,
- GeditTab *tab)
-{
- if (setup != NULL)
- {
- GeditDocument *doc;
-
- doc = gedit_tab_get_document (tab);
-
- /* remember it for this document */
- g_object_set_data_full (G_OBJECT (doc),
- GEDIT_PAGE_SETUP_KEY,
- g_object_ref (setup),
- (GDestroyNotify)g_object_unref);
-
- /* make it the default */
- _gedit_app_set_default_page_setup (gedit_app_get_default(),
- setup);
- }
-}
-
-void
-_gedit_tab_page_setup (GeditTab *tab)
-{
- GtkPageSetup *setup;
- GtkPrintSettings *settings;
-
- g_return_if_fail (GEDIT_IS_TAB (tab));
-
- setup = get_page_setup (tab);
- settings = get_print_settings (tab);
-
- gtk_print_run_page_setup_dialog_async (GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (tab))),
- setup,
- settings,
- (GtkPageSetupDoneFunc) page_setup_done_cb,
- tab);
-
- /* CHECK: should we unref setup and settings? */
-}
-
-#endif
-
-static void
-gedit_tab_print_or_print_preview (GeditTab *tab,
- GtkPrintOperationAction print_action)
-{
- GeditView *view;
- gboolean is_preview;
- GtkPageSetup *setup;
- GtkPrintSettings *settings;
- GtkPrintOperationResult res;
- GError *error = NULL;
-
- g_return_if_fail (tab->priv->print_job == NULL);
- g_return_if_fail (tab->priv->state == GEDIT_TAB_STATE_NORMAL);
-
- view = gedit_tab_get_view (tab);
-
- is_preview = (print_action == GTK_PRINT_OPERATION_ACTION_PREVIEW);
-
- tab->priv->print_job = gedit_print_job_new (view);
- g_object_add_weak_pointer (G_OBJECT (tab->priv->print_job),
- (gpointer *) &tab->priv->print_job);
-
- show_printing_message_area (tab, is_preview);
-
- g_signal_connect (tab->priv->print_job,
- "printing",
- G_CALLBACK (printing_cb),
- tab);
- g_signal_connect (tab->priv->print_job,
- "show-preview",
- G_CALLBACK (show_preview_cb),
- tab);
- g_signal_connect (tab->priv->print_job,
- "done",
- G_CALLBACK (done_printing_cb),
- tab);
-
- if (is_preview)
- gedit_tab_set_state (tab, GEDIT_TAB_STATE_PRINT_PREVIEWING);
- else
- gedit_tab_set_state (tab, GEDIT_TAB_STATE_PRINTING);
-
- setup = get_page_setup (tab);
- settings = get_print_settings (tab);
-
- res = gedit_print_job_print (tab->priv->print_job,
- print_action,
- setup,
- settings,
- GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (tab))),
- &error);
-
- // TODO: manage res in the correct way
- if (res == GTK_PRINT_OPERATION_RESULT_ERROR)
- {
- /* FIXME: go in error state */
- gedit_tab_set_state (tab, GEDIT_TAB_STATE_NORMAL);
- g_warning ("Async print preview failed (%s)", error->message);
- g_object_unref (tab->priv->print_job);
- g_error_free (error);
- }
-}
-
-void
-_gedit_tab_print (GeditTab *tab)
-{
- g_return_if_fail (GEDIT_IS_TAB (tab));
-
- /* FIXME: currently we can have just one printoperation going on
- * at a given time, so before starting the print we close the preview.
- * Would be nice to handle it properly though */
- if (tab->priv->state == GEDIT_TAB_STATE_SHOWING_PRINT_PREVIEW)
- {
- gtk_widget_destroy (tab->priv->print_preview);
- }
-
- gedit_tab_print_or_print_preview (tab,
- GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG);
-}
-
-void
-_gedit_tab_print_preview (GeditTab *tab)
-{
- g_return_if_fail (GEDIT_IS_TAB (tab));
-
- gedit_tab_print_or_print_preview (tab,
- GTK_PRINT_OPERATION_ACTION_PREVIEW);
-}
-
-void
-_gedit_tab_mark_for_closing (GeditTab *tab)
-{
- g_return_if_fail (GEDIT_IS_TAB (tab));
- g_return_if_fail (tab->priv->state == GEDIT_TAB_STATE_NORMAL);
-
- gedit_tab_set_state (tab, GEDIT_TAB_STATE_CLOSING);
-}
-
-gboolean
-_gedit_tab_can_close (GeditTab *tab)
-{
- GeditDocument *doc;
- GeditTabState ts;
-
- g_return_val_if_fail (GEDIT_IS_TAB (tab), FALSE);
-
- ts = gedit_tab_get_state (tab);
-
- /* if we are loading or reverting, the tab can be closed */
- if ((ts == GEDIT_TAB_STATE_LOADING) ||
- (ts == GEDIT_TAB_STATE_LOADING_ERROR) ||
- (ts == GEDIT_TAB_STATE_REVERTING) ||
- (ts == GEDIT_TAB_STATE_REVERTING_ERROR)) /* CHECK: I'm not sure this is the right behavior for REVERTING ERROR */
- return TRUE;
-
- /* Do not close tab with saving errors */
- if (ts == GEDIT_TAB_STATE_SAVING_ERROR)
- return FALSE;
-
- doc = gedit_tab_get_document (tab);
-
- /* TODO: we need to save the file also if it has been externally
- modified - Paolo (Oct 10, 2005) */
-
- return (!gtk_text_buffer_get_modified (GTK_TEXT_BUFFER (doc)) &&
- !gedit_document_get_deleted (doc));
-}
-
-/**
- * gedit_tab_get_auto_save_enabled:
- * @tab: a #GeditTab
- *
- * Gets the current state for the autosave feature
- *
- * Return value: %TRUE if the autosave is enabled, else %FALSE
- **/
-gboolean
-gedit_tab_get_auto_save_enabled (GeditTab *tab)
-{
- gedit_debug (DEBUG_TAB);
-
- g_return_val_if_fail (GEDIT_IS_TAB (tab), FALSE);
-
- return tab->priv->auto_save;
-}
-
-/**
- * gedit_tab_set_auto_save_enabled:
- * @tab: a #GeditTab
- * @enable: enable (%TRUE) or disable (%FALSE) auto save
- *
- * Enables or disables the autosave feature. It does not install an
- * autosave timeout if the document is new or is read-only
- **/
-void
-gedit_tab_set_auto_save_enabled (GeditTab *tab,
- gboolean enable)
-{
- GeditDocument *doc = NULL;
- GeditLockdownMask lockdown;
-
- gedit_debug (DEBUG_TAB);
-
- g_return_if_fail (GEDIT_IS_TAB (tab));
-
- /* Force disabling when lockdown is active */
- lockdown = gedit_app_get_lockdown (gedit_app_get_default());
- if (lockdown & GEDIT_LOCKDOWN_SAVE_TO_DISK)
- enable = FALSE;
-
- doc = gedit_tab_get_document (tab);
-
- if (tab->priv->auto_save == enable)
- return;
-
- tab->priv->auto_save = enable;
-
- if (enable &&
- (tab->priv->auto_save_timeout <=0) &&
- !gedit_document_is_untitled (doc) &&
- !gedit_document_get_readonly (doc))
- {
- if ((tab->priv->state != GEDIT_TAB_STATE_LOADING) &&
- (tab->priv->state != GEDIT_TAB_STATE_SAVING) &&
- (tab->priv->state != GEDIT_TAB_STATE_REVERTING) &&
- (tab->priv->state != GEDIT_TAB_STATE_LOADING_ERROR) &&
- (tab->priv->state != GEDIT_TAB_STATE_SAVING_ERROR) &&
- (tab->priv->state != GEDIT_TAB_STATE_REVERTING_ERROR))
- {
- install_auto_save_timeout (tab);
- }
- /* else: the timeout will be installed when loading/saving/reverting
- will terminate */
-
- return;
- }
-
- if (!enable && (tab->priv->auto_save_timeout > 0))
- {
- remove_auto_save_timeout (tab);
-
- return;
- }
-
- g_return_if_fail ((!enable && (tab->priv->auto_save_timeout <= 0)) ||
- gedit_document_is_untitled (doc) || gedit_document_get_readonly (doc));
-}
-
-/**
- * gedit_tab_get_auto_save_interval:
- * @tab: a #GeditTab
- *
- * Gets the current interval for the autosaves
- *
- * Return value: the value of the autosave
- **/
-gint
-gedit_tab_get_auto_save_interval (GeditTab *tab)
-{
- gedit_debug (DEBUG_TAB);
-
- g_return_val_if_fail (GEDIT_IS_TAB (tab), 0);
-
- return tab->priv->auto_save_interval;
-}
-
-/**
- * gedit_tab_set_auto_save_interval:
- * @tab: a #GeditTab
- * @interval: the new interval
- *
- * Sets the interval for the autosave feature. It does nothing if the
- * interval is the same as the one already present. It removes the old
- * interval timeout and adds a new one with the autosave passed as
- * argument.
- **/
-void
-gedit_tab_set_auto_save_interval (GeditTab *tab,
- gint interval)
-{
- GeditDocument *doc = NULL;
-
- gedit_debug (DEBUG_TAB);
-
- g_return_if_fail (GEDIT_IS_TAB (tab));
-
- doc = gedit_tab_get_document(tab);
-
- g_return_if_fail (GEDIT_IS_DOCUMENT (doc));
- g_return_if_fail (interval > 0);
-
- if (tab->priv->auto_save_interval == interval)
- return;
-
- tab->priv->auto_save_interval = interval;
-
- if (!tab->priv->auto_save)
- return;
-
- if (tab->priv->auto_save_timeout > 0)
- {
- g_return_if_fail (!gedit_document_is_untitled (doc));
- g_return_if_fail (!gedit_document_get_readonly (doc));
-
- remove_auto_save_timeout (tab);
-
- install_auto_save_timeout (tab);
- }
-}
-
-void
-gedit_tab_set_info_bar (GeditTab *tab,
- GtkWidget *info_bar)
-{
- g_return_if_fail (GEDIT_IS_TAB (tab));
- g_return_if_fail (info_bar == NULL || GTK_IS_WIDGET (info_bar));
-
- /* FIXME: this can cause problems with the tab state machine */
- set_message_area (tab, info_bar);
-}
diff --git a/gedit/gedit-tab.h b/gedit/gedit-tab.h
deleted file mode 100755
index 68262083..00000000
--- a/gedit/gedit-tab.h
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * gedit-tab.h
- * This file is part of gedit
- *
- * Copyright (C) 2005 - Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifndef __GEDIT_TAB_H__
-#define __GEDIT_TAB_H__
-
-#include <gtk/gtk.h>
-
-#include <gedit/gedit-view.h>
-#include <gedit/gedit-document.h>
-
-G_BEGIN_DECLS
-
-typedef enum
-{
- GEDIT_TAB_STATE_NORMAL = 0,
- GEDIT_TAB_STATE_LOADING,
- GEDIT_TAB_STATE_REVERTING,
- GEDIT_TAB_STATE_SAVING,
- GEDIT_TAB_STATE_PRINTING,
- GEDIT_TAB_STATE_PRINT_PREVIEWING,
- GEDIT_TAB_STATE_SHOWING_PRINT_PREVIEW,
- GEDIT_TAB_STATE_GENERIC_NOT_EDITABLE,
- GEDIT_TAB_STATE_LOADING_ERROR,
- GEDIT_TAB_STATE_REVERTING_ERROR,
- GEDIT_TAB_STATE_SAVING_ERROR,
- GEDIT_TAB_STATE_GENERIC_ERROR,
- GEDIT_TAB_STATE_CLOSING,
- GEDIT_TAB_STATE_EXTERNALLY_MODIFIED_NOTIFICATION,
- GEDIT_TAB_NUM_OF_STATES /* This is not a valid state */
-} GeditTabState;
-
-/*
- * Type checking and casting macros
- */
-#define GEDIT_TYPE_TAB (gedit_tab_get_type())
-#define GEDIT_TAB(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GEDIT_TYPE_TAB, GeditTab))
-#define GEDIT_TAB_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GEDIT_TYPE_TAB, GeditTabClass))
-#define GEDIT_IS_TAB(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GEDIT_TYPE_TAB))
-#define GEDIT_IS_TAB_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEDIT_TYPE_TAB))
-#define GEDIT_TAB_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GEDIT_TYPE_TAB, GeditTabClass))
-
-/* Private structure type */
-typedef struct _GeditTabPrivate GeditTabPrivate;
-
-/*
- * Main object structure
- */
-typedef struct _GeditTab GeditTab;
-
-struct _GeditTab
-{
- GtkVBox vbox;
-
- /*< private > */
- GeditTabPrivate *priv;
-};
-
-/*
- * Class definition
- */
-typedef struct _GeditTabClass GeditTabClass;
-
-struct _GeditTabClass
-{
- GtkVBoxClass parent_class;
-};
-
-/*
- * Public methods
- */
-GType gedit_tab_get_type (void) G_GNUC_CONST;
-
-GeditView *gedit_tab_get_view (GeditTab *tab);
-
-/* This is only an helper function */
-GeditDocument *gedit_tab_get_document (GeditTab *tab);
-
-GeditTab *gedit_tab_get_from_document (GeditDocument *doc);
-
-GeditTabState gedit_tab_get_state (GeditTab *tab);
-
-gboolean gedit_tab_get_auto_save_enabled
- (GeditTab *tab);
-
-void gedit_tab_set_auto_save_enabled
- (GeditTab *tab,
- gboolean enable);
-
-gint gedit_tab_get_auto_save_interval
- (GeditTab *tab);
-
-void gedit_tab_set_auto_save_interval
- (GeditTab *tab,
- gint interval);
-
-void gedit_tab_set_info_bar (GeditTab *tab,
- GtkWidget *info_bar);
-/*
- * Non exported methods
- */
-GtkWidget *_gedit_tab_new (void);
-
-/* Whether create is TRUE, creates a new empty document if location does
- not refer to an existing file */
-GtkWidget *_gedit_tab_new_from_uri (const gchar *uri,
- const GeditEncoding *encoding,
- gint line_pos,
- gboolean create);
-gchar *_gedit_tab_get_name (GeditTab *tab);
-gchar *_gedit_tab_get_tooltips (GeditTab *tab);
-GdkPixbuf *_gedit_tab_get_icon (GeditTab *tab);
-void _gedit_tab_load (GeditTab *tab,
- const gchar *uri,
- const GeditEncoding *encoding,
- gint line_pos,
- gboolean create);
-void _gedit_tab_revert (GeditTab *tab);
-void _gedit_tab_save (GeditTab *tab);
-void _gedit_tab_save_as (GeditTab *tab,
- const gchar *uri,
- const GeditEncoding *encoding,
- GeditDocumentNewlineType newline_type);
-
-void _gedit_tab_print (GeditTab *tab);
-void _gedit_tab_print_preview (GeditTab *tab);
-
-void _gedit_tab_mark_for_closing (GeditTab *tab);
-
-gboolean _gedit_tab_can_close (GeditTab *tab);
-
-#if !GTK_CHECK_VERSION (2, 17, 4)
-void _gedit_tab_page_setup (GeditTab *tab);
-#endif
-
-G_END_DECLS
-
-#endif /* __GEDIT_TAB_H__ */
diff --git a/gedit/gedit-ui.h b/gedit/gedit-ui.h
deleted file mode 100755
index 8a536251..00000000
--- a/gedit/gedit-ui.h
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
- * gedit-ui.h
- * This file is part of gedit
- *
- * Copyright (C) 2005 - Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifndef __GEDIT_UI_H__
-#define __GEDIT_UI_H__
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <gtk/gtk.h>
-
-#include "gedit-commands.h"
-
-G_BEGIN_DECLS
-
-static const GtkActionEntry gedit_always_sensitive_menu_entries[] =
-{
- /* Toplevel */
- { "File", NULL, N_("_File") },
- { "Edit", NULL, N_("_Edit") },
- { "View", NULL, N_("_View") },
- { "Search", NULL, N_("_Search") },
- { "Tools", NULL, N_("_Tools") },
- { "Documents", NULL, N_("_Documents") },
- { "Help", NULL, N_("_Help") },
-
- /* File menu */
- { "FileNew", GTK_STOCK_NEW, NULL, "<control>N",
- N_("Create a new document"), G_CALLBACK (_gedit_cmd_file_new) },
- { "FileOpen", GTK_STOCK_OPEN, N_("_Open..."), "<control>O",
- N_("Open a file"), G_CALLBACK (_gedit_cmd_file_open) },
-
- /* Edit menu */
- { "EditPreferences", GTK_STOCK_PREFERENCES, N_("Pr_eferences"), NULL,
- N_("Configure the application"), G_CALLBACK (_gedit_cmd_edit_preferences) },
-
- /* Help menu */
- {"HelpContents", GTK_STOCK_HELP, N_("_Contents"), "F1",
- N_("Open the gedit manual"), G_CALLBACK (_gedit_cmd_help_contents) },
- { "HelpAbout", GTK_STOCK_ABOUT, NULL, NULL,
- N_("About this application"), G_CALLBACK (_gedit_cmd_help_about) },
-
- /* Fullscreen toolbar */
- { "LeaveFullscreen", GTK_STOCK_LEAVE_FULLSCREEN, NULL,
- NULL, N_("Leave fullscreen mode"),
- G_CALLBACK (_gedit_cmd_view_leave_fullscreen_mode) }
-};
-
-static const GtkActionEntry gedit_menu_entries[] =
-{
- /* File menu */
- { "FileSave", GTK_STOCK_SAVE, NULL, "<control>S",
- N_("Save the current file"), G_CALLBACK (_gedit_cmd_file_save) },
- { "FileSaveAs", GTK_STOCK_SAVE_AS, N_("Save _As..."), "<shift><control>S",
- N_("Save the current file with a different name"), G_CALLBACK (_gedit_cmd_file_save_as) },
- { "FileRevert", GTK_STOCK_REVERT_TO_SAVED, NULL, NULL,
- N_("Revert to a saved version of the file"), G_CALLBACK (_gedit_cmd_file_revert) },
-#if !GTK_CHECK_VERSION (2, 17, 4)
- { "FilePageSetup", GTK_STOCK_PAGE_SETUP, N_("Page Set_up..."), NULL,
- N_("Set up the page settings"), G_CALLBACK (_gedit_cmd_file_page_setup) },
-#endif
- { "FilePrintPreview", GTK_STOCK_PRINT_PREVIEW, N_("Print Previe_w"),"<control><shift>P",
- N_("Print preview"), G_CALLBACK (_gedit_cmd_file_print_preview) },
- { "FilePrint", GTK_STOCK_PRINT, N_("_Print..."), "<control>P",
- N_("Print the current page"), G_CALLBACK (_gedit_cmd_file_print) },
-
- /* Edit menu */
- { "EditUndo", GTK_STOCK_UNDO, NULL, "<control>Z",
- N_("Undo the last action"), G_CALLBACK (_gedit_cmd_edit_undo) },
- { "EditRedo", GTK_STOCK_REDO, NULL, "<shift><control>Z",
- N_("Redo the last undone action"), G_CALLBACK (_gedit_cmd_edit_redo) },
- { "EditCut", GTK_STOCK_CUT, NULL, "<control>X",
- N_("Cut the selection"), G_CALLBACK (_gedit_cmd_edit_cut) },
- { "EditCopy", GTK_STOCK_COPY, NULL, "<control>C",
- N_("Copy the selection"), G_CALLBACK (_gedit_cmd_edit_copy) },
- { "EditPaste", GTK_STOCK_PASTE, NULL, "<control>V",
- N_("Paste the clipboard"), G_CALLBACK (_gedit_cmd_edit_paste) },
- { "EditDelete", GTK_STOCK_DELETE, NULL, NULL,
- N_("Delete the selected text"), G_CALLBACK (_gedit_cmd_edit_delete) },
- { "EditSelectAll", GTK_STOCK_SELECT_ALL, N_("Select _All"), "<control>A",
- N_("Select the entire document"), G_CALLBACK (_gedit_cmd_edit_select_all) },
-
- /* View menu */
- { "ViewHighlightMode", NULL, N_("_Highlight Mode") },
-
- /* Search menu */
- { "SearchFind", GTK_STOCK_FIND, N_("_Find..."), "<control>F",
- N_("Search for text"), G_CALLBACK (_gedit_cmd_search_find) },
- { "SearchFindNext", NULL, N_("Find Ne_xt"), "<control>G",
- N_("Search forwards for the same text"), G_CALLBACK (_gedit_cmd_search_find_next) },
- { "SearchFindPrevious", NULL, N_("Find Pre_vious"), "<shift><control>G",
- N_("Search backwards for the same text"), G_CALLBACK (_gedit_cmd_search_find_prev) },
-#ifndef OS_OSX
- { "SearchReplace", GTK_STOCK_FIND_AND_REPLACE, N_("_Replace..."), "<control>H",
- N_("Search for and replace text"), G_CALLBACK (_gedit_cmd_search_replace) },
-#else
- { "SearchReplace", GTK_STOCK_FIND_AND_REPLACE, N_("_Replace..."), "<control><alt>F",
- N_("Search for and replace text"), G_CALLBACK (_gedit_cmd_search_replace) },
-#endif
- { "SearchClearHighlight", NULL, N_("_Clear Highlight"), "<shift><control>K",
- N_("Clear highlighting of search matches"), G_CALLBACK (_gedit_cmd_search_clear_highlight) },
- { "SearchGoToLine", GTK_STOCK_JUMP_TO, N_("Go to _Line..."), "<control>I",
- N_("Go to a specific line"), G_CALLBACK (_gedit_cmd_search_goto_line) },
- { "SearchIncrementalSearch", GTK_STOCK_FIND, N_("_Incremental Search..."), "<control>K",
- N_("Incrementally search for text"), G_CALLBACK (_gedit_cmd_search_incremental_search) },
-
- /* Documents menu */
- { "FileSaveAll", GTK_STOCK_SAVE, N_("_Save All"), "<shift><control>L",
- N_("Save all open files"), G_CALLBACK (_gedit_cmd_file_save_all) },
- { "FileCloseAll", GTK_STOCK_CLOSE, N_("_Close All"), "<shift><control>W",
- N_("Close all open files"), G_CALLBACK (_gedit_cmd_file_close_all) },
- { "DocumentsPreviousDocument", NULL, N_("_Previous Document"), "<alt><control>Page_Up",
- N_("Activate previous document"), G_CALLBACK (_gedit_cmd_documents_previous_document) },
- { "DocumentsNextDocument", NULL, N_("_Next Document"), "<alt><control>Page_Down",
- N_("Activate next document"), G_CALLBACK (_gedit_cmd_documents_next_document) },
- { "DocumentsMoveToNewWindow", NULL, N_("_Move to New Window"), NULL,
- N_("Move the current document to a new window"), G_CALLBACK (_gedit_cmd_documents_move_to_new_window) }
-};
-
-/* separate group, needs to be sensitive on OS X even when there are no tabs */
-static const GtkActionEntry gedit_close_menu_entries[] =
-{
- { "FileClose", GTK_STOCK_CLOSE, NULL, "<control>W",
- N_("Close the current file"), G_CALLBACK (_gedit_cmd_file_close) }
-};
-
-/* separate group, should be sensitive even when there are no tabs */
-static const GtkActionEntry gedit_quit_menu_entries[] =
-{
- { "FileQuit", GTK_STOCK_QUIT, NULL, "<control>Q",
- N_("Quit the program"), G_CALLBACK (_gedit_cmd_file_quit) }
-};
-
-static const GtkToggleActionEntry gedit_always_sensitive_toggle_menu_entries[] =
-{
- { "ViewToolbar", NULL, N_("_Toolbar"), NULL,
- N_("Show or hide the toolbar in the current window"),
- G_CALLBACK (_gedit_cmd_view_show_toolbar), TRUE },
- { "ViewStatusbar", NULL, N_("_Statusbar"), NULL,
- N_("Show or hide the statusbar in the current window"),
- G_CALLBACK (_gedit_cmd_view_show_statusbar), TRUE },
- { "ViewFullscreen", GTK_STOCK_FULLSCREEN, NULL, "F11",
- N_("Edit text in fullscreen"),
- G_CALLBACK (_gedit_cmd_view_toggle_fullscreen_mode), FALSE }
-};
-
-/* separate group, should be always sensitive except when there are no panes */
-static const GtkToggleActionEntry gedit_panes_toggle_menu_entries[] =
-{
- { "ViewSidePane", NULL, N_("Side _Pane"), "F9",
- N_("Show or hide the side pane in the current window"),
- G_CALLBACK (_gedit_cmd_view_show_side_pane), FALSE },
- { "ViewBottomPane", NULL, N_("_Bottom Pane"), "<control>F9",
- N_("Show or hide the bottom pane in the current window"),
- G_CALLBACK (_gedit_cmd_view_show_bottom_pane), FALSE }
-};
-
-G_END_DECLS
-
-#endif /* __GEDIT_UI_H__ */
diff --git a/gedit/gedit-ui.xml b/gedit/gedit-ui.xml
deleted file mode 100755
index 21c31a72..00000000
--- a/gedit/gedit-ui.xml
+++ /dev/null
@@ -1,203 +0,0 @@
-<!--
- * gedit-ui.xml
- * This file is part of gedit
- *
- * Copyright (C) 2005 - Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Modified by the gedit Team, 2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
--->
-
-<ui>
-
- <menubar name="MenuBar">
- <menu name="FileMenu" action="File">
- <menuitem name="FileNewMenu" action="FileNew"/>
- <placeholder name="FileOps_1"/>
- <menuitem name="FileOpenMenu" action="FileOpen"/>
- <placeholder name="FileOps_2"/>
- <separator/>
- <menuitem name="FileSaveMenu" action="FileSave"/>
- <menuitem name="FileSaveAsMenu" action="FileSaveAs"/>
- <placeholder name="FileOps_3"/>
- <menuitem name="FileRevertMenu" action="FileRevert"/>
- <placeholder name="FileOps_4"/>
- <separator/>
- <placeholder name="FileOps_5"/>
- <menuitem name="FilePrintPreviewMenu" action="FilePrintPreview"/>
- <menuitem name="FilePrintMenu" action="FilePrint"/>
- <placeholder name="FileRecentsPlaceholder">
- <separator/>
- </placeholder>
- <separator/>
- <menuitem name="FileCloseMenu" action="FileClose"/>
- <menuitem name="FileQuitMenu" action="FileQuit"/>
- </menu>
-
- <menu name="EditMenu" action="Edit">
- <menuitem name="EditUndoMenu" action="EditUndo"/>
- <menuitem name="EditRedoMenu" action="EditRedo"/>
- <separator/>
- <menuitem name="EditCutMenu" action="EditCut"/>
- <menuitem name="EditCopyMenu" action="EditCopy"/>
- <menuitem name="EditPasteMenu" action="EditPaste"/>
- <menuitem name="EditDeleteMenu" action="EditDelete"/>
- <placeholder name="EditOps_1" />
- <separator/>
- <placeholder name="EditOps_2" />
- <menuitem name="EditSelectAllMenu" action="EditSelectAll"/>
- <placeholder name="EditOps_3" />
- <separator/>
- <placeholder name="EditOps_4" />
- <separator/>
- <placeholder name="EditOps_5" />
- <separator/>
- <placeholder name="EditOps_6" />
- <separator/>
- <menuitem name="EditPreferencesMenu" action="EditPreferences"/>
- </menu>
-
- <menu name="ViewMenu" action="View">
- <menuitem name="ViewToolbarMenu" action="ViewToolbar"/>
- <menuitem name="ViewStatusbarMenu" action="ViewStatusbar"/>
- <menuitem name="ViewSidePaneMenu" action="ViewSidePane"/>
- <menuitem name="ViewBottomPaneMenu" action="ViewBottomPane"/>
- <separator/>
- <menuitem name="ViewFullscreenMenu" action="ViewFullscreen"/>
- <separator/>
- <menu name="ViewHighlightModeMenu" action="ViewHighlightMode">
- <placeholder name="LanguagesMenuPlaceholder">
- </placeholder>
- </menu>
- </menu>
-
- <menu name="SearchMenu" action="Search">
- <menuitem name="SearchFindMenu" action="SearchFind"/>
- <menuitem name="SearchFindNextMenu" action="SearchFindNext"/>
- <menuitem name="SearchFindPreviousMenu" action="SearchFindPrevious"/>
- <menuitem name="SearchIncrementalSearchMenu" action="SearchIncrementalSearch"/>
- <placeholder name="SearchOps_1" />
- <separator/>
- <placeholder name="SearchOps_2" />
- <separator/>
- <menuitem name="SearchReplaceMenu" action="SearchReplace"/>
- <placeholder name="SearchOps_3" />
- <separator/>
- <placeholder name="SearchOps_4" />
- <separator/>
- <menuitem name="SearchClearHighlight" action="SearchClearHighlight"/>
- <placeholder name="SearchOps_5" />
- <separator/>
- <placeholder name="SearchOps_6" />
- <separator/>
- <menuitem name="SearchGoToLineMenu" action="SearchGoToLine"/>
- <placeholder name="SearchOps_7" />
- <separator/>
- <placeholder name="SearchOps_8" />
- </menu>
-
- <menu name="ToolsMenu" action="Tools">
- <placeholder name="ToolsOps_1" />
- <separator/>
- <placeholder name="ToolsOps_2" />
- <separator/>
- <placeholder name="ToolsOps_3" />
- <separator/>
- <placeholder name="ToolsOps_4" />
- <separator/>
- <placeholder name="ToolsOps_5" />
- </menu>
-
- <placeholder name="ExtraMenu_1" />
-
- <menu name="DocumentsMenu" action="Documents">
- <menuitem action="FileSaveAll" />
- <menuitem action="FileCloseAll" />
- <placeholder name="DocumentsOps_1" />
- <separator/>
- <placeholder name="DocumentsOps_2" />
- <separator/>
- <placeholder name="DocumentsOps_3" />
- <menuitem action="DocumentsPreviousDocument" />
- <menuitem action="DocumentsNextDocument" />
- <separator/>
- <menuitem action="DocumentsMoveToNewWindow"/>
- <placeholder name="DocumentsListPlaceholder">
- <separator/>
- </placeholder>
- </menu>
-
- <menu name="HelpMenu" action="Help">
- <menuitem name="HelpContentsMenu" action="HelpContents"/>
- <menuitem name="HelpAboutMenu" action="HelpAbout"/>
- </menu>
- </menubar>
-
- <toolbar name="ToolBar">
- <toolitem action="FileNew"/>
- <toolitem action="FileSave"/>
- <separator/>
- <toolitem action="FilePrint"/>
- <separator/>
- <toolitem action="EditUndo"/>
- <toolitem action="EditRedo"/>
- <separator/>
- <toolitem action="EditCut"/>
- <toolitem action="EditCopy"/>
- <toolitem action="EditPaste"/>
- <separator/>
- <toolitem action="SearchFind"/>
- <toolitem action="SearchReplace"/>
- </toolbar>
-
- <toolbar name="FullscreenToolBar">
- <toolitem action="FileNew"/>
- <toolitem action="FileSave"/>
- <separator/>
- <toolitem action="FilePrint"/>
- <separator/>
- <toolitem action="EditUndo"/>
- <toolitem action="EditRedo"/>
- <separator/>
- <toolitem action="EditCut"/>
- <toolitem action="EditCopy"/>
- <toolitem action="EditPaste"/>
- <separator/>
- <toolitem action="SearchFind"/>
- <toolitem action="SearchReplace"/>
- <separator expand="true"/>
- <toolitem action="LeaveFullscreen"/>
- </toolbar>
-
- <popup name="NotebookPopup" action="NotebookPopupAction">
- <menuitem action="DocumentsMoveToNewWindow"/>
- <separator/>
- <menuitem action="FileSave"/>
- <menuitem action="FileSaveAs"/>
- <separator/>
- <menuitem action="FilePrint"/>
- <separator/>
- <placeholder name="NotebookPupupOps_1"/>
- <separator/>
- <menuitem name="FileCloseMenu" action="FileClose"/>
- </popup>
-
-</ui>
diff --git a/gedit/gedit-utils.c b/gedit/gedit-utils.c
deleted file mode 100755
index c34b746f..00000000
--- a/gedit/gedit-utils.c
+++ /dev/null
@@ -1,1546 +0,0 @@
-/*
- * gedit-utils.c
- * This file is part of gedit
- *
- * Copyright (C) 1998, 1999 Alex Roberts, Evan Lawrence
- * Copyright (C) 2000, 2002 Chema Celorio, Paolo Maggi
- * Copyright (C) 2003-2005 Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 1998-2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/time.h>
-#include <fcntl.h>
-#include <string.h>
-
-#include <glib.h>
-#include <glib/gi18n.h>
-#include <gio/gio.h>
-
-#include "gedit-utils.h"
-
-#include "gedit-document.h"
-#include "gedit-prefs-manager.h"
-#include "gedit-debug.h"
-
-/* For the workspace/viewport stuff */
-#ifdef GDK_WINDOWING_X11
-#include <gdk/gdkx.h>
-#include <X11/Xlib.h>
-#include <X11/Xutil.h>
-#include <X11/Xatom.h>
-#endif
-
-#define STDIN_DELAY_MICROSECONDS 100000
-
-/* Returns true if uri is a file: uri and is not a chained uri */
-gboolean
-gedit_utils_uri_has_file_scheme (const gchar *uri)
-{
- GFile *gfile;
- gboolean res;
-
- gfile = g_file_new_for_uri (uri);
- res = g_file_has_uri_scheme (gfile, "file");
-
- g_object_unref (gfile);
- return res;
-}
-
-/* FIXME: we should check for chained URIs */
-gboolean
-gedit_utils_uri_has_writable_scheme (const gchar *uri)
-{
- GFile *gfile;
- gchar *scheme;
- GSList *writable_schemes;
- gboolean res;
-
- gfile = g_file_new_for_uri (uri);
- scheme = g_file_get_uri_scheme (gfile);
-
- g_return_val_if_fail (scheme != NULL, FALSE);
-
- g_object_unref (gfile);
-
- writable_schemes = gedit_prefs_manager_get_writable_vfs_schemes ();
-
- /* CHECK: should we use g_ascii_strcasecmp? - Paolo (Nov 6, 2005) */
- res = (g_slist_find_custom (writable_schemes,
- scheme,
- (GCompareFunc)strcmp) != NULL);
-
- g_slist_foreach (writable_schemes, (GFunc)g_free, NULL);
- g_slist_free (writable_schemes);
-
- g_free (scheme);
-
- return res;
-}
-
-static void
-widget_get_origin (GtkWidget *widget, gint *x, gint *y)
-
-{
- GdkWindow *window;
-
- window = gtk_widget_get_window (widget);
- gdk_window_get_origin (window, x, y);
-}
-
-void
-gedit_utils_menu_position_under_widget (GtkMenu *menu,
- gint *x,
- gint *y,
- gboolean *push_in,
- gpointer user_data)
-{
- GtkWidget *widget;
- GtkRequisition requisition;
-
- widget = GTK_WIDGET (user_data);
- widget_get_origin (widget, x, y);
-
- gtk_widget_size_request (GTK_WIDGET (menu), &requisition);
-
- if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL)
- {
- *x += widget->allocation.x + widget->allocation.width - requisition.width;
- }
- else
- {
- *x += widget->allocation.x;
- }
-
- *y += widget->allocation.y + widget->allocation.height;
-
- *push_in = TRUE;
-}
-
-void
-gedit_utils_menu_position_under_tree_view (GtkMenu *menu,
- gint *x,
- gint *y,
- gboolean *push_in,
- gpointer user_data)
-{
- GtkTreeView *tree = GTK_TREE_VIEW (user_data);
- GtkTreeModel *model;
- GtkTreeSelection *selection;
- GtkTreeIter iter;
-
- model = gtk_tree_view_get_model (tree);
- g_return_if_fail (model != NULL);
-
- selection = gtk_tree_view_get_selection (tree);
- g_return_if_fail (selection != NULL);
-
- if (gtk_tree_selection_get_selected (selection, NULL, &iter))
- {
- GtkTreePath *path;
- GdkRectangle rect;
-
- widget_get_origin (GTK_WIDGET (tree), x, y);
-
- path = gtk_tree_model_get_path (model, &iter);
- gtk_tree_view_get_cell_area (tree, path,
- gtk_tree_view_get_column (tree, 0), /* FIXME 0 for RTL ? */
- &rect);
- gtk_tree_path_free (path);
-
- *x += rect.x;
- *y += rect.y + rect.height;
-
- if (gtk_widget_get_direction (GTK_WIDGET (tree)) == GTK_TEXT_DIR_RTL)
- {
- GtkRequisition requisition;
- gtk_widget_size_request (GTK_WIDGET (menu), &requisition);
- *x += rect.width - requisition.width;
- }
- }
- else
- {
- /* no selection -> regular "under widget" positioning */
- gedit_utils_menu_position_under_widget (menu,
- x, y, push_in,
- tree);
- }
-}
-
-/* FIXME: remove this with gtk 2.12, it has gdk_color_to_string */
-gchar *
-gedit_gdk_color_to_string (GdkColor color)
-{
- return g_strdup_printf ("#%04x%04x%04x",
- color.red,
- color.green,
- color.blue);
-}
-
-GtkWidget *
-gedit_gtk_button_new_with_stock_icon (const gchar *label,
- const gchar *stock_id)
-{
- GtkWidget *button;
-
- button = gtk_button_new_with_mnemonic (label);
- gtk_button_set_image (GTK_BUTTON (button),
- gtk_image_new_from_stock (stock_id,
- GTK_ICON_SIZE_BUTTON));
-
- return button;
-}
-
-GtkWidget *
-gedit_dialog_add_button (GtkDialog *dialog,
- const gchar *text,
- const gchar *stock_id,
- gint response_id)
-{
- GtkWidget *button;
-
- g_return_val_if_fail (GTK_IS_DIALOG (dialog), NULL);
- g_return_val_if_fail (text != NULL, NULL);
- g_return_val_if_fail (stock_id != NULL, NULL);
-
- button = gedit_gtk_button_new_with_stock_icon (text, stock_id);
- g_return_val_if_fail (button != NULL, NULL);
-
- GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
-
- gtk_widget_show (button);
-
- gtk_dialog_add_action_widget (dialog, button, response_id);
-
- return button;
-}
-
-/*
- * n: len of the string in bytes
- */
-gboolean
-g_utf8_caselessnmatch (const char *s1, const char *s2, gssize n1, gssize n2)
-{
- gchar *casefold;
- gchar *normalized_s1;
- gchar *normalized_s2;
- gint len_s1;
- gint len_s2;
- gboolean ret = FALSE;
-
- g_return_val_if_fail (s1 != NULL, FALSE);
- g_return_val_if_fail (s2 != NULL, FALSE);
- g_return_val_if_fail (n1 > 0, FALSE);
- g_return_val_if_fail (n2 > 0, FALSE);
-
- casefold = g_utf8_casefold (s1, n1);
- normalized_s1 = g_utf8_normalize (casefold, -1, G_NORMALIZE_NFD);
- g_free (casefold);
-
- casefold = g_utf8_casefold (s2, n2);
- normalized_s2 = g_utf8_normalize (casefold, -1, G_NORMALIZE_NFD);
- g_free (casefold);
-
- len_s1 = strlen (normalized_s1);
- len_s2 = strlen (normalized_s2);
-
- if (len_s1 < len_s2)
- goto finally_2;
-
- ret = (strncmp (normalized_s1, normalized_s2, len_s2) == 0);
-
-finally_2:
- g_free (normalized_s1);
- g_free (normalized_s2);
-
- return ret;
-}
-
-/**
- * gedit_utils_set_atk_name_description
- * @widget : The Gtk widget for which name/description to be set
- * @name : Atk name string
- * @description : Atk description string
- * Description : This function sets up name and description
- * for a specified gtk widget.
- */
-void
-gedit_utils_set_atk_name_description (GtkWidget *widget,
- const gchar *name,
- const gchar *description)
-{
- AtkObject *aobj;
-
- aobj = gtk_widget_get_accessible (widget);
-
- if (!(GTK_IS_ACCESSIBLE (aobj)))
- return;
-
- if(name)
- atk_object_set_name (aobj, name);
-
- if(description)
- atk_object_set_description (aobj, description);
-}
-
-/**
- * gedit_set_atk__relation
- * @obj1,@obj2 : specified widgets.
- * @rel_type : the type of relation to set up.
- * Description : This function establishes atk relation
- * between 2 specified widgets.
- */
-void
-gedit_utils_set_atk_relation (GtkWidget *obj1,
- GtkWidget *obj2,
- AtkRelationType rel_type )
-{
- AtkObject *atk_obj1, *atk_obj2;
- AtkRelationSet *relation_set;
- AtkObject *targets[1];
- AtkRelation *relation;
-
- atk_obj1 = gtk_widget_get_accessible (obj1);
- atk_obj2 = gtk_widget_get_accessible (obj2);
-
- if (!(GTK_IS_ACCESSIBLE (atk_obj1)) || !(GTK_IS_ACCESSIBLE (atk_obj2)))
- return;
-
- relation_set = atk_object_ref_relation_set (atk_obj1);
- targets[0] = atk_obj2;
-
- relation = atk_relation_new (targets, 1, rel_type);
- atk_relation_set_add (relation_set, relation);
-
- g_object_unref (G_OBJECT (relation));
-}
-
-gboolean
-gedit_utils_uri_exists (const gchar* text_uri)
-{
- GFile *gfile;
- gboolean res;
-
- g_return_val_if_fail (text_uri != NULL, FALSE);
-
- gedit_debug_message (DEBUG_UTILS, "text_uri: %s", text_uri);
-
- gfile = g_file_new_for_uri (text_uri);
- res = g_file_query_exists (gfile, NULL);
-
- g_object_unref (gfile);
-
- gedit_debug_message (DEBUG_UTILS, res ? "TRUE" : "FALSE");
-
- return res;
-}
-
-gchar *
-gedit_utils_escape_search_text (const gchar* text)
-{
- GString *str;
- gint length;
- const gchar *p;
- const gchar *end;
-
- if (text == NULL)
- return NULL;
-
- gedit_debug_message (DEBUG_SEARCH, "Text: %s", text);
-
- length = strlen (text);
-
- /* no escape when typing.
- * The short circuit works only for ascii, but we only
- * care about not escaping a single '\' */
- if (length == 1)
- return g_strdup (text);
-
- str = g_string_new ("");
-
- p = text;
- end = text + length;
-
- while (p != end)
- {
- const gchar *next;
- next = g_utf8_next_char (p);
-
- switch (*p)
- {
- case '\n':
- g_string_append (str, "\\n");
- break;
- case '\r':
- g_string_append (str, "\\r");
- break;
- case '\t':
- g_string_append (str, "\\t");
- break;
- case '\\':
- g_string_append (str, "\\\\");
- break;
- default:
- g_string_append_len (str, p, next - p);
- break;
- }
-
- p = next;
- }
-
- return g_string_free (str, FALSE);
-}
-
-gchar *
-gedit_utils_unescape_search_text (const gchar *text)
-{
- GString *str;
- gint length;
- gboolean drop_prev = FALSE;
- const gchar *cur;
- const gchar *end;
- const gchar *prev;
-
- if (text == NULL)
- return NULL;
-
- length = strlen (text);
-
- str = g_string_new ("");
-
- cur = text;
- end = text + length;
- prev = NULL;
-
- while (cur != end)
- {
- const gchar *next;
- next = g_utf8_next_char (cur);
-
- if (prev && (*prev == '\\'))
- {
- switch (*cur)
- {
- case 'n':
- str = g_string_append (str, "\n");
- break;
- case 'r':
- str = g_string_append (str, "\r");
- break;
- case 't':
- str = g_string_append (str, "\t");
- break;
- case '\\':
- str = g_string_append (str, "\\");
- drop_prev = TRUE;
- break;
- default:
- str = g_string_append (str, "\\");
- str = g_string_append_len (str, cur, next - cur);
- break;
- }
- }
- else if (*cur != '\\')
- {
- str = g_string_append_len (str, cur, next - cur);
- }
- else if ((next == end) && (*cur == '\\'))
- {
- str = g_string_append (str, "\\");
- }
-
- if (!drop_prev)
- {
- prev = cur;
- }
- else
- {
- prev = NULL;
- drop_prev = FALSE;
- }
-
- cur = next;
- }
-
- return g_string_free (str, FALSE);
-}
-
-void
-gedit_warning (GtkWindow *parent, const gchar *format, ...)
-{
- va_list args;
- gchar *str;
- GtkWidget *dialog;
- GtkWindowGroup *wg = NULL;
-
- g_return_if_fail (format != NULL);
-
- if (parent != NULL)
- wg = gtk_window_get_group (parent);
-
- va_start (args, format);
- str = g_strdup_vprintf (format, args);
- va_end (args);
-
- dialog = gtk_message_dialog_new_with_markup (
- parent,
- GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_MESSAGE_ERROR,
- GTK_BUTTONS_OK,
- "%s", str);
-
- g_free (str);
-
- if (wg != NULL)
- gtk_window_group_add_window (wg, GTK_WINDOW (dialog));
-
- gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK);
-
- gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE);
-
- g_signal_connect (G_OBJECT (dialog),
- "response",
- G_CALLBACK (gtk_widget_destroy),
- NULL);
-
- gtk_widget_show (dialog);
-}
-
-/*
- * Doubles underscore to avoid spurious menu accels.
- */
-gchar *
-gedit_utils_escape_underscores (const gchar* text,
- gssize length)
-{
- GString *str;
- const gchar *p;
- const gchar *end;
-
- g_return_val_if_fail (text != NULL, NULL);
-
- if (length < 0)
- length = strlen (text);
-
- str = g_string_sized_new (length);
-
- p = text;
- end = text + length;
-
- while (p != end)
- {
- const gchar *next;
- next = g_utf8_next_char (p);
-
- switch (*p)
- {
- case '_':
- g_string_append (str, "__");
- break;
- default:
- g_string_append_len (str, p, next - p);
- break;
- }
-
- p = next;
- }
-
- return g_string_free (str, FALSE);
-}
-
-/* the following functions are taken from eel */
-
-static gchar *
-gedit_utils_str_truncate (const gchar *string,
- guint truncate_length,
- gboolean middle)
-{
- GString *truncated;
- guint length;
- guint n_chars;
- guint num_left_chars;
- guint right_offset;
- guint delimiter_length;
- const gchar *delimiter = "\342\200\246";
-
- g_return_val_if_fail (string != NULL, NULL);
-
- length = strlen (string);
-
- g_return_val_if_fail (g_utf8_validate (string, length, NULL), NULL);
-
- /* It doesnt make sense to truncate strings to less than
- * the size of the delimiter plus 2 characters (one on each
- * side)
- */
- delimiter_length = g_utf8_strlen (delimiter, -1);
- if (truncate_length < (delimiter_length + 2)) {
- return g_strdup (string);
- }
-
- n_chars = g_utf8_strlen (string, length);
-
- /* Make sure the string is not already small enough. */
- if (n_chars <= truncate_length) {
- return g_strdup (string);
- }
-
- /* Find the 'middle' where the truncation will occur. */
- if (middle)
- {
- num_left_chars = (truncate_length - delimiter_length) / 2;
- right_offset = n_chars - truncate_length + num_left_chars + delimiter_length;
-
- truncated = g_string_new_len (string,
- g_utf8_offset_to_pointer (string, num_left_chars) - string);
- g_string_append (truncated, delimiter);
- g_string_append (truncated, g_utf8_offset_to_pointer (string, right_offset));
- }
- else
- {
- num_left_chars = truncate_length - delimiter_length;
- truncated = g_string_new_len (string,
- g_utf8_offset_to_pointer (string, num_left_chars) - string);
- g_string_append (truncated, delimiter);
- }
-
- return g_string_free (truncated, FALSE);
-}
-
-gchar *
-gedit_utils_str_middle_truncate (const gchar *string,
- guint truncate_length)
-{
- return gedit_utils_str_truncate (string, truncate_length, TRUE);
-}
-
-gchar *
-gedit_utils_str_end_truncate (const gchar *string,
- guint truncate_length)
-{
- return gedit_utils_str_truncate (string, truncate_length, FALSE);
-}
-
-gchar *
-gedit_utils_make_valid_utf8 (const char *name)
-{
- GString *string;
- const char *remainder, *invalid;
- int remaining_bytes, valid_bytes;
-
- g_return_val_if_fail (name != NULL, NULL);
-
- string = NULL;
- remainder = name;
- remaining_bytes = strlen (name);
-
- while (remaining_bytes != 0) {
- if (g_utf8_validate (remainder, remaining_bytes, &invalid)) {
- break;
- }
- valid_bytes = invalid - remainder;
-
- if (string == NULL) {
- string = g_string_sized_new (remaining_bytes);
- }
- g_string_append_len (string, remainder, valid_bytes);
- /* append U+FFFD REPLACEMENT CHARACTER */
- g_string_append (string, "\357\277\275");
-
- remaining_bytes -= valid_bytes + 1;
- remainder = invalid + 1;
- }
-
- if (string == NULL) {
- return g_strdup (name);
- }
-
- g_string_append (string, remainder);
-
- g_assert (g_utf8_validate (string->str, -1, NULL));
-
- return g_string_free (string, FALSE);
-}
-
-/* Note that this function replace home dir with ~ */
-gchar *
-gedit_utils_uri_get_dirname (const gchar *uri)
-{
- gchar *res;
- gchar *str;
-
- g_return_val_if_fail (uri != NULL, NULL);
-
- /* CHECK: does it work with uri chaining? - Paolo */
- str = g_path_get_dirname (uri);
- g_return_val_if_fail (str != NULL, g_strdup ("."));
-
- if ((strlen (str) == 1) && (*str == '.'))
- {
- g_free (str);
-
- return NULL;
- }
-
- res = gedit_utils_replace_home_dir_with_tilde (str);
-
- g_free (str);
-
- return res;
-}
-
-/**
- * gedit_utils_location_get_dirname_for_display
- * @file: the location
- *
- * Returns a string suitable to be displayed in the UI indicating
- * the name of the directory where the file is located.
- * For remote files it may also contain the hostname etc.
- * For local files it tries to replace the home dir with ~.
- *
- * Returns: a string to display the dirname
- */
-gchar *
-gedit_utils_location_get_dirname_for_display (GFile *location)
-{
- gchar *uri;
- gchar *res;
- GMount *mount;
-
- g_return_val_if_fail (location != NULL, NULL);
-
- /* we use the parse name, that is either the local path
- * or an uri but which is utf8 safe */
- uri = g_file_get_parse_name (location);
-
- /* FIXME: this is sync... is it a problem? */
- mount = g_file_find_enclosing_mount (location, NULL, NULL);
- if (mount != NULL)
- {
- gchar *mount_name;
- gchar *path;
-
- mount_name = g_mount_get_name (mount);
- g_object_unref (mount);
-
- /* obtain the "path" patrt of the uri */
- if (gedit_utils_decode_uri (uri,
- NULL, NULL,
- NULL, NULL,
- &path))
- {
- gchar *dirname;
-
- dirname = gedit_utils_uri_get_dirname (path);
- res = g_strdup_printf ("%s %s", mount_name, dirname);
-
- g_free (path);
- g_free (dirname);
- g_free (mount_name);
- }
- else
- {
- res = mount_name;
- }
- }
- else
- {
- /* fallback for local files or uris without mounts */
- res = gedit_utils_uri_get_dirname (uri);
- }
-
- g_free (uri);
-
- return res;
-}
-
-gchar *
-gedit_utils_replace_home_dir_with_tilde (const gchar *uri)
-{
- gchar *tmp;
- gchar *home;
-
- g_return_val_if_fail (uri != NULL, NULL);
-
- /* Note that g_get_home_dir returns a const string */
- tmp = (gchar *)g_get_home_dir ();
-
- if (tmp == NULL)
- return g_strdup (uri);
-
- home = g_filename_to_utf8 (tmp, -1, NULL, NULL, NULL);
- if (home == NULL)
- return g_strdup (uri);
-
- if (strcmp (uri, home) == 0)
- {
- g_free (home);
-
- return g_strdup ("~");
- }
-
- tmp = home;
- home = g_strdup_printf ("%s/", tmp);
- g_free (tmp);
-
- if (g_str_has_prefix (uri, home))
- {
- gchar *res;
-
- res = g_strdup_printf ("~/%s", uri + strlen (home));
-
- g_free (home);
-
- return res;
- }
-
- g_free (home);
-
- return g_strdup (uri);
-}
-
-/* the following two functions are courtesy of galeon */
-
-/**
- * gedit_utils_get_current_workspace: Get the current workspace
- *
- * Get the currently visible workspace for the #GdkScreen.
- *
- * If the X11 window property isn't found, 0 (the first workspace)
- * is returned.
- */
-guint
-gedit_utils_get_current_workspace (GdkScreen *screen)
-{
-#ifdef GDK_WINDOWING_X11
- GdkWindow *root_win;
- GdkDisplay *display;
- Atom type;
- gint format;
- gulong nitems;
- gulong bytes_after;
- guint *current_desktop;
- gint err, result;
- guint ret = 0;
-
- g_return_val_if_fail (GDK_IS_SCREEN (screen), 0);
-
- root_win = gdk_screen_get_root_window (screen);
- display = gdk_screen_get_display (screen);
-
- gdk_error_trap_push ();
- result = XGetWindowProperty (GDK_DISPLAY_XDISPLAY (display), GDK_WINDOW_XID (root_win),
- gdk_x11_get_xatom_by_name_for_display (display, "_NET_CURRENT_DESKTOP"),
- 0, G_MAXLONG, False, XA_CARDINAL, &type, &format, &nitems,
- &bytes_after, (gpointer) &current_desktop);
- err = gdk_error_trap_pop ();
-
- if (err != Success || result != Success)
- return ret;
-
- if (type == XA_CARDINAL && format == 32 && nitems > 0)
- ret = current_desktop[0];
-
- XFree (current_desktop);
- return ret;
-#else
- /* FIXME: on mac etc proably there are native APIs
- * to get the current workspace etc */
- return 0;
-#endif
-}
-
-/**
- * gedit_utils_get_window_workspace: Get the workspace the window is on
- *
- * This function gets the workspace that the #GtkWindow is visible on,
- * it returns GEDIT_ALL_WORKSPACES if the window is sticky, or if
- * the window manager doesn support this function
- */
-guint
-gedit_utils_get_window_workspace (GtkWindow *gtkwindow)
-{
-#ifdef GDK_WINDOWING_X11
- GdkWindow *window;
- GdkDisplay *display;
- Atom type;
- gint format;
- gulong nitems;
- gulong bytes_after;
- guint *workspace;
- gint err, result;
- guint ret = GEDIT_ALL_WORKSPACES;
-
- g_return_val_if_fail (GTK_IS_WINDOW (gtkwindow), 0);
- g_return_val_if_fail (GTK_WIDGET_REALIZED (GTK_WIDGET (gtkwindow)), 0);
-
- window = gtk_widget_get_window (GTK_WIDGET (gtkwindow));
- display = gdk_drawable_get_display (window);
-
- gdk_error_trap_push ();
- result = XGetWindowProperty (GDK_DISPLAY_XDISPLAY (display), GDK_WINDOW_XID (window),
- gdk_x11_get_xatom_by_name_for_display (display, "_NET_WM_DESKTOP"),
- 0, G_MAXLONG, False, XA_CARDINAL, &type, &format, &nitems,
- &bytes_after, (gpointer) &workspace);
- err = gdk_error_trap_pop ();
-
- if (err != Success || result != Success)
- return ret;
-
- if (type == XA_CARDINAL && format == 32 && nitems > 0)
- ret = workspace[0];
-
- XFree (workspace);
- return ret;
-#else
- /* FIXME: on mac etc proably there are native APIs
- * to get the current workspace etc */
- return 0;
-#endif
-}
-
-/**
- * gedit_utils_get_current_viewport: Get the current viewport origin
- *
- * Get the currently visible viewport origin for the #GdkScreen.
- *
- * If the X11 window property isn't found, (0, 0) is returned.
- */
-void
-gedit_utils_get_current_viewport (GdkScreen *screen,
- gint *x,
- gint *y)
-{
-#ifdef GDK_WINDOWING_X11
- GdkWindow *root_win;
- GdkDisplay *display;
- Atom type;
- gint format;
- gulong nitems;
- gulong bytes_after;
- gulong *coordinates;
- gint err, result;
-
- g_return_if_fail (GDK_IS_SCREEN (screen));
- g_return_if_fail (x != NULL && y != NULL);
-
- /* Default values for the viewport origin */
- *x = 0;
- *y = 0;
-
- root_win = gdk_screen_get_root_window (screen);
- display = gdk_screen_get_display (screen);
-
- gdk_error_trap_push ();
- result = XGetWindowProperty (GDK_DISPLAY_XDISPLAY (display), GDK_WINDOW_XID (root_win),
- gdk_x11_get_xatom_by_name_for_display (display, "_NET_DESKTOP_VIEWPORT"),
- 0, G_MAXLONG, False, XA_CARDINAL, &type, &format, &nitems,
- &bytes_after, (void*) &coordinates);
- err = gdk_error_trap_pop ();
-
- if (err != Success || result != Success)
- return;
-
- if (type != XA_CARDINAL || format != 32 || nitems < 2)
- {
- XFree (coordinates);
- return;
- }
-
- *x = coordinates[0];
- *y = coordinates[1];
- XFree (coordinates);
-#else
- /* FIXME: on mac etc proably there are native APIs
- * to get the current workspace etc */
- *x = 0;
- *y = 0;
-#endif
-}
-
-void
-gedit_utils_activate_url (GtkAboutDialog *about,
- const gchar *url,
- gpointer data)
-{
- gtk_show_uri (gtk_widget_get_screen (GTK_WIDGET (about)), url, GDK_CURRENT_TIME, NULL);
-}
-
-static gboolean
-is_valid_scheme_character (gchar c)
-{
- return g_ascii_isalnum (c) || c == '+' || c == '-' || c == '.';
-}
-
-static gboolean
-has_valid_scheme (const gchar *uri)
-{
- const gchar *p;
-
- p = uri;
-
- if (!is_valid_scheme_character (*p)) {
- return FALSE;
- }
-
- do {
- p++;
- } while (is_valid_scheme_character (*p));
-
- return *p == ':';
-}
-
-gboolean
-gedit_utils_is_valid_uri (const gchar *uri)
-{
- const guchar *p;
-
- if (uri == NULL)
- return FALSE;
-
- if (!has_valid_scheme (uri))
- return FALSE;
-
- /* We expect to have a fully valid set of characters */
- for (p = (const guchar *)uri; *p; p++) {
- if (*p == '%')
- {
- ++p;
- if (!g_ascii_isxdigit (*p))
- return FALSE;
-
- ++p;
- if (!g_ascii_isxdigit (*p))
- return FALSE;
- }
- else
- {
- if (*p <= 32 || *p >= 128)
- return FALSE;
- }
- }
-
- return TRUE;
-}
-
-static GtkWidget *
-handle_builder_error (const gchar *message, ...)
-{
- GtkWidget *label;
- gchar *msg;
- gchar *msg_plain;
- va_list args;
-
- va_start (args, message);
- msg_plain = g_strdup_vprintf (message, args);
- va_end (args);
-
- label = gtk_label_new (NULL);
- gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
-
- msg = g_strconcat ("<span size=\"large\" weight=\"bold\">",
- msg_plain, "</span>\n\n",
- _("Please check your installation."),
- NULL);
-
- gtk_label_set_markup (GTK_LABEL (label), msg);
-
- g_free (msg_plain);
- g_free (msg);
-
- gtk_misc_set_padding (GTK_MISC (label), 5, 5);
-
- return label;
-}
-
-/**
- * gedit_utils_get_ui_objects:
- * @filename: the path to the gtk builder file
- * @root_objects: a NULL terminated list of root objects to load or NULL to
- * load all objects
- * @error_widget: a pointer were a #GtkLabel
- * @object_name: the name of the first object
- * @...: a pointer were the first object is returned, followed by more
- * name / object pairs and terminated by NULL.
- *
- * This function gets the requested objects from a GtkBuilder ui file. In case
- * of error it returns FALSE and sets error_widget to a GtkLabel containing
- * the error message to display.
- *
- * Returns FALSE if an error occurs, TRUE on success.
- */
-gboolean
-gedit_utils_get_ui_objects (const gchar *filename,
- gchar **root_objects,
- GtkWidget **error_widget,
- const gchar *object_name,
- ...)
-{
-
- GtkBuilder *builder;
- va_list args;
- const gchar *name;
- GError *error = NULL;
- gchar *filename_markup;
- gboolean ret = TRUE;
-
- g_return_val_if_fail (filename != NULL, FALSE);
- g_return_val_if_fail (error_widget != NULL, FALSE);
- g_return_val_if_fail (object_name != NULL, FALSE);
-
- filename_markup = g_markup_printf_escaped ("<i>%s</i>", filename);
- *error_widget = NULL;
-
- builder = gtk_builder_new ();
-
- if (root_objects != NULL)
- {
- gtk_builder_add_objects_from_file (builder,
- filename,
- root_objects,
- &error);
- }
- else
- {
- gtk_builder_add_from_file (builder,
- filename,
- &error);
- }
-
- if (error != NULL)
- {
- *error_widget = handle_builder_error (_("Unable to open UI file %s. Error: %s"),
- filename_markup,
- error->message);
- g_error_free (error);
- g_free (filename_markup);
- g_object_unref (builder);
-
- return FALSE;
- }
-
- va_start (args, object_name);
- for (name = object_name; name; name = va_arg (args, const gchar *) )
- {
- GObject **gobj;
-
- gobj = va_arg (args, GObject **);
- *gobj = gtk_builder_get_object (builder, name);
-
- if (!*gobj)
- {
- *error_widget = handle_builder_error (_("Unable to find the object '%s' inside file %s."),
- name,
- filename_markup),
- ret = FALSE;
- break;
- }
-
- /* we return a new ref for the root objects,
- * the others are already reffed by their parent root object */
- if (root_objects != NULL)
- {
- gint i;
-
- for (i = 0; root_objects[i] != NULL; ++i)
- {
- if ((strcmp (name, root_objects[i]) == 0))
- {
- g_object_ref (*gobj);
- }
- }
- }
- }
- va_end (args);
-
- g_free (filename_markup);
- g_object_unref (builder);
-
- return ret;
-}
-
-gchar *
-gedit_utils_make_canonical_uri_from_shell_arg (const gchar *str)
-{
- GFile *gfile;
- gchar *uri;
-
- g_return_val_if_fail (str != NULL, NULL);
- g_return_val_if_fail (*str != '\0', NULL);
-
- /* Note for the future:
- * FIXME: is still still relevant?
- *
- * <federico> paolo: and flame whoever tells
- * you that file:///mate/test_files/hëllò
- * doesn't work --- that's not a valid URI
- *
- * <paolo> federico: well, another solution that
- * does not requires patch to _from_shell_args
- * is to check that the string returned by it
- * contains only ASCII chars
- * <federico> paolo: hmmmm, isn't there
- * mate_vfs_is_uri_valid() or something?
- * <paolo>: I will use gedit_utils_is_valid_uri ()
- *
- */
-
- gfile = g_file_new_for_commandline_arg (str);
- uri = g_file_get_uri (gfile);
- g_object_unref (gfile);
-
- if (gedit_utils_is_valid_uri (uri))
- return uri;
-
- g_free (uri);
- return NULL;
-}
-
-/**
- * gedit_utils_file_has_parent:
- * @gfile: the GFile to check the parent for
- *
- * Return TRUE if the specified gfile has a parent (is not the root), FALSE
- * otherwise
- */
-gboolean
-gedit_utils_file_has_parent (GFile *gfile)
-{
- GFile *parent;
- gboolean ret;
-
- parent = g_file_get_parent (gfile);
- ret = parent != NULL;
-
- if (parent)
- g_object_unref (parent);
-
- return ret;
-}
-
-/**
- * gedit_utils_basename_for_display:
- * @uri: uri for which the basename should be displayed
- *
- * Return the basename of a file suitable for display to users.
- */
-gchar *
-gedit_utils_basename_for_display (gchar const *uri)
-{
- gchar *name;
- GFile *gfile;
- gchar *hn;
-
- g_return_val_if_fail (uri != NULL, NULL);
-
- gfile = g_file_new_for_uri (uri);
-
- /* First, try to query the display name, but only on local files */
- if (g_file_has_uri_scheme (gfile, "file"))
- {
- GFileInfo *info;
- info = g_file_query_info (gfile,
- G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME,
- G_FILE_QUERY_INFO_NONE,
- NULL,
- NULL);
-
- if (info)
- {
- /* Simply get the display name to use as the basename */
- name = g_strdup (g_file_info_get_display_name (info));
- g_object_unref (info);
- }
- else
- {
- /* This is a local file, and therefore we will use
- * g_filename_display_basename on the local path */
- gchar *local_path;
-
- local_path = g_file_get_path (gfile);
- name = g_filename_display_basename (local_path);
- g_free (local_path);
- }
- }
- else if (gedit_utils_file_has_parent (gfile) || !gedit_utils_decode_uri (uri, NULL, NULL, &hn, NULL, NULL))
- {
- /* For remote files with a parent (so not just http://foo.com)
- or remote file for which the decoding of the host name fails,
- use the _parse_name and take basename of that */
- gchar *parse_name;
- gchar *base;
-
- parse_name = g_file_get_parse_name (gfile);
- base = g_filename_display_basename (parse_name);
- name = g_uri_unescape_string (base, NULL);
-
- g_free (base);
- g_free (parse_name);
- }
- else
- {
- /* display '/ on <host>' using the decoded host */
- gchar *hn_utf8;
-
- if (hn != NULL)
- hn_utf8 = gedit_utils_make_valid_utf8 (hn);
- else
- /* we should never get here */
- hn_utf8 = g_strdup ("?");
-
- /* Translators: '/ on <remote-share>' */
- name = g_strdup_printf (_("/ on %s"), hn_utf8);
-
- g_free (hn_utf8);
- g_free (hn);
- }
-
- g_object_unref (gfile);
-
- return name;
-}
-
-/**
- * gedit_utils_uri_for_display:
- * @uri: uri to be displayed.
- *
- * Filter, modify, unescape and change @uri to make it appropriate
- * for display to users.
- *
- * This function is a convenient wrapper for g_file_get_parse_name
- *
- * Return value: a string which represents @uri and can be displayed.
- */
-gchar *
-gedit_utils_uri_for_display (const gchar *uri)
-{
- GFile *gfile;
- gchar *parse_name;
-
- gfile = g_file_new_for_uri (uri);
- parse_name = g_file_get_parse_name (gfile);
- g_object_unref (gfile);
-
- return parse_name;
-}
-
-/**
- * gedit_utils_drop_get_uris:
- * @selection_data: the #GtkSelectionData from drag_data_received
- * @info: the info from drag_data_received
- *
- * Create a list of valid uri's from a uri-list drop.
- *
- * Return value: a string array which will hold the uris or NULL if there
- * were no valid uris. g_strfreev should be used when the
- * string array is no longer used
- */
-gchar **
-gedit_utils_drop_get_uris (GtkSelectionData *selection_data)
-{
- gchar **uris;
- gint i;
- gint p = 0;
- gchar **uri_list;
-
- uris = g_uri_list_extract_uris ((gchar *) gtk_selection_data_get_data (selection_data));
- uri_list = g_new0(gchar *, g_strv_length (uris) + 1);
-
- for (i = 0; uris[i] != NULL; i++)
- {
- gchar *uri;
-
- uri = gedit_utils_make_canonical_uri_from_shell_arg (uris[i]);
-
- /* Silently ignore malformed URI/filename */
- if (uri != NULL)
- uri_list[p++] = uri;
- }
-
- if (*uri_list == NULL)
- {
- g_free(uri_list);
- return NULL;
- }
-
- return uri_list;
-}
-
-static void
-null_ptr (gchar **ptr)
-{
- if (ptr)
- *ptr = NULL;
-}
-
-/**
- * gedit_utils_decode_uri:
- * @uri: the uri to decode
- * @scheme: return value pointer for the uri's scheme (e.g. http, sftp, ...)
- * @user: return value pointer for the uri user info
- * @port: return value pointer for the uri port
- * @host: return value pointer for the uri host
- * @path: return value pointer for the uri path
- *
- * Parse and break an uri apart in its individual components like the uri
- * scheme, user info, port, host and path. The return value pointer can be
- * NULL to ignore certain parts of the uri. If the function returns TRUE, then
- * all return value pointers should be freed using g_free
- *
- * Return value: TRUE if the uri could be properly decoded, FALSE otherwise.
- */
-gboolean
-gedit_utils_decode_uri (const gchar *uri,
- gchar **scheme,
- gchar **user,
- gchar **host,
- gchar **port,
- gchar **path
-)
-{
- /* Largely copied from glib/gio/gdummyfile.c:_g_decode_uri. This
- * functionality should be in glib/gio, but for now we implement it
- * ourselves (see bug #546182) */
-
- const char *p, *in, *hier_part_start, *hier_part_end;
- char *out;
- char c;
-
- /* From RFC 3986 Decodes:
- * URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
- */
-
- p = uri;
-
- null_ptr (scheme);
- null_ptr (user);
- null_ptr (port);
- null_ptr (host);
- null_ptr (path);
-
- /* Decode scheme:
- * scheme = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )
- */
-
- if (!g_ascii_isalpha (*p))
- return FALSE;
-
- while (1)
- {
- c = *p++;
-
- if (c == ':')
- break;
-
- if (!(g_ascii_isalnum(c) ||
- c == '+' ||
- c == '-' ||
- c == '.'))
- return FALSE;
- }
-
- if (scheme)
- {
- *scheme = g_malloc (p - uri);
- out = *scheme;
-
- for (in = uri; in < p - 1; in++)
- *out++ = g_ascii_tolower (*in);
-
- *out = '\0';
- }
-
- hier_part_start = p;
- hier_part_end = p + strlen (p);
-
- if (hier_part_start[0] == '/' && hier_part_start[1] == '/')
- {
- const char *authority_start, *authority_end;
- const char *userinfo_start, *userinfo_end;
- const char *host_start, *host_end;
- const char *port_start;
-
- authority_start = hier_part_start + 2;
- /* authority is always followed by / or nothing */
- authority_end = memchr (authority_start, '/', hier_part_end - authority_start);
-
- if (authority_end == NULL)
- authority_end = hier_part_end;
-
- /* 3.2:
- * authority = [ userinfo "@" ] host [ ":" port ]
- */
-
- userinfo_end = memchr (authority_start, '@', authority_end - authority_start);
-
- if (userinfo_end)
- {
- userinfo_start = authority_start;
-
- if (user)
- *user = g_uri_unescape_segment (userinfo_start, userinfo_end, NULL);
-
- if (user && *user == NULL)
- {
- if (scheme)
- g_free (*scheme);
-
- return FALSE;
- }
-
- host_start = userinfo_end + 1;
- }
- else
- host_start = authority_start;
-
- port_start = memchr (host_start, ':', authority_end - host_start);
-
- if (port_start)
- {
- host_end = port_start++;
-
- if (port)
- *port = g_strndup (port_start, authority_end - port_start);
- }
- else
- host_end = authority_end;
-
- if (host)
- *host = g_strndup (host_start, host_end - host_start);
-
- hier_part_start = authority_end;
- }
-
- if (path)
- *path = g_uri_unescape_segment (hier_part_start, hier_part_end, "/");
-
- return TRUE;
-}
diff --git a/gedit/gedit-utils.h b/gedit/gedit-utils.h
deleted file mode 100755
index ddf1d9c5..00000000
--- a/gedit/gedit-utils.h
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * gedit-utils.h
- * This file is part of gedit
- *
- * Copyright (C) 1998, 1999 Alex Roberts, Evan Lawrence
- * Copyright (C) 2000, 2001 Chema Celorio, Paolo Maggi
- * Copyright (C) 2002 - 2005 Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 1998-2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifndef __GEDIT_UTILS_H__
-#define __GEDIT_UTILS_H__
-
-#include <glib.h>
-#include <gtk/gtk.h>
-#include <atk/atk.h>
-#include <gedit/gedit-encodings.h>
-
-G_BEGIN_DECLS
-
-/* useful macro */
-#define GBOOLEAN_TO_POINTER(i) (GINT_TO_POINTER ((i) ? 2 : 1))
-#define GPOINTER_TO_BOOLEAN(i) ((gboolean) ((GPOINTER_TO_INT(i) == 2) ? TRUE : FALSE))
-
-#define IS_VALID_BOOLEAN(v) (((v == TRUE) || (v == FALSE)) ? TRUE : FALSE)
-
-enum { GEDIT_ALL_WORKSPACES = 0xffffffff };
-
-gboolean gedit_utils_uri_has_writable_scheme (const gchar *uri);
-gboolean gedit_utils_uri_has_file_scheme (const gchar *uri);
-
-void gedit_utils_menu_position_under_widget (GtkMenu *menu,
- gint *x,
- gint *y,
- gboolean *push_in,
- gpointer user_data);
-
-void gedit_utils_menu_position_under_tree_view
- (GtkMenu *menu,
- gint *x,
- gint *y,
- gboolean *push_in,
- gpointer user_data);
-
-gchar *gedit_gdk_color_to_string (GdkColor color);
-
-GtkWidget *gedit_gtk_button_new_with_stock_icon (const gchar *label,
- const gchar *stock_id);
-
-GtkWidget *gedit_dialog_add_button (GtkDialog *dialog,
- const gchar *text,
- const gchar *stock_id,
- gint response_id);
-
-gchar *gedit_utils_escape_underscores (const gchar *text,
- gssize length);
-
-gchar *gedit_utils_str_middle_truncate (const gchar *string,
- guint truncate_length);
-
-gchar *gedit_utils_str_end_truncate (const gchar *string,
- guint truncate_length);
-
-gboolean g_utf8_caselessnmatch (const char *s1,
- const char *s2,
- gssize n1,
- gssize n2);
-
-void gedit_utils_set_atk_name_description (GtkWidget *widget,
- const gchar *name,
- const gchar *description);
-
-void gedit_utils_set_atk_relation (GtkWidget *obj1,
- GtkWidget *obj2,
- AtkRelationType rel_type);
-
-gboolean gedit_utils_uri_exists (const gchar* text_uri);
-
-gchar *gedit_utils_escape_search_text (const gchar *text);
-
-gchar *gedit_utils_unescape_search_text (const gchar *text);
-
-void gedit_warning (GtkWindow *parent,
- const gchar *format,
- ...) G_GNUC_PRINTF(2, 3);
-
-gchar *gedit_utils_make_valid_utf8 (const char *name);
-
-/* Note that this function replace home dir with ~ */
-gchar *gedit_utils_uri_get_dirname (const char *uri);
-
-gchar *gedit_utils_location_get_dirname_for_display
- (GFile *location);
-
-gchar *gedit_utils_replace_home_dir_with_tilde (const gchar *uri);
-
-guint gedit_utils_get_current_workspace (GdkScreen *screen);
-
-guint gedit_utils_get_window_workspace (GtkWindow *gtkwindow);
-
-void gedit_utils_get_current_viewport (GdkScreen *screen,
- gint *x,
- gint *y);
-
-void gedit_utils_activate_url (GtkAboutDialog *about,
- const gchar *url,
- gpointer data);
-
-gboolean gedit_utils_is_valid_uri (const gchar *uri);
-
-gboolean gedit_utils_get_ui_objects (const gchar *filename,
- gchar **root_objects,
- GtkWidget **error_widget,
- const gchar *object_name,
- ...) G_GNUC_NULL_TERMINATED;
-
-gboolean gedit_utils_file_has_parent (GFile *gfile);
-
-/* Return NULL if str is not a valid URI and/or filename */
-gchar *gedit_utils_make_canonical_uri_from_shell_arg
- (const gchar *str);
-
-gchar *gedit_utils_uri_for_display (const gchar *uri);
-gchar *gedit_utils_basename_for_display (const gchar *uri);
-gboolean gedit_utils_decode_uri (const gchar *uri,
- gchar **scheme,
- gchar **user,
- gchar **port,
- gchar **host,
- gchar **path);
-
-
-/* Turns data from a drop into a list of well formatted uris */
-gchar **gedit_utils_drop_get_uris (GtkSelectionData *selection_data);
-
-G_END_DECLS
-
-#endif /* __GEDIT_UTILS_H__ */
-
-
diff --git a/gedit/gedit-view.c b/gedit/gedit-view.c
deleted file mode 100755
index b999d298..00000000
--- a/gedit/gedit-view.c
+++ /dev/null
@@ -1,2181 +0,0 @@
-/*
- * gedit-view.c
- * This file is part of gedit
- *
- * Copyright (C) 1998, 1999 Alex Roberts, Evan Lawrence
- * Copyright (C) 2000, 2002 Chema Celorio, Paolo Maggi
- * Copyright (C) 2003-2005 Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 1998-2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <string.h>
-#include <stdlib.h>
-
-#include <gdk/gdkkeysyms.h>
-
-#include <glib/gi18n.h>
-
-#include "gedit-view.h"
-#include "gedit-debug.h"
-#include "gedit-prefs-manager.h"
-#include "gedit-prefs-manager-app.h"
-#include "gedit-marshal.h"
-#include "gedit-utils.h"
-
-
-#define GEDIT_VIEW_SCROLL_MARGIN 0.02
-#define GEDIT_VIEW_SEARCH_DIALOG_TIMEOUT (30*1000) /* 30 seconds */
-
-#define MIN_SEARCH_COMPLETION_KEY_LEN 3
-
-#define GEDIT_VIEW_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), GEDIT_TYPE_VIEW, GeditViewPrivate))
-
-typedef enum
-{
- GOTO_LINE,
- SEARCH
-} SearchMode;
-
-enum
-{
- TARGET_URI_LIST = 100
-};
-
-struct _GeditViewPrivate
-{
- SearchMode search_mode;
-
- GtkTextIter start_search_iter;
-
- /* used to restore the search state if an
- * incremental search is cancelled
- */
- gchar *old_search_text;
- guint old_search_flags;
-
- /* used to remeber the state of the last
- * incremental search (the document search
- * state may be changed by the search dialog)
- */
- guint search_flags;
- gboolean wrap_around;
-
- GtkWidget *search_window;
- GtkWidget *search_entry;
-
- guint typeselect_flush_timeout;
- guint search_entry_changed_id;
-
- gboolean disable_popdown;
-
- GtkTextBuffer *current_buffer;
-};
-
-/* The search entry completion is shared among all the views */
-GtkListStore *search_completion_model = NULL;
-
-static void gedit_view_destroy (GtkObject *object);
-static void gedit_view_finalize (GObject *object);
-static gint gedit_view_focus_out (GtkWidget *widget,
- GdkEventFocus *event);
-static gboolean gedit_view_drag_motion (GtkWidget *widget,
- GdkDragContext *context,
- gint x,
- gint y,
- guint timestamp);
-static void gedit_view_drag_data_received (GtkWidget *widget,
- GdkDragContext *context,
- gint x,
- gint y,
- GtkSelectionData *selection_data,
- guint info,
- guint timestamp);
-static gboolean gedit_view_drag_drop (GtkWidget *widget,
- GdkDragContext *context,
- gint x,
- gint y,
- guint timestamp);
-static gboolean gedit_view_button_press_event (GtkWidget *widget,
- GdkEventButton *event);
-
-static gboolean start_interactive_search (GeditView *view);
-static gboolean start_interactive_goto_line (GeditView *view);
-static gboolean reset_searched_text (GeditView *view);
-
-static void hide_search_window (GeditView *view,
- gboolean cancel);
-
-
-static gint gedit_view_expose (GtkWidget *widget,
- GdkEventExpose *event);
-static void search_highlight_updated_cb (GeditDocument *doc,
- GtkTextIter *start,
- GtkTextIter *end,
- GeditView *view);
-
-static void gedit_view_delete_from_cursor (GtkTextView *text_view,
- GtkDeleteType type,
- gint count);
-
-G_DEFINE_TYPE(GeditView, gedit_view, GTK_TYPE_SOURCE_VIEW)
-
-/* Signals */
-enum
-{
- START_INTERACTIVE_SEARCH,
- START_INTERACTIVE_GOTO_LINE,
- RESET_SEARCHED_TEXT,
- DROP_URIS,
- LAST_SIGNAL
-};
-
-static guint view_signals [LAST_SIGNAL] = { 0 };
-
-typedef enum
-{
- GEDIT_SEARCH_ENTRY_NORMAL,
- GEDIT_SEARCH_ENTRY_NOT_FOUND
-} GeditSearchEntryBgColor;
-
-static void
-document_read_only_notify_handler (GeditDocument *document,
- GParamSpec *pspec,
- GeditView *view)
-{
- gedit_debug (DEBUG_VIEW);
-
- gtk_text_view_set_editable (GTK_TEXT_VIEW (view),
- !gedit_document_get_readonly (document));
-}
-
-static void
-gedit_view_class_init (GeditViewClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- GtkObjectClass *gtkobject_class = GTK_OBJECT_CLASS (klass);
- GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
- GtkTextViewClass *text_view_class = GTK_TEXT_VIEW_CLASS (klass);
-
- GtkBindingSet *binding_set;
-
- gtkobject_class->destroy = gedit_view_destroy;
- object_class->finalize = gedit_view_finalize;
-
- widget_class->focus_out_event = gedit_view_focus_out;
- widget_class->expose_event = gedit_view_expose;
-
- /*
- * Override the gtk_text_view_drag_motion and drag_drop
- * functions to get URIs
- *
- * If the mime type is text/uri-list, then we will accept
- * the potential drop, or request the data (depending on the
- * function).
- *
- * If the drag context has any other mime type, then pass the
- * information onto the GtkTextView's standard handlers.
- * (widget_class->function_name).
- *
- * See bug #89881 for details
- */
- widget_class->drag_motion = gedit_view_drag_motion;
- widget_class->drag_data_received = gedit_view_drag_data_received;
- widget_class->drag_drop = gedit_view_drag_drop;
- widget_class->button_press_event = gedit_view_button_press_event;
- klass->start_interactive_search = start_interactive_search;
- klass->start_interactive_goto_line = start_interactive_goto_line;
- klass->reset_searched_text = reset_searched_text;
-
- text_view_class->delete_from_cursor = gedit_view_delete_from_cursor;
-
- view_signals[START_INTERACTIVE_SEARCH] =
- g_signal_new ("start_interactive_search",
- G_TYPE_FROM_CLASS (object_class),
- G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
- G_STRUCT_OFFSET (GeditViewClass, start_interactive_search),
- NULL, NULL,
- gedit_marshal_BOOLEAN__NONE,
- G_TYPE_BOOLEAN, 0);
-
- view_signals[START_INTERACTIVE_GOTO_LINE] =
- g_signal_new ("start_interactive_goto_line",
- G_TYPE_FROM_CLASS (object_class),
- G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
- G_STRUCT_OFFSET (GeditViewClass, start_interactive_goto_line),
- NULL, NULL,
- gedit_marshal_BOOLEAN__NONE,
- G_TYPE_BOOLEAN, 0);
-
- view_signals[RESET_SEARCHED_TEXT] =
- g_signal_new ("reset_searched_text",
- G_TYPE_FROM_CLASS (object_class),
- G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
- G_STRUCT_OFFSET (GeditViewClass, reset_searched_text),
- NULL, NULL,
- gedit_marshal_BOOLEAN__NONE,
- G_TYPE_BOOLEAN, 0);
-
- /* A new signal DROP_URIS has been added to allow plugins to intercept
- * the default dnd behaviour of 'text/uri-list'. GeditView now handles
- * dnd in the default handlers of drag_drop, drag_motion and
- * drag_data_received. The view emits drop_uris from drag_data_received
- * if valid uris have been dropped. Plugins should connect to
- * drag_motion, drag_drop and drag_data_received to change this
- * default behaviour. They should _NOT_ use this signal because this
- * will not prevent gedit from loading the uri
- */
- view_signals[DROP_URIS] =
- g_signal_new ("drop_uris",
- G_TYPE_FROM_CLASS (object_class),
- G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
- G_STRUCT_OFFSET (GeditViewClass, drop_uris),
- NULL, NULL,
- g_cclosure_marshal_VOID__BOXED,
- G_TYPE_NONE, 1, G_TYPE_STRV);
-
- g_type_class_add_private (klass, sizeof (GeditViewPrivate));
-
- binding_set = gtk_binding_set_by_class (klass);
-
- gtk_binding_entry_add_signal (binding_set,
- GDK_k,
- GDK_CONTROL_MASK,
- "start_interactive_search", 0);
-
- gtk_binding_entry_add_signal (binding_set,
- GDK_i,
- GDK_CONTROL_MASK,
- "start_interactive_goto_line", 0);
-
- gtk_binding_entry_add_signal (binding_set,
- GDK_k,
- GDK_CONTROL_MASK | GDK_SHIFT_MASK,
- "reset_searched_text", 0);
-
- gtk_binding_entry_add_signal (binding_set,
- GDK_d,
- GDK_CONTROL_MASK,
- "delete_from_cursor", 2,
- G_TYPE_ENUM, GTK_DELETE_PARAGRAPHS,
- G_TYPE_INT, 1);
-}
-
-static void
-current_buffer_removed (GeditView *view)
-{
- if (view->priv->current_buffer)
- {
- g_signal_handlers_disconnect_by_func (view->priv->current_buffer,
- document_read_only_notify_handler,
- view);
- g_signal_handlers_disconnect_by_func (view->priv->current_buffer,
- search_highlight_updated_cb,
- view);
-
- g_object_unref (view->priv->current_buffer);
- view->priv->current_buffer = NULL;
- }
-}
-
-static void
-on_notify_buffer_cb (GeditView *view,
- GParamSpec *arg1,
- gpointer userdata)
-{
- GtkTextBuffer *buffer;
-
- current_buffer_removed (view);
- buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
-
- if (buffer == NULL || !GEDIT_IS_DOCUMENT (buffer))
- return;
-
- view->priv->current_buffer = g_object_ref (buffer);
- g_signal_connect (buffer,
- "notify::read-only",
- G_CALLBACK (document_read_only_notify_handler),
- view);
-
- gtk_text_view_set_editable (GTK_TEXT_VIEW (view),
- !gedit_document_get_readonly (GEDIT_DOCUMENT (buffer)));
-
- g_signal_connect (buffer,
- "search_highlight_updated",
- G_CALLBACK (search_highlight_updated_cb),
- view);
-}
-
-static void
-gedit_view_init (GeditView *view)
-{
- GtkTargetList *tl;
-
- gedit_debug (DEBUG_VIEW);
-
- view->priv = GEDIT_VIEW_GET_PRIVATE (view);
-
- /*
- * Set tab, fonts, wrap mode, colors, etc. according
- * to preferences
- */
- if (!gedit_prefs_manager_get_use_default_font ())
- {
- gchar *editor_font;
-
- editor_font = gedit_prefs_manager_get_editor_font ();
-
- gedit_view_set_font (view, FALSE, editor_font);
-
- g_free (editor_font);
- }
- else
- {
- gedit_view_set_font (view, TRUE, NULL);
- }
-
- g_object_set (G_OBJECT (view),
- "wrap_mode", gedit_prefs_manager_get_wrap_mode (),
- "show_line_numbers", gedit_prefs_manager_get_display_line_numbers (),
- "auto_indent", gedit_prefs_manager_get_auto_indent (),
- "tab_width", gedit_prefs_manager_get_tabs_size (),
- "insert_spaces_instead_of_tabs", gedit_prefs_manager_get_insert_spaces (),
- "show_right_margin", gedit_prefs_manager_get_display_right_margin (),
- "right_margin_position", gedit_prefs_manager_get_right_margin_position (),
- "highlight_current_line", gedit_prefs_manager_get_highlight_current_line (),
- "smart_home_end", gedit_prefs_manager_get_smart_home_end (),
- "indent_on_tab", TRUE,
- NULL);
-
- view->priv->typeselect_flush_timeout = 0;
- view->priv->wrap_around = TRUE;
-
- /* Drag and drop support */
- tl = gtk_drag_dest_get_target_list (GTK_WIDGET (view));
-
- if (tl != NULL)
- gtk_target_list_add_uri_targets (tl, TARGET_URI_LIST);
-
- /* Act on buffer change */
- g_signal_connect (view,
- "notify::buffer",
- G_CALLBACK (on_notify_buffer_cb),
- NULL);
-}
-
-static void
-gedit_view_destroy (GtkObject *object)
-{
- GeditView *view;
-
- view = GEDIT_VIEW (object);
-
- if (view->priv->search_window != NULL)
- {
- gtk_widget_destroy (view->priv->search_window);
- view->priv->search_window = NULL;
- view->priv->search_entry = NULL;
-
- if (view->priv->typeselect_flush_timeout != 0)
- {
- g_source_remove (view->priv->typeselect_flush_timeout);
- view->priv->typeselect_flush_timeout = 0;
- }
- }
-
- /* Disconnect notify buffer because the destroy of the textview will
- set the buffer to NULL, and we call get_buffer in the notify which
- would reinstate a GtkTextBuffer which we don't want */
- current_buffer_removed (view);
- g_signal_handlers_disconnect_by_func (view, on_notify_buffer_cb, NULL);
-
- (* GTK_OBJECT_CLASS (gedit_view_parent_class)->destroy) (object);
-}
-
-static void
-gedit_view_finalize (GObject *object)
-{
- GeditView *view;
-
- view = GEDIT_VIEW (object);
-
- current_buffer_removed (view);
-
- g_free (view->priv->old_search_text);
-
- (* G_OBJECT_CLASS (gedit_view_parent_class)->finalize) (object);
-}
-
-static gint
-gedit_view_focus_out (GtkWidget *widget, GdkEventFocus *event)
-{
- GeditView *view = GEDIT_VIEW (widget);
-
- gtk_widget_queue_draw (widget);
-
- /* hide interactive search dialog */
- if (view->priv->search_window != NULL)
- hide_search_window (view, FALSE);
-
- (* GTK_WIDGET_CLASS (gedit_view_parent_class)->focus_out_event) (widget, event);
-
- return FALSE;
-}
-
-/**
- * gedit_view_new:
- * @doc: a #GeditDocument
- *
- * Creates a new #GeditView object displaying the @doc document.
- * @doc cannot be NULL.
- *
- * Return value: a new #GeditView
- **/
-GtkWidget *
-gedit_view_new (GeditDocument *doc)
-{
- GtkWidget *view;
-
- gedit_debug_message (DEBUG_VIEW, "START");
-
- g_return_val_if_fail (GEDIT_IS_DOCUMENT (doc), NULL);
-
- view = GTK_WIDGET (g_object_new (GEDIT_TYPE_VIEW, "buffer", doc, NULL));
-
- gedit_debug_message (DEBUG_VIEW, "END: %d", G_OBJECT (view)->ref_count);
-
- gtk_widget_show_all (view);
-
- return view;
-}
-
-void
-gedit_view_cut_clipboard (GeditView *view)
-{
- GtkTextBuffer *buffer;
- GtkClipboard *clipboard;
-
- gedit_debug (DEBUG_VIEW);
-
- g_return_if_fail (GEDIT_IS_VIEW (view));
-
- buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
- g_return_if_fail (buffer != NULL);
-
- clipboard = gtk_widget_get_clipboard (GTK_WIDGET (view),
- GDK_SELECTION_CLIPBOARD);
-
- /* FIXME: what is default editability of a buffer? */
- gtk_text_buffer_cut_clipboard (buffer,
- clipboard,
- !gedit_document_get_readonly (
- GEDIT_DOCUMENT (buffer)));
-
- gtk_text_view_scroll_to_mark (GTK_TEXT_VIEW (view),
- gtk_text_buffer_get_insert (buffer),
- GEDIT_VIEW_SCROLL_MARGIN,
- FALSE,
- 0.0,
- 0.0);
-}
-
-void
-gedit_view_copy_clipboard (GeditView *view)
-{
- GtkTextBuffer *buffer;
- GtkClipboard *clipboard;
-
- gedit_debug (DEBUG_VIEW);
-
- g_return_if_fail (GEDIT_IS_VIEW (view));
-
- buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
- g_return_if_fail (buffer != NULL);
-
- clipboard = gtk_widget_get_clipboard (GTK_WIDGET (view),
- GDK_SELECTION_CLIPBOARD);
-
- gtk_text_buffer_copy_clipboard (buffer, clipboard);
-
- /* on copy do not scroll, we are already on screen */
-}
-
-void
-gedit_view_paste_clipboard (GeditView *view)
-{
- GtkTextBuffer *buffer;
- GtkClipboard *clipboard;
-
- gedit_debug (DEBUG_VIEW);
-
- g_return_if_fail (GEDIT_IS_VIEW (view));
-
- buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
- g_return_if_fail (buffer != NULL);
-
- clipboard = gtk_widget_get_clipboard (GTK_WIDGET (view),
- GDK_SELECTION_CLIPBOARD);
-
- /* FIXME: what is default editability of a buffer? */
- gtk_text_buffer_paste_clipboard (buffer,
- clipboard,
- NULL,
- !gedit_document_get_readonly (
- GEDIT_DOCUMENT (buffer)));
-
- gtk_text_view_scroll_to_mark (GTK_TEXT_VIEW (view),
- gtk_text_buffer_get_insert (buffer),
- GEDIT_VIEW_SCROLL_MARGIN,
- FALSE,
- 0.0,
- 0.0);
-}
-
-/**
- * gedit_view_delete_selection:
- * @view: a #GeditView
- *
- * Deletes the text currently selected in the #GtkTextBuffer associated
- * to the view and scroll to the cursor position.
- **/
-void
-gedit_view_delete_selection (GeditView *view)
-{
- GtkTextBuffer *buffer = NULL;
-
- gedit_debug (DEBUG_VIEW);
-
- g_return_if_fail (GEDIT_IS_VIEW (view));
-
- buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
- g_return_if_fail (buffer != NULL);
-
- /* FIXME: what is default editability of a buffer? */
- gtk_text_buffer_delete_selection (buffer,
- TRUE,
- !gedit_document_get_readonly (
- GEDIT_DOCUMENT (buffer)));
-
- gtk_text_view_scroll_to_mark (GTK_TEXT_VIEW (view),
- gtk_text_buffer_get_insert (buffer),
- GEDIT_VIEW_SCROLL_MARGIN,
- FALSE,
- 0.0,
- 0.0);
-}
-
-/**
- * gedit_view_select_all:
- * @view: a #GeditView
- *
- * Selects all the text displayed in the @view.
- **/
-void
-gedit_view_select_all (GeditView *view)
-{
- GtkTextBuffer *buffer = NULL;
- GtkTextIter start, end;
-
- gedit_debug (DEBUG_VIEW);
-
- g_return_if_fail (GEDIT_IS_VIEW (view));
-
- buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
- g_return_if_fail (buffer != NULL);
-
- gtk_text_buffer_get_bounds (buffer, &start, &end);
- gtk_text_buffer_select_range (buffer, &start, &end);
-}
-
-/**
- * gedit_view_scroll_to_cursor:
- * @view: a #GeditView
- *
- * Scrolls the @view to the cursor position.
- **/
-void
-gedit_view_scroll_to_cursor (GeditView *view)
-{
- GtkTextBuffer* buffer = NULL;
-
- gedit_debug (DEBUG_VIEW);
-
- g_return_if_fail (GEDIT_IS_VIEW (view));
-
- buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
- g_return_if_fail (buffer != NULL);
-
- gtk_text_view_scroll_to_mark (GTK_TEXT_VIEW (view),
- gtk_text_buffer_get_insert (buffer),
- 0.25,
- FALSE,
- 0.0,
- 0.0);
-}
-
-/**
- * gedit_view_set_font:
- * @view: a #GeditView
- * @def: whether to reset the default font
- * @font_name: the name of the font to use
- *
- * If @def is #TRUE, resets the font of the @view to the default font
- * otherwise sets it to @font_name.
- **/
-void
-gedit_view_set_font (GeditView *view,
- gboolean def,
- const gchar *font_name)
-{
- PangoFontDescription *font_desc = NULL;
-
- gedit_debug (DEBUG_VIEW);
-
- g_return_if_fail (GEDIT_IS_VIEW (view));
-
- if (def)
- {
- gchar *font;
-
- font = gedit_prefs_manager_get_system_font ();
- font_desc = pango_font_description_from_string (font);
- g_free (font);
- }
- else
- {
- g_return_if_fail (font_name != NULL);
-
- font_desc = pango_font_description_from_string (font_name);
- }
-
- g_return_if_fail (font_desc != NULL);
-
- gtk_widget_modify_font (GTK_WIDGET (view), font_desc);
-
- pango_font_description_free (font_desc);
-}
-
-static void
-add_search_completion_entry (const gchar *str)
-{
- gchar *text;
- gboolean valid;
- GtkTreeModel *model;
- GtkTreeIter iter;
-
- if (str == NULL)
- return;
-
- text = gedit_utils_unescape_search_text (str);
-
- if (g_utf8_strlen (text, -1) < MIN_SEARCH_COMPLETION_KEY_LEN)
- {
- g_free (text);
- return;
- }
-
- g_return_if_fail (GTK_IS_TREE_MODEL (search_completion_model));
-
- model = GTK_TREE_MODEL (search_completion_model);
-
- /* Get the first iter in the list */
- valid = gtk_tree_model_get_iter_first (model, &iter);
-
- while (valid)
- {
- /* Walk through the list, reading each row */
- gchar *str_data;
-
- gtk_tree_model_get (model,
- &iter,
- 0,
- &str_data,
- -1);
-
- if (strcmp (text, str_data) == 0)
- {
- g_free (text);
- g_free (str_data);
- gtk_list_store_move_after (GTK_LIST_STORE (model),
- &iter,
- NULL);
-
- return;
- }
-
- g_free (str_data);
-
- valid = gtk_tree_model_iter_next (model, &iter);
- }
-
- gtk_list_store_prepend (GTK_LIST_STORE (model), &iter);
- gtk_list_store_set (GTK_LIST_STORE (model),
- &iter,
- 0,
- text,
- -1);
-
- g_free (text);
-}
-
-static void
-set_entry_background (GtkWidget *entry,
- GeditSearchEntryBgColor col)
-{
- if (col == GEDIT_SEARCH_ENTRY_NOT_FOUND)
- {
- GdkColor red;
- GdkColor white;
-
- /* FIXME: a11y and theme */
-
- gdk_color_parse ("#FF6666", &red);
- gdk_color_parse ("white", &white);
-
- gtk_widget_modify_base (entry,
- GTK_STATE_NORMAL,
- &red);
- gtk_widget_modify_text (entry,
- GTK_STATE_NORMAL,
- &white);
- }
- else /* reset */
- {
- gtk_widget_modify_base (entry,
- GTK_STATE_NORMAL,
- NULL);
- gtk_widget_modify_text (entry,
- GTK_STATE_NORMAL,
- NULL);
- }
-}
-
-static gboolean
-run_search (GeditView *view,
- const gchar *entry_text,
- gboolean search_backward,
- gboolean wrap_around,
- gboolean typing)
-{
- GtkTextIter start_iter;
- GtkTextIter match_start;
- GtkTextIter match_end;
- gboolean found = FALSE;
- GeditDocument *doc;
-
- g_return_val_if_fail (view->priv->search_mode == SEARCH, FALSE);
-
- doc = GEDIT_DOCUMENT (gtk_text_view_get_buffer (GTK_TEXT_VIEW (view)));
-
- start_iter = view->priv->start_search_iter;
-
- if (*entry_text != '\0')
- {
- if (!search_backward)
- {
- if (!typing)
- {
- /* forward and _NOT_ typing */
- gtk_text_buffer_get_selection_bounds (GTK_TEXT_BUFFER (doc),
- &start_iter,
- &match_end);
-
- gtk_text_iter_order (&match_end, &start_iter);
- }
-
- /* run search */
- found = gedit_document_search_forward (doc,
- &start_iter,
- NULL,
- &match_start,
- &match_end);
- }
- else if (!typing)
- {
- /* backward and not typing */
- gtk_text_buffer_get_selection_bounds (GTK_TEXT_BUFFER (doc),
- &start_iter,
- &match_end);
-
- /* run search */
- found = gedit_document_search_backward (doc,
- NULL,
- &start_iter,
- &match_start,
- &match_end);
- }
- else
- {
- /* backward (while typing) */
- g_return_val_if_reached (FALSE);
-
- }
-
- if (!found && wrap_around)
- {
- if (!search_backward)
- found = gedit_document_search_forward (doc,
- NULL,
- NULL, /* FIXME: set the end_inter */
- &match_start,
- &match_end);
- else
- found = gedit_document_search_backward (doc,
- NULL, /* FIXME: set the start_inter */
- NULL,
- &match_start,
- &match_end);
- }
- }
- else
- {
- gtk_text_buffer_get_selection_bounds (GTK_TEXT_BUFFER (doc),
- &start_iter,
- NULL);
- }
-
- if (found)
- {
- gtk_text_buffer_place_cursor (GTK_TEXT_BUFFER (doc),
- &match_start);
-
- gtk_text_buffer_move_mark_by_name (GTK_TEXT_BUFFER (doc),
- "selection_bound", &match_end);
- }
- else
- {
- if (typing)
- {
- gtk_text_buffer_place_cursor (GTK_TEXT_BUFFER (doc),
- &view->priv->start_search_iter);
- }
- }
-
- if (found || (*entry_text == '\0'))
- {
- gedit_view_scroll_to_cursor (view);
-
- set_entry_background (view->priv->search_entry,
- GEDIT_SEARCH_ENTRY_NORMAL);
- }
- else
- {
- set_entry_background (view->priv->search_entry,
- GEDIT_SEARCH_ENTRY_NOT_FOUND);
- }
-
- return found;
-}
-
-/* Cut and paste from gtkwindow.c */
-static void
-send_focus_change (GtkWidget *widget,
- gboolean in)
-{
- GdkEvent *fevent = gdk_event_new (GDK_FOCUS_CHANGE);
-
- g_object_ref (widget);
-
- if (in)
- GTK_WIDGET_SET_FLAGS (widget, GTK_HAS_FOCUS);
- else
- GTK_WIDGET_UNSET_FLAGS (widget, GTK_HAS_FOCUS);
-
- fevent->focus_change.type = GDK_FOCUS_CHANGE;
- fevent->focus_change.window = g_object_ref (widget->window);
- fevent->focus_change.in = in;
-
- gtk_widget_event (widget, fevent);
-
- g_object_notify (G_OBJECT (widget), "has-focus");
-
- g_object_unref (widget);
- gdk_event_free (fevent);
-}
-
-static void
-hide_search_window (GeditView *view, gboolean cancel)
-{
- if (view->priv->disable_popdown)
- return;
-
- if (view->priv->search_entry_changed_id != 0)
- {
- g_signal_handler_disconnect (view->priv->search_entry,
- view->priv->search_entry_changed_id);
- view->priv->search_entry_changed_id = 0;
- }
-
- if (view->priv->typeselect_flush_timeout != 0)
- {
- g_source_remove (view->priv->typeselect_flush_timeout);
- view->priv->typeselect_flush_timeout = 0;
- }
-
- /* send focus-in event */
- send_focus_change (GTK_WIDGET (view->priv->search_entry), FALSE);
- gtk_text_view_set_cursor_visible (GTK_TEXT_VIEW (view), TRUE);
- gtk_widget_hide (view->priv->search_window);
-
- if (cancel)
- {
- GtkTextBuffer *buffer;
-
- buffer = GTK_TEXT_BUFFER (gtk_text_view_get_buffer (GTK_TEXT_VIEW (view)));
- gtk_text_buffer_place_cursor (buffer, &view->priv->start_search_iter);
-
- gedit_view_scroll_to_cursor (view);
- }
-
- /* make sure a focus event is sent for the edit area */
- send_focus_change (GTK_WIDGET (view), TRUE);
-}
-
-static gboolean
-search_entry_flush_timeout (GeditView *view)
-{
- GDK_THREADS_ENTER ();
-
- view->priv->typeselect_flush_timeout = 0;
- hide_search_window (view, FALSE);
-
- GDK_THREADS_LEAVE ();
-
- return FALSE;
-}
-
-static void
-update_search_window_position (GeditView *view)
-{
- gint x, y;
- gint view_x, view_y;
- GdkWindow *view_window = GTK_WIDGET (view)->window;
-
- gtk_widget_realize (view->priv->search_window);
-
- gdk_window_get_origin (view_window, &view_x, &view_y);
-
- x = MAX (12, view_x + 12);
- y = MAX (12, view_y - 12);
-
- gtk_window_move (GTK_WINDOW (view->priv->search_window), x, y);
-}
-
-static gboolean
-search_window_delete_event (GtkWidget *widget,
- GdkEventAny *event,
- GeditView *view)
-{
- hide_search_window (view, FALSE);
-
- return TRUE;
-}
-
-static gboolean
-search_window_button_press_event (GtkWidget *widget,
- GdkEventButton *event,
- GeditView *view)
-{
- hide_search_window (view, FALSE);
-
- gtk_propagate_event (GTK_WIDGET (view), (GdkEvent *)event);
-
- return FALSE;
-}
-
-static void
-search_again (GeditView *view,
- gboolean search_backward)
-{
- const gchar *entry_text;
-
- g_return_if_fail (view->priv->search_mode == SEARCH);
-
- /* SEARCH mode */
- /* renew the flush timeout */
- if (view->priv->typeselect_flush_timeout != 0)
- {
- g_source_remove (view->priv->typeselect_flush_timeout);
- view->priv->typeselect_flush_timeout =
- g_timeout_add (GEDIT_VIEW_SEARCH_DIALOG_TIMEOUT,
- (GSourceFunc)search_entry_flush_timeout,
- view);
- }
-
- entry_text = gtk_entry_get_text (GTK_ENTRY (view->priv->search_entry));
-
- add_search_completion_entry (entry_text);
-
- run_search (view,
- entry_text,
- search_backward,
- view->priv->wrap_around,
- FALSE);
-}
-
-static gboolean
-search_window_scroll_event (GtkWidget *widget,
- GdkEventScroll *event,
- GeditView *view)
-{
- gboolean retval = FALSE;
-
- if (view->priv->search_mode == GOTO_LINE)
- return retval;
-
- /* SEARCH mode */
- if (event->direction == GDK_SCROLL_UP)
- {
- search_again (view, TRUE);
- retval = TRUE;
- }
- else if (event->direction == GDK_SCROLL_DOWN)
- {
- search_again (view, FALSE);
- retval = TRUE;
- }
-
- return retval;
-}
-
-static gboolean
-search_window_key_press_event (GtkWidget *widget,
- GdkEventKey *event,
- GeditView *view)
-{
- gboolean retval = FALSE;
- guint modifiers;
-
- modifiers = gtk_accelerator_get_default_mod_mask ();
-
- /* Close window */
- if (event->keyval == GDK_Tab)
- {
- hide_search_window (view, FALSE);
- retval = TRUE;
- }
-
- /* Close window and cancel the search */
- if (event->keyval == GDK_Escape)
- {
- if (view->priv->search_mode == SEARCH)
- {
- GeditDocument *doc;
-
- /* restore document search so that Find Next does the right thing */
- doc = GEDIT_DOCUMENT (gtk_text_view_get_buffer (GTK_TEXT_VIEW (view)));
- gedit_document_set_search_text (doc,
- view->priv->old_search_text,
- view->priv->old_search_flags);
-
- }
-
- hide_search_window (view, TRUE);
- retval = TRUE;
- }
-
- if (view->priv->search_mode == GOTO_LINE)
- return retval;
-
- /* SEARCH mode */
-
- /* select previous matching iter */
- if (event->keyval == GDK_Up || event->keyval == GDK_KP_Up)
- {
- search_again (view, TRUE);
- retval = TRUE;
- }
-
- if (((event->state & modifiers) == (GDK_CONTROL_MASK | GDK_SHIFT_MASK)) &&
- (event->keyval == GDK_g || event->keyval == GDK_G))
- {
- search_again (view, TRUE);
- retval = TRUE;
- }
-
- /* select next matching iter */
- if (event->keyval == GDK_Down || event->keyval == GDK_KP_Down)
- {
- search_again (view, FALSE);
- retval = TRUE;
- }
-
- if (((event->state & modifiers) == GDK_CONTROL_MASK) &&
- (event->keyval == GDK_g || event->keyval == GDK_G))
- {
- search_again (view, FALSE);
- retval = TRUE;
- }
-
- return retval;
-}
-
-static void
-search_entry_activate (GtkEntry *entry,
- GeditView *view)
-{
- hide_search_window (view, FALSE);
-}
-
-static void
-wrap_around_menu_item_toggled (GtkCheckMenuItem *checkmenuitem,
- GeditView *view)
-{
- view->priv->wrap_around = gtk_check_menu_item_get_active (checkmenuitem);
-}
-
-static void
-match_entire_word_menu_item_toggled (GtkCheckMenuItem *checkmenuitem,
- GeditView *view)
-{
- GEDIT_SEARCH_SET_ENTIRE_WORD (view->priv->search_flags,
- gtk_check_menu_item_get_active (checkmenuitem));
-}
-
-static void
-match_case_menu_item_toggled (GtkCheckMenuItem *checkmenuitem,
- GeditView *view)
-{
- GEDIT_SEARCH_SET_CASE_SENSITIVE (view->priv->search_flags,
- gtk_check_menu_item_get_active (checkmenuitem));
-}
-
-static gboolean
-real_search_enable_popdown (gpointer data)
-{
- GeditView *view = (GeditView *)data;
-
- GDK_THREADS_ENTER ();
-
- view->priv->disable_popdown = FALSE;
-
- GDK_THREADS_LEAVE ();
-
- return FALSE;
-}
-
-static void
-search_enable_popdown (GtkWidget *widget,
- GeditView *view)
-{
- g_timeout_add (200, real_search_enable_popdown, view);
-
- /* renew the flush timeout */
- if (view->priv->typeselect_flush_timeout != 0)
- g_source_remove (view->priv->typeselect_flush_timeout);
-
- view->priv->typeselect_flush_timeout =
- g_timeout_add (GEDIT_VIEW_SEARCH_DIALOG_TIMEOUT,
- (GSourceFunc)search_entry_flush_timeout,
- view);
-}
-
-static void
-search_entry_populate_popup (GtkEntry *entry,
- GtkMenu *menu,
- GeditView *view)
-{
- GtkWidget *menu_item;
-
- view->priv->disable_popdown = TRUE;
- g_signal_connect (menu, "hide",
- G_CALLBACK (search_enable_popdown), view);
-
- if (view->priv->search_mode == GOTO_LINE)
- return;
-
- /* separator */
- menu_item = gtk_menu_item_new ();
- gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), menu_item);
- gtk_widget_show (menu_item);
-
- /* create "Wrap Around" menu item. */
- menu_item = gtk_check_menu_item_new_with_mnemonic (_("_Wrap Around"));
- g_signal_connect (G_OBJECT (menu_item), "toggled",
- G_CALLBACK (wrap_around_menu_item_toggled),
- view);
- gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), menu_item);
- gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menu_item),
- view->priv->wrap_around);
- gtk_widget_show (menu_item);
-
- /* create "Match Entire Word Only" menu item. */
- menu_item = gtk_check_menu_item_new_with_mnemonic (_("Match _Entire Word Only"));
- g_signal_connect (G_OBJECT (menu_item), "toggled",
- G_CALLBACK (match_entire_word_menu_item_toggled),
- view);
- gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), menu_item);
- gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menu_item),
- GEDIT_SEARCH_IS_ENTIRE_WORD (view->priv->search_flags));
- gtk_widget_show (menu_item);
-
- /* create "Match Case" menu item. */
- menu_item = gtk_check_menu_item_new_with_mnemonic (_("_Match Case"));
- g_signal_connect (G_OBJECT (menu_item), "toggled",
- G_CALLBACK (match_case_menu_item_toggled),
- view);
- gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), menu_item);
- gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menu_item),
- GEDIT_SEARCH_IS_CASE_SENSITIVE (view->priv->search_flags));
- gtk_widget_show (menu_item);
-}
-
-static void
-search_entry_insert_text (GtkEditable *editable,
- const gchar *text,
- gint length,
- gint *position,
- GeditView *view)
-{
- if (view->priv->search_mode == GOTO_LINE)
- {
- gunichar c;
- const gchar *p;
- const gchar *end;
- const gchar *next;
-
- p = text;
- end = text + length;
-
- if (p == end)
- return;
-
- c = g_utf8_get_char (p);
-
- if (((c == '-' || c == '+') && *position == 0) ||
- (c == ':' && *position != 0))
- {
- gchar *s = NULL;
-
- if (c == ':')
- {
- s = gtk_editable_get_chars (editable, 0, -1);
- s = g_utf8_strchr (s, -1, ':');
- }
-
- if (s == NULL || s == p)
- {
- next = g_utf8_next_char (p);
- p = next;
- }
-
- g_free (s);
- }
-
- while (p != end)
- {
- next = g_utf8_next_char (p);
-
- c = g_utf8_get_char (p);
-
- if (!g_unichar_isdigit (c)) {
- g_signal_stop_emission_by_name (editable, "insert_text");
- gtk_widget_error_bell (view->priv->search_entry);
- break;
- }
-
- p = next;
- }
- }
- else
- {
- /* SEARCH mode */
- static gboolean insert_text = FALSE;
- gchar *escaped_text;
- gint new_len;
-
- gedit_debug_message (DEBUG_SEARCH, "Text: %s", text);
-
- /* To avoid recursive behavior */
- if (insert_text)
- return;
-
- escaped_text = gedit_utils_escape_search_text (text);
-
- gedit_debug_message (DEBUG_SEARCH, "Escaped Text: %s", escaped_text);
-
- new_len = strlen (escaped_text);
-
- if (new_len == length)
- {
- g_free (escaped_text);
- return;
- }
-
- insert_text = TRUE;
-
- g_signal_stop_emission_by_name (editable, "insert_text");
-
- gtk_editable_insert_text (editable, escaped_text, new_len, position);
-
- insert_text = FALSE;
-
- g_free (escaped_text);
- }
-}
-
-static void
-customize_for_search_mode (GeditView *view)
-{
- if (view->priv->search_mode == SEARCH)
- {
- gtk_entry_set_icon_from_stock (GTK_ENTRY (view->priv->search_entry),
- GTK_ENTRY_ICON_PRIMARY,
- GTK_STOCK_FIND);
-
- gtk_widget_set_tooltip_text (view->priv->search_entry,
- _("String you want to search for"));
- }
- else
- {
- gtk_entry_set_icon_from_stock (GTK_ENTRY (view->priv->search_entry),
- GTK_ENTRY_ICON_PRIMARY,
- GTK_STOCK_JUMP_TO);
-
- gtk_widget_set_tooltip_text (view->priv->search_entry,
- _("Line you want to move the cursor to"));
- }
-}
-
-static gboolean
-completion_func (GtkEntryCompletion *completion,
- const char *key,
- GtkTreeIter *iter,
- gpointer data)
-{
- gchar *item = NULL;
- gboolean ret = FALSE;
- GtkTreeModel *model;
- GeditViewPrivate *priv = (GeditViewPrivate *)data;
- const gchar *real_key;
-
- if (priv->search_mode == GOTO_LINE)
- return FALSE;
-
- real_key = gtk_entry_get_text (GTK_ENTRY (gtk_entry_completion_get_entry (completion)));
-
- if (g_utf8_strlen (real_key, -1) <= MIN_SEARCH_COMPLETION_KEY_LEN)
- return FALSE;
-
- model = gtk_entry_completion_get_model (completion);
- g_return_val_if_fail (gtk_tree_model_get_column_type (model, 0) == G_TYPE_STRING,
- FALSE);
-
- gtk_tree_model_get (model,
- iter,
- 0,
- &item,
- -1);
-
- if (item == NULL)
- return FALSE;
-
- if (GEDIT_SEARCH_IS_CASE_SENSITIVE (priv->search_flags))
- {
- if (!strncmp (real_key, item, strlen (real_key)))
- ret = TRUE;
- }
- else
- {
- gchar *normalized_string;
- gchar *case_normalized_string;
-
- normalized_string = g_utf8_normalize (item, -1, G_NORMALIZE_ALL);
- case_normalized_string = g_utf8_casefold (normalized_string, -1);
-
- if (!strncmp (key, case_normalized_string, strlen (key)))
- ret = TRUE;
-
- g_free (normalized_string);
- g_free (case_normalized_string);
-
- }
-
- g_free (item);
-
- return ret;
-}
-
-static void
-ensure_search_window (GeditView *view)
-{
- GtkWidget *frame;
- GtkWidget *vbox;
- GtkWidget *toplevel;
- GtkEntryCompletion *completion;
-
- toplevel = gtk_widget_get_toplevel (GTK_WIDGET (view));
-
- if (view->priv->search_window != NULL)
- {
- if (GTK_WINDOW (toplevel)->group)
- gtk_window_group_add_window (GTK_WINDOW (toplevel)->group,
- GTK_WINDOW (view->priv->search_window));
- else if (GTK_WINDOW (view->priv->search_window)->group)
- gtk_window_group_remove_window (GTK_WINDOW (view->priv->search_window)->group,
- GTK_WINDOW (view->priv->search_window));
-
- customize_for_search_mode (view);
-
- return;
- }
-
- view->priv->search_window = gtk_window_new (GTK_WINDOW_POPUP);
-
- if (GTK_WINDOW (toplevel)->group)
- gtk_window_group_add_window (GTK_WINDOW (toplevel)->group,
- GTK_WINDOW (view->priv->search_window));
-
- gtk_window_set_modal (GTK_WINDOW (view->priv->search_window), TRUE);
-
- g_signal_connect (view->priv->search_window, "delete_event",
- G_CALLBACK (search_window_delete_event),
- view);
- g_signal_connect (view->priv->search_window, "key_press_event",
- G_CALLBACK (search_window_key_press_event),
- view);
- g_signal_connect (view->priv->search_window, "button_press_event",
- G_CALLBACK (search_window_button_press_event),
- view);
- g_signal_connect (view->priv->search_window, "scroll_event",
- G_CALLBACK (search_window_scroll_event),
- view);
-
- frame = gtk_frame_new (NULL);
- gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN);
- gtk_widget_show (frame);
- gtk_container_add (GTK_CONTAINER (view->priv->search_window), frame);
-
- vbox = gtk_vbox_new (FALSE, 0);
- gtk_widget_show (vbox);
- gtk_container_add (GTK_CONTAINER (frame), vbox);
- gtk_container_set_border_width (GTK_CONTAINER (vbox), 3);
-
- /* add entry */
- view->priv->search_entry = gtk_entry_new ();
- gtk_widget_show (view->priv->search_entry);
-
- g_signal_connect (view->priv->search_entry, "populate_popup",
- G_CALLBACK (search_entry_populate_popup),
- view);
- g_signal_connect (view->priv->search_entry, "activate",
- G_CALLBACK (search_entry_activate),
- view);
- /* CHECK: do we really need to connect to preedit too? -- Paolo
- g_signal_connect (GTK_ENTRY (view->priv->search_entry)->im_context, "preedit-changed",
- G_CALLBACK (gtk_view_search_preedit_changed),
- view);
- */
- g_signal_connect (view->priv->search_entry,
- "insert_text",
- G_CALLBACK (search_entry_insert_text),
- view);
-
- gtk_container_add (GTK_CONTAINER (vbox),
- view->priv->search_entry);
-
- if (search_completion_model == NULL)
- {
- /* Create a tree model and use it as the completion model */
- search_completion_model = gtk_list_store_new (1, G_TYPE_STRING);
- }
-
- /* Create the completion object for the search entry */
- completion = gtk_entry_completion_new ();
- gtk_entry_completion_set_model (completion,
- GTK_TREE_MODEL (search_completion_model));
-
- /* Use model column 0 as the text column */
- gtk_entry_completion_set_text_column (completion, 0);
-
- gtk_entry_completion_set_minimum_key_length (completion,
- MIN_SEARCH_COMPLETION_KEY_LEN);
-
- gtk_entry_completion_set_popup_completion (completion, FALSE);
- gtk_entry_completion_set_inline_completion (completion, TRUE);
-
- gtk_entry_completion_set_match_func (completion,
- completion_func,
- view->priv,
- NULL);
-
- /* Assign the completion to the entry */
- gtk_entry_set_completion (GTK_ENTRY (view->priv->search_entry),
- completion);
- g_object_unref (completion);
-
- gtk_widget_realize (view->priv->search_entry);
-
- customize_for_search_mode (view);
-}
-
-static gboolean
-get_selected_text (GtkTextBuffer *doc, gchar **selected_text, gint *len)
-{
- GtkTextIter start, end;
-
- g_return_val_if_fail (selected_text != NULL, FALSE);
- g_return_val_if_fail (*selected_text == NULL, FALSE);
-
- if (!gtk_text_buffer_get_selection_bounds (doc, &start, &end))
- {
- if (len != NULL)
- len = 0;
-
- return FALSE;
- }
-
- *selected_text = gtk_text_buffer_get_slice (doc, &start, &end, TRUE);
-
- if (len != NULL)
- *len = g_utf8_strlen (*selected_text, -1);
-
- return TRUE;
-}
-
-static void
-init_search_entry (GeditView *view)
-{
- GtkTextBuffer *buffer;
-
- buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
-
- if (view->priv->search_mode == GOTO_LINE)
- {
- gint line;
- gchar *line_str;
-
- line = gtk_text_iter_get_line (&view->priv->start_search_iter);
-
- line_str = g_strdup_printf ("%d", line + 1);
-
- gtk_entry_set_text (GTK_ENTRY (view->priv->search_entry),
- line_str);
-
- g_free (line_str);
-
- return;
- }
- else
- {
- /* SEARCH mode */
- gboolean selection_exists;
- gchar *find_text = NULL;
- gchar *old_find_text;
- guint old_find_flags = 0;
- gint sel_len = 0;
-
- g_free (view->priv->old_search_text);
-
- old_find_text = gedit_document_get_search_text (GEDIT_DOCUMENT (buffer),
- &old_find_flags);
- if (old_find_text != NULL)
- {
- view->priv->old_search_text = old_find_text;
- add_search_completion_entry (old_find_text);
- }
-
- if (old_find_flags != 0)
- {
- view->priv->old_search_flags = old_find_flags;
- }
-
- selection_exists = get_selected_text (buffer,
- &find_text,
- &sel_len);
-
- if (selection_exists && (find_text != NULL) && (sel_len <= 160))
- {
- gtk_entry_set_text (GTK_ENTRY (view->priv->search_entry),
- find_text);
- }
- else
- {
- gtk_entry_set_text (GTK_ENTRY (view->priv->search_entry),
- "");
- }
-
- g_free (find_text);
- }
-}
-
-static void
-search_init (GtkWidget *entry,
- GeditView *view)
-{
- GeditDocument *doc;
- const gchar *entry_text;
-
- /* renew the flush timeout */
- if (view->priv->typeselect_flush_timeout != 0)
- {
- g_source_remove (view->priv->typeselect_flush_timeout);
- view->priv->typeselect_flush_timeout =
- g_timeout_add (GEDIT_VIEW_SEARCH_DIALOG_TIMEOUT,
- (GSourceFunc)search_entry_flush_timeout,
- view);
- }
-
- doc = GEDIT_DOCUMENT (gtk_text_view_get_buffer (GTK_TEXT_VIEW (view)));
-
- entry_text = gtk_entry_get_text (GTK_ENTRY (entry));
-
- if (view->priv->search_mode == SEARCH)
- {
- gchar *search_text;
- guint search_flags;
-
- search_text = gedit_document_get_search_text (doc, &search_flags);
-
- if ((search_text == NULL) ||
- (strcmp (search_text, entry_text) != 0) ||
- search_flags != view->priv->search_flags)
- {
- gedit_document_set_search_text (doc,
- entry_text,
- view->priv->search_flags);
- }
-
- g_free (search_text);
-
- run_search (view,
- entry_text,
- FALSE,
- view->priv->wrap_around,
- TRUE);
- }
- else
- {
- if (*entry_text != '\0')
- {
- gboolean moved, moved_offset;
- gint line;
- gint offset_line = 0;
- gint line_offset = 0;
- gchar **split_text = NULL;
- const gchar *text;
-
- split_text = g_strsplit (entry_text, ":", -1);
-
- if (g_strv_length (split_text) > 1)
- {
- text = split_text[0];
- }
- else
- {
- text = entry_text;
- }
-
- if (*text == '-')
- {
- gint cur_line = gtk_text_iter_get_line (&view->priv->start_search_iter);
-
- if (*(text + 1) != '\0')
- offset_line = MAX (atoi (text + 1), 0);
-
- line = MAX (cur_line - offset_line, 0);
- }
- else if (*entry_text == '+')
- {
- gint cur_line = gtk_text_iter_get_line (&view->priv->start_search_iter);
-
- if (*(text + 1) != '\0')
- offset_line = MAX (atoi (text + 1), 0);
-
- line = cur_line + offset_line;
- }
- else
- {
- line = MAX (atoi (text) - 1, 0);
- }
-
- if (split_text[1] != NULL)
- {
- line_offset = atoi (split_text[1]);
- }
-
- g_strfreev (split_text);
-
- moved = gedit_document_goto_line (doc, line);
- moved_offset = gedit_document_goto_line_offset (doc, line,
- line_offset);
-
- gedit_view_scroll_to_cursor (view);
-
- if (!moved || !moved_offset)
- set_entry_background (view->priv->search_entry,
- GEDIT_SEARCH_ENTRY_NOT_FOUND);
- else
- set_entry_background (view->priv->search_entry,
- GEDIT_SEARCH_ENTRY_NORMAL);
- }
- }
-}
-
-static gboolean
-start_interactive_search_real (GeditView *view)
-{
- GtkTextBuffer *buffer;
-
- if ((view->priv->search_window != NULL) &&
- GTK_WIDGET_VISIBLE (view->priv->search_window))
- return TRUE;
-
- if (!GTK_WIDGET_HAS_FOCUS (view))
- return FALSE;
-
- buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
-
- if (view->priv->search_mode == SEARCH)
- gtk_text_buffer_get_selection_bounds (buffer, &view->priv->start_search_iter, NULL);
- else
- gtk_text_buffer_get_iter_at_mark (buffer,
- &view->priv->start_search_iter,
- gtk_text_buffer_get_insert (buffer));
-
- ensure_search_window (view);
-
- /* done, show it */
- update_search_window_position (view);
- gtk_widget_show (view->priv->search_window);
-
- if (view->priv->search_entry_changed_id == 0)
- {
- view->priv->search_entry_changed_id =
- g_signal_connect (view->priv->search_entry,
- "changed",
- G_CALLBACK (search_init),
- view);
- }
-
- init_search_entry (view);
-
- view->priv->typeselect_flush_timeout =
- g_timeout_add (GEDIT_VIEW_SEARCH_DIALOG_TIMEOUT,
- (GSourceFunc) search_entry_flush_timeout,
- view);
-
- gtk_text_view_set_cursor_visible (GTK_TEXT_VIEW (view), FALSE);
- gtk_widget_grab_focus (view->priv->search_entry);
-
- send_focus_change (view->priv->search_entry, TRUE);
-
- return TRUE;
-}
-
-static gboolean
-reset_searched_text (GeditView *view)
-{
- GeditDocument *doc;
-
- doc = GEDIT_DOCUMENT (gtk_text_view_get_buffer (GTK_TEXT_VIEW (view)));
-
- gedit_document_set_search_text (doc, "", GEDIT_SEARCH_DONT_SET_FLAGS);
-
- return TRUE;
-}
-
-static gboolean
-start_interactive_search (GeditView *view)
-{
- view->priv->search_mode = SEARCH;
-
- return start_interactive_search_real (view);
-}
-
-static gboolean
-start_interactive_goto_line (GeditView *view)
-{
- view->priv->search_mode = GOTO_LINE;
-
- return start_interactive_search_real (view);
-}
-
-static gint
-gedit_view_expose (GtkWidget *widget,
- GdkEventExpose *event)
-{
- GtkTextView *text_view;
- GeditDocument *doc;
-
- text_view = GTK_TEXT_VIEW (widget);
-
- doc = GEDIT_DOCUMENT (gtk_text_view_get_buffer (text_view));
-
- if ((event->window == gtk_text_view_get_window (text_view, GTK_TEXT_WINDOW_TEXT)) &&
- gedit_document_get_enable_search_highlighting (doc))
- {
- GdkRectangle visible_rect;
- GtkTextIter iter1, iter2;
-
- gtk_text_view_get_visible_rect (text_view, &visible_rect);
- gtk_text_view_get_line_at_y (text_view, &iter1,
- visible_rect.y, NULL);
- gtk_text_view_get_line_at_y (text_view, &iter2,
- visible_rect.y
- + visible_rect.height, NULL);
- gtk_text_iter_forward_line (&iter2);
-
- _gedit_document_search_region (doc,
- &iter1,
- &iter2);
- }
-
- return (* GTK_WIDGET_CLASS (gedit_view_parent_class)->expose_event)(widget, event);
-}
-
-static GdkAtom
-drag_get_uri_target (GtkWidget *widget,
- GdkDragContext *context)
-{
- GdkAtom target;
- GtkTargetList *tl;
-
- tl = gtk_target_list_new (NULL, 0);
- gtk_target_list_add_uri_targets (tl, 0);
-
- target = gtk_drag_dest_find_target (widget, context, tl);
- gtk_target_list_unref (tl);
-
- return target;
-}
-
-static gboolean
-gedit_view_drag_motion (GtkWidget *widget,
- GdkDragContext *context,
- gint x,
- gint y,
- guint timestamp)
-{
- gboolean result;
-
- /* Chain up to allow textview to scroll and position dnd mark, note
- * that this needs to be checked if gtksourceview or gtktextview
- * changes drag_motion behaviour */
- result = GTK_WIDGET_CLASS (gedit_view_parent_class)->drag_motion (widget, context, x, y, timestamp);
-
- /* If this is a URL, deal with it here */
- if (drag_get_uri_target (widget, context) != GDK_NONE)
- {
- gdk_drag_status (context, context->suggested_action, timestamp);
- result = TRUE;
- }
-
- return result;
-}
-
-static void
-gedit_view_drag_data_received (GtkWidget *widget,
- GdkDragContext *context,
- gint x,
- gint y,
- GtkSelectionData *selection_data,
- guint info,
- guint timestamp)
-{
- gchar **uri_list;
-
- /* If this is an URL emit DROP_URIS, otherwise chain up the signal */
- if (info == TARGET_URI_LIST)
- {
- uri_list = gedit_utils_drop_get_uris (selection_data);
-
- if (uri_list != NULL)
- {
- g_signal_emit (widget, view_signals[DROP_URIS], 0, uri_list);
- g_strfreev (uri_list);
-
- gtk_drag_finish (context, TRUE, FALSE, timestamp);
- }
- }
- else
- {
- GTK_WIDGET_CLASS (gedit_view_parent_class)->drag_data_received (widget, context, x, y, selection_data, info, timestamp);
- }
-}
-
-static gboolean
-gedit_view_drag_drop (GtkWidget *widget,
- GdkDragContext *context,
- gint x,
- gint y,
- guint timestamp)
-{
- gboolean result;
- GdkAtom target;
-
- /* If this is a URL, just get the drag data */
- target = drag_get_uri_target (widget, context);
-
- if (target != GDK_NONE)
- {
- gtk_drag_get_data (widget, context, target, timestamp);
- result = TRUE;
- }
- else
- {
- /* Chain up */
- result = GTK_WIDGET_CLASS (gedit_view_parent_class)->drag_drop (widget, context, x, y, timestamp);
- }
-
- return result;
-}
-
-static void
-show_line_numbers_toggled (GtkMenu *menu,
- GeditView *view)
-{
- gboolean show;
-
- show = gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (menu));
-
- gedit_prefs_manager_set_display_line_numbers (show);
-}
-
-static GtkWidget *
-create_line_numbers_menu (GtkWidget *view)
-{
- GtkWidget *menu;
- GtkWidget *item;
-
- menu = gtk_menu_new ();
-
- item = gtk_check_menu_item_new_with_mnemonic (_("_Display line numbers"));
- gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (item),
- gtk_source_view_get_show_line_numbers (GTK_SOURCE_VIEW (view)));
- g_signal_connect (item, "toggled",
- G_CALLBACK (show_line_numbers_toggled), view);
- gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
-
- gtk_widget_show_all (menu);
-
- return menu;
-}
-
-static void
-show_line_numbers_menu (GtkWidget *view,
- GdkEventButton *event)
-{
- GtkWidget *menu;
-
- menu = create_line_numbers_menu (view);
-
- gtk_menu_popup (GTK_MENU (menu),
- NULL,
- NULL,
- NULL,
- NULL,
- event->button,
- event->time);
-}
-
-static gboolean
-gedit_view_button_press_event (GtkWidget *widget, GdkEventButton *event)
-{
- if ((event->type == GDK_BUTTON_PRESS) &&
- (event->button == 3) &&
- (event->window == gtk_text_view_get_window (GTK_TEXT_VIEW (widget),
- GTK_TEXT_WINDOW_LEFT)))
- {
- show_line_numbers_menu (widget, event);
-
- return TRUE;
- }
-
- return GTK_WIDGET_CLASS (gedit_view_parent_class)->button_press_event (widget, event);
-}
-
-static void
-search_highlight_updated_cb (GeditDocument *doc,
- GtkTextIter *start,
- GtkTextIter *end,
- GeditView *view)
-{
- GdkRectangle visible_rect;
- GdkRectangle updated_rect;
- GdkRectangle redraw_rect;
- gint y;
- gint height;
- GtkTextView *text_view;
-
- text_view = GTK_TEXT_VIEW (view);
-
- g_return_if_fail (gedit_document_get_enable_search_highlighting (
- GEDIT_DOCUMENT (gtk_text_view_get_buffer (text_view))));
-
- /* get visible area */
- gtk_text_view_get_visible_rect (text_view, &visible_rect);
-
- /* get updated rectangle */
- gtk_text_view_get_line_yrange (text_view, start, &y, &height);
- updated_rect.y = y;
- gtk_text_view_get_line_yrange (text_view, end, &y, &height);
- updated_rect.height = y + height - updated_rect.y;
- updated_rect.x = visible_rect.x;
- updated_rect.width = visible_rect.width;
-
- /* intersect both rectangles to see whether we need to queue a redraw */
- if (gdk_rectangle_intersect (&updated_rect, &visible_rect, &redraw_rect))
- {
- GdkRectangle widget_rect;
-
- gtk_text_view_buffer_to_window_coords (text_view,
- GTK_TEXT_WINDOW_WIDGET,
- redraw_rect.x,
- redraw_rect.y,
- &widget_rect.x,
- &widget_rect.y);
-
- widget_rect.width = redraw_rect.width;
- widget_rect.height = redraw_rect.height;
-
- gtk_widget_queue_draw_area (GTK_WIDGET (text_view),
- widget_rect.x,
- widget_rect.y,
- widget_rect.width,
- widget_rect.height);
- }
-}
-
-/* There is no "official" way to reset the im context in GtkTextView */
-static void
-reset_im_context (GtkTextView *text_view)
-{
- if (text_view->need_im_reset)
- {
- text_view->need_im_reset = FALSE;
- gtk_im_context_reset (text_view->im_context);
- }
-}
-
-static void
-delete_line (GtkTextView *text_view,
- gint count)
-{
- GtkTextIter start;
- GtkTextIter end;
- GtkTextBuffer *buffer;
-
- buffer = gtk_text_view_get_buffer (text_view);
-
- reset_im_context (text_view);
-
- /* If there is a selection delete the selected lines and
- * ignore count */
- if (gtk_text_buffer_get_selection_bounds (buffer, &start, &end))
- {
- gtk_text_iter_order (&start, &end);
-
- if (gtk_text_iter_starts_line (&end))
- {
- /* Do no delete the line with the cursor if the cursor
- * is at the beginning of the line */
- count = 0;
- }
- else
- count = 1;
- }
-
- gtk_text_iter_set_line_offset (&start, 0);
-
- if (count > 0)
- {
- gtk_text_iter_forward_lines (&end, count);
-
- if (gtk_text_iter_is_end (&end))
- {
- if (gtk_text_iter_backward_line (&start) && !gtk_text_iter_ends_line (&start))
- gtk_text_iter_forward_to_line_end (&start);
- }
- }
- else if (count < 0)
- {
- if (!gtk_text_iter_ends_line (&end))
- gtk_text_iter_forward_to_line_end (&end);
-
- while (count < 0)
- {
- if (!gtk_text_iter_backward_line (&start))
- break;
-
- ++count;
- }
-
- if (count == 0)
- {
- if (!gtk_text_iter_ends_line (&start))
- gtk_text_iter_forward_to_line_end (&start);
- }
- else
- gtk_text_iter_forward_line (&end);
- }
-
- if (!gtk_text_iter_equal (&start, &end))
- {
- GtkTextIter cur = start;
- gtk_text_iter_set_line_offset (&cur, 0);
-
- gtk_text_buffer_begin_user_action (buffer);
-
- gtk_text_buffer_place_cursor (buffer, &cur);
-
- gtk_text_buffer_delete_interactive (buffer,
- &start,
- &end,
- gtk_text_view_get_editable (text_view));
-
- gtk_text_buffer_end_user_action (buffer);
-
- gtk_text_view_scroll_mark_onscreen (text_view,
- gtk_text_buffer_get_insert (buffer));
- }
- else
- {
- gtk_widget_error_bell (GTK_WIDGET (text_view));
- }
-}
-
-static void
-gedit_view_delete_from_cursor (GtkTextView *text_view,
- GtkDeleteType type,
- gint count)
-{
- /* We override the standard handler for delete_from_cursor since
- the GTK_DELETE_PARAGRAPHS case is not implemented as we like (i.e. it
- does not remove the carriage return in the previous line)
- */
- switch (type)
- {
- case GTK_DELETE_PARAGRAPHS:
- delete_line (text_view, count);
- break;
- default:
- GTK_TEXT_VIEW_CLASS (gedit_view_parent_class)->delete_from_cursor(text_view, type, count);
- break;
- }
-}
diff --git a/gedit/gedit-view.h b/gedit/gedit-view.h
deleted file mode 100755
index dc0096bc..00000000
--- a/gedit/gedit-view.h
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * gedit-view.h
- * This file is part of gedit
- *
- * Copyright (C) 1998, 1999 Alex Roberts, Evan Lawrence
- * Copyright (C) 2000, 2001 Chema Celorio, Paolo Maggi
- * Copyright (C) 2002-2005 Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 1998-2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- */
-
-#ifndef __GEDIT_VIEW_H__
-#define __GEDIT_VIEW_H__
-
-#include <gtk/gtk.h>
-
-#include <gedit/gedit-document.h>
-#include <gtksourceview/gtksourceview.h>
-
-G_BEGIN_DECLS
-
-/*
- * Type checking and casting macros
- */
-#define GEDIT_TYPE_VIEW (gedit_view_get_type ())
-#define GEDIT_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GEDIT_TYPE_VIEW, GeditView))
-#define GEDIT_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GEDIT_TYPE_VIEW, GeditViewClass))
-#define GEDIT_IS_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GEDIT_TYPE_VIEW))
-#define GEDIT_IS_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEDIT_TYPE_VIEW))
-#define GEDIT_VIEW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GEDIT_TYPE_VIEW, GeditViewClass))
-
-/* Private structure type */
-typedef struct _GeditViewPrivate GeditViewPrivate;
-
-/*
- * Main object structure
- */
-typedef struct _GeditView GeditView;
-
-struct _GeditView
-{
- GtkSourceView view;
-
- /*< private > */
- GeditViewPrivate *priv;
-};
-
-/*
- * Class definition
- */
-typedef struct _GeditViewClass GeditViewClass;
-
-struct _GeditViewClass
-{
- GtkSourceViewClass parent_class;
-
- /* FIXME: Do we need placeholders ? */
-
- /* Key bindings */
- gboolean (* start_interactive_search) (GeditView *view);
- gboolean (* start_interactive_goto_line)(GeditView *view);
- gboolean (* reset_searched_text) (GeditView *view);
-
- void (* drop_uris) (GeditView *view,
- gchar **uri_list);
-};
-
-/*
- * Public methods
- */
-GType gedit_view_get_type (void) G_GNUC_CONST;
-
-GtkWidget *gedit_view_new (GeditDocument *doc);
-
-void gedit_view_cut_clipboard (GeditView *view);
-void gedit_view_copy_clipboard (GeditView *view);
-void gedit_view_paste_clipboard (GeditView *view);
-void gedit_view_delete_selection (GeditView *view);
-void gedit_view_select_all (GeditView *view);
-
-void gedit_view_scroll_to_cursor (GeditView *view);
-
-void gedit_view_set_font (GeditView *view,
- gboolean def,
- const gchar *font_name);
-
-G_END_DECLS
-
-#endif /* __GEDIT_VIEW_H__ */
diff --git a/gedit/gedit-window-private.h b/gedit/gedit-window-private.h
deleted file mode 100755
index 399433af..00000000
--- a/gedit/gedit-window-private.h
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * gedit-window-private.h
- * This file is part of gedit
- *
- * Copyright (C) 2005 - Paolo Maggi
- *
- * 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
- * MERCHANWINDOWILITY 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifndef __GEDIT_WINDOW_PRIVATE_H__
-#define __GEDIT_WINDOW_PRIVATE_H__
-
-#include "gedit/gedit-window.h"
-#include "gedit-prefs-manager.h"
-#include "gedit-message-bus.h"
-
-#ifdef OS_OSX
-#include <ige-mac-integration.h>
-#endif
-
-G_BEGIN_DECLS
-
-/* WindowPrivate is in a separate .h so that we can access it from gedit-commands */
-
-struct _GeditWindowPrivate
-{
- GtkWidget *notebook;
-
- GtkWidget *side_panel;
- GtkWidget *bottom_panel;
-
- GtkWidget *hpaned;
- GtkWidget *vpaned;
-
- GtkWidget *tab_width_combo;
- GtkWidget *language_combo;
-
- GeditMessageBus *message_bus;
-
- /* Widgets for fullscreen mode */
- GtkWidget *fullscreen_controls;
- guint fullscreen_animation_timeout_id;
- gboolean fullscreen_animation_enter;
-
- /* statusbar and context ids for statusbar messages */
- GtkWidget *statusbar;
- guint generic_message_cid;
- guint tip_message_cid;
- guint tab_width_id;
- guint spaces_instead_of_tabs_id;
- guint language_changed_id;
-
- /* Menus & Toolbars */
- GtkUIManager *manager;
- GtkActionGroup *action_group;
- GtkActionGroup *always_sensitive_action_group;
- GtkActionGroup *close_action_group;
- GtkActionGroup *quit_action_group;
- GtkActionGroup *panes_action_group;
- GtkActionGroup *languages_action_group;
- GtkActionGroup *documents_list_action_group;
- guint documents_list_menu_ui_id;
- GtkWidget *toolbar;
- GtkWidget *toolbar_recent_menu;
- GtkWidget *menubar;
- GeditToolbarSetting toolbar_style;
-
- /* recent files */
- GtkActionGroup *recents_action_group;
- guint recents_menu_ui_id;
- gulong recents_handler_id;
-
- GeditTab *active_tab;
- gint num_tabs;
-
- gint num_tabs_with_error;
-
- gint width;
- gint height;
- GdkWindowState window_state;
-
- gint side_panel_size;
- gint bottom_panel_size;
-
- GeditWindowState state;
-
- gint bottom_panel_item_removed_handler_id;
-
- GtkWindowGroup *window_group;
-
- GFile *default_location;
-
-#ifdef OS_OSX
- IgeMacMenuGroup *mac_menu_group;
-#endif
-
- gboolean removing_tabs : 1;
- gboolean dispose_has_run : 1;
-};
-
-G_END_DECLS
-
-#endif /* __GEDIT_WINDOW_PRIVATE_H__ */
diff --git a/gedit/gedit-window.c b/gedit/gedit-window.c
deleted file mode 100755
index c4bf2403..00000000
--- a/gedit/gedit-window.c
+++ /dev/null
@@ -1,4798 +0,0 @@
-/*
- * gedit-window.c
- * This file is part of gedit
- *
- * Copyright (C) 2005 - Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <time.h>
-#include <sys/types.h>
-#include <string.h>
-
-#include <glib/gi18n.h>
-#include <gio/gio.h>
-
-#include "gedit-ui.h"
-#include "gedit-window.h"
-#include "gedit-window-private.h"
-#include "gedit-app.h"
-#include "gedit-notebook.h"
-#include "gedit-statusbar.h"
-#include "gedit-utils.h"
-#include "gedit-commands.h"
-#include "gedit-debug.h"
-#include "gedit-language-manager.h"
-#include "gedit-prefs-manager-app.h"
-#include "gedit-panel.h"
-#include "gedit-documents-panel.h"
-#include "gedit-plugins-engine.h"
-#include "gedit-enum-types.h"
-#include "gedit-dirs.h"
-#include "gedit-status-combo-box.h"
-
-#ifdef OS_OSX
-#include "osx/gedit-osx.h"
-#endif
-
-#define LANGUAGE_NONE (const gchar *)"LangNone"
-#define GEDIT_UIFILE "gedit-ui.xml"
-#define TAB_WIDTH_DATA "GeditWindowTabWidthData"
-#define LANGUAGE_DATA "GeditWindowLanguageData"
-#define FULLSCREEN_ANIMATION_SPEED 4
-
-#define GEDIT_WINDOW_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object),\
- GEDIT_TYPE_WINDOW, \
- GeditWindowPrivate))
-
-/* Signals */
-enum
-{
- TAB_ADDED,
- TAB_REMOVED,
- TABS_REORDERED,
- ACTIVE_TAB_CHANGED,
- ACTIVE_TAB_STATE_CHANGED,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
-enum
-{
- PROP_0,
- PROP_STATE
-};
-
-enum
-{
- TARGET_URI_LIST = 100
-};
-
-G_DEFINE_TYPE(GeditWindow, gedit_window, GTK_TYPE_WINDOW)
-
-static void recent_manager_changed (GtkRecentManager *manager,
- GeditWindow *window);
-
-static void
-gedit_window_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- GeditWindow *window = GEDIT_WINDOW (object);
-
- switch (prop_id)
- {
- case PROP_STATE:
- g_value_set_enum (value,
- gedit_window_get_state (window));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-save_panes_state (GeditWindow *window)
-{
- gint pane_page;
-
- gedit_debug (DEBUG_WINDOW);
-
- if (gedit_prefs_manager_window_size_can_set ())
- gedit_prefs_manager_set_window_size (window->priv->width,
- window->priv->height);
-
- if (gedit_prefs_manager_window_state_can_set ())
- gedit_prefs_manager_set_window_state (window->priv->window_state);
-
- if ((window->priv->side_panel_size > 0) &&
- gedit_prefs_manager_side_panel_size_can_set ())
- gedit_prefs_manager_set_side_panel_size (
- window->priv->side_panel_size);
-
- pane_page = _gedit_panel_get_active_item_id (GEDIT_PANEL (window->priv->side_panel));
- if (pane_page != 0 &&
- gedit_prefs_manager_side_panel_active_page_can_set ())
- gedit_prefs_manager_set_side_panel_active_page (pane_page);
-
- if ((window->priv->bottom_panel_size > 0) &&
- gedit_prefs_manager_bottom_panel_size_can_set ())
- gedit_prefs_manager_set_bottom_panel_size (
- window->priv->bottom_panel_size);
-
- pane_page = _gedit_panel_get_active_item_id (GEDIT_PANEL (window->priv->bottom_panel));
- if (pane_page != 0 &&
- gedit_prefs_manager_bottom_panel_active_page_can_set ())
- gedit_prefs_manager_set_bottom_panel_active_page (pane_page);
-}
-
-#ifdef OS_OSX
-static GtkMenuItem *
-ui_manager_menu_item (GtkUIManager *uimanager,
- const gchar *path)
-{
- return GTK_MENU_ITEM (gtk_ui_manager_get_widget (uimanager, path));
-}
-
-static void
-add_mac_root_menu (GeditWindow *window)
-{
- if (window->priv->mac_menu_group != NULL)
- {
- return;
- }
-
- window->priv->mac_menu_group = ige_mac_menu_add_app_menu_group ();
-
- ige_mac_menu_add_app_menu_item (window->priv->mac_menu_group,
- ui_manager_menu_item (window->priv->manager, "/ui/MenuBar/HelpMenu/HelpAboutMenu"),
- NULL);
-}
-
-static void
-remove_mac_root_menu (GeditWindow *window)
-{
- if (window->priv->mac_menu_group == NULL)
- {
- return;
- }
-
- ige_mac_menu_remove_app_menu_group (window->priv->mac_menu_group);
- window->priv->mac_menu_group = NULL;
-}
-
-static gboolean
-gedit_window_focus_in_event (GtkWidget *widget,
- GdkEventFocus *event)
-{
- add_mac_root_menu (GEDIT_WINDOW (widget));
- return GTK_WIDGET_CLASS (gedit_window_parent_class)->focus_in_event (widget, event);
-}
-
-static gboolean
-gedit_window_focus_out_event (GtkWidget *widget,
- GdkEventFocus *event)
-{
- remove_mac_root_menu (GEDIT_WINDOW (widget));
- return GTK_WIDGET_CLASS (gedit_window_parent_class)->focus_out_event (widget, event);
-}
-#endif
-
-static void
-gedit_window_dispose (GObject *object)
-{
- GeditWindow *window;
-
- gedit_debug (DEBUG_WINDOW);
-
- window = GEDIT_WINDOW (object);
-
- /* Stop tracking removal of panes otherwise we always
- * end up with thinking we had no pane active, since they
- * should all be removed below */
- if (window->priv->bottom_panel_item_removed_handler_id != 0)
- {
- g_signal_handler_disconnect (window->priv->bottom_panel,
- window->priv->bottom_panel_item_removed_handler_id);
- window->priv->bottom_panel_item_removed_handler_id = 0;
- }
-
- /* First of all, force collection so that plugins
- * really drop some of the references.
- */
- gedit_plugins_engine_garbage_collect (gedit_plugins_engine_get_default ());
-
- /* save the panes position and make sure to deactivate plugins
- * for this window, but only once */
- if (!window->priv->dispose_has_run)
- {
- save_panes_state (window);
-
- gedit_plugins_engine_deactivate_plugins (gedit_plugins_engine_get_default (),
- window);
- window->priv->dispose_has_run = TRUE;
- }
-
- if (window->priv->fullscreen_animation_timeout_id != 0)
- {
- g_source_remove (window->priv->fullscreen_animation_timeout_id);
- window->priv->fullscreen_animation_timeout_id = 0;
- }
-
- if (window->priv->fullscreen_controls != NULL)
- {
- gtk_widget_destroy (window->priv->fullscreen_controls);
-
- window->priv->fullscreen_controls = NULL;
- }
-
- if (window->priv->recents_handler_id != 0)
- {
- GtkRecentManager *recent_manager;
-
- recent_manager = gtk_recent_manager_get_default ();
- g_signal_handler_disconnect (recent_manager,
- window->priv->recents_handler_id);
- window->priv->recents_handler_id = 0;
- }
-
- if (window->priv->manager != NULL)
- {
- g_object_unref (window->priv->manager);
- window->priv->manager = NULL;
- }
-
- if (window->priv->message_bus != NULL)
- {
- g_object_unref (window->priv->message_bus);
- window->priv->message_bus = NULL;
- }
-
- if (window->priv->window_group != NULL)
- {
- g_object_unref (window->priv->window_group);
- window->priv->window_group = NULL;
- }
-
- /* Now that there have broken some reference loops,
- * force collection again.
- */
- gedit_plugins_engine_garbage_collect (gedit_plugins_engine_get_default ());
-
-#ifdef OS_OSX
- remove_mac_root_menu (window);
-#endif
-
- G_OBJECT_CLASS (gedit_window_parent_class)->dispose (object);
-}
-
-static void
-gedit_window_finalize (GObject *object)
-{
- GeditWindow *window;
-
- gedit_debug (DEBUG_WINDOW);
-
- window = GEDIT_WINDOW (object);
-
- if (window->priv->default_location != NULL)
- g_object_unref (window->priv->default_location);
-
- G_OBJECT_CLASS (gedit_window_parent_class)->finalize (object);
-}
-
-static gboolean
-gedit_window_window_state_event (GtkWidget *widget,
- GdkEventWindowState *event)
-{
- GeditWindow *window = GEDIT_WINDOW (widget);
-
- window->priv->window_state = event->new_window_state;
-
- if (event->changed_mask &
- (GDK_WINDOW_STATE_MAXIMIZED | GDK_WINDOW_STATE_FULLSCREEN))
- {
- gboolean show;
-
- show = !(event->new_window_state &
- (GDK_WINDOW_STATE_MAXIMIZED | GDK_WINDOW_STATE_FULLSCREEN));
-
- _gedit_statusbar_set_has_resize_grip (GEDIT_STATUSBAR (window->priv->statusbar),
- show);
- }
-
- return FALSE;
-}
-
-static gboolean
-gedit_window_configure_event (GtkWidget *widget,
- GdkEventConfigure *event)
-{
- GeditWindow *window = GEDIT_WINDOW (widget);
-
- window->priv->width = event->width;
- window->priv->height = event->height;
-
- return GTK_WIDGET_CLASS (gedit_window_parent_class)->configure_event (widget, event);
-}
-
-/*
- * GtkWindow catches keybindings for the menu items _before_ passing them to
- * the focused widget. This is unfortunate and means that pressing ctrl+V
- * in an entry on a panel ends up pasting text in the TextView.
- * Here we override GtkWindow's handler to do the same things that it
- * does, but in the opposite order and then we chain up to the grand
- * parent handler, skipping gtk_window_key_press_event.
- */
-static gboolean
-gedit_window_key_press_event (GtkWidget *widget,
- GdkEventKey *event)
-{
- static gpointer grand_parent_class = NULL;
- GtkWindow *window = GTK_WINDOW (widget);
- gboolean handled = FALSE;
-
- if (grand_parent_class == NULL)
- grand_parent_class = g_type_class_peek_parent (gedit_window_parent_class);
-
- /* handle focus widget key events */
- if (!handled)
- handled = gtk_window_propagate_key_event (window, event);
-
- /* handle mnemonics and accelerators */
- if (!handled)
- handled = gtk_window_activate_key (window, event);
-
- /* Chain up, invokes binding set */
- if (!handled)
- handled = GTK_WIDGET_CLASS (grand_parent_class)->key_press_event (widget, event);
-
- return handled;
-}
-
-static void
-gedit_window_tab_removed (GeditWindow *window,
- GeditTab *tab)
-{
- gedit_plugins_engine_garbage_collect (gedit_plugins_engine_get_default ());
-}
-
-static void
-gedit_window_class_init (GeditWindowClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
-
- klass->tab_removed = gedit_window_tab_removed;
-
- object_class->dispose = gedit_window_dispose;
- object_class->finalize = gedit_window_finalize;
- object_class->get_property = gedit_window_get_property;
-
- widget_class->window_state_event = gedit_window_window_state_event;
- widget_class->configure_event = gedit_window_configure_event;
- widget_class->key_press_event = gedit_window_key_press_event;
-
-#ifdef OS_OSX
- widget_class->focus_in_event = gedit_window_focus_in_event;
- widget_class->focus_out_event = gedit_window_focus_out_event;
-#endif
-
- signals[TAB_ADDED] =
- g_signal_new ("tab_added",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (GeditWindowClass, tab_added),
- NULL, NULL,
- g_cclosure_marshal_VOID__OBJECT,
- G_TYPE_NONE,
- 1,
- GEDIT_TYPE_TAB);
- signals[TAB_REMOVED] =
- g_signal_new ("tab_removed",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (GeditWindowClass, tab_removed),
- NULL, NULL,
- g_cclosure_marshal_VOID__OBJECT,
- G_TYPE_NONE,
- 1,
- GEDIT_TYPE_TAB);
- signals[TABS_REORDERED] =
- g_signal_new ("tabs_reordered",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (GeditWindowClass, tabs_reordered),
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE,
- 0);
- signals[ACTIVE_TAB_CHANGED] =
- g_signal_new ("active_tab_changed",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (GeditWindowClass, active_tab_changed),
- NULL, NULL,
- g_cclosure_marshal_VOID__OBJECT,
- G_TYPE_NONE,
- 1,
- GEDIT_TYPE_TAB);
- signals[ACTIVE_TAB_STATE_CHANGED] =
- g_signal_new ("active_tab_state_changed",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (GeditWindowClass, active_tab_state_changed),
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE,
- 0);
-
- g_object_class_install_property (object_class,
- PROP_STATE,
- g_param_spec_flags ("state",
- "State",
- "The window's state",
- GEDIT_TYPE_WINDOW_STATE,
- GEDIT_WINDOW_STATE_NORMAL,
- G_PARAM_READABLE |
- G_PARAM_STATIC_STRINGS));
-
- g_type_class_add_private (object_class, sizeof(GeditWindowPrivate));
-}
-
-static void
-menu_item_select_cb (GtkMenuItem *proxy,
- GeditWindow *window)
-{
- GtkAction *action;
- char *message;
-
- action = gtk_activatable_get_related_action (GTK_ACTIVATABLE (proxy));
- g_return_if_fail (action != NULL);
-
- g_object_get (G_OBJECT (action), "tooltip", &message, NULL);
- if (message)
- {
- gtk_statusbar_push (GTK_STATUSBAR (window->priv->statusbar),
- window->priv->tip_message_cid, message);
- g_free (message);
- }
-}
-
-static void
-menu_item_deselect_cb (GtkMenuItem *proxy,
- GeditWindow *window)
-{
- gtk_statusbar_pop (GTK_STATUSBAR (window->priv->statusbar),
- window->priv->tip_message_cid);
-}
-
-static void
-connect_proxy_cb (GtkUIManager *manager,
- GtkAction *action,
- GtkWidget *proxy,
- GeditWindow *window)
-{
- if (GTK_IS_MENU_ITEM (proxy))
- {
- g_signal_connect (proxy, "select",
- G_CALLBACK (menu_item_select_cb), window);
- g_signal_connect (proxy, "deselect",
- G_CALLBACK (menu_item_deselect_cb), window);
- }
-}
-
-static void
-disconnect_proxy_cb (GtkUIManager *manager,
- GtkAction *action,
- GtkWidget *proxy,
- GeditWindow *window)
-{
- if (GTK_IS_MENU_ITEM (proxy))
- {
- g_signal_handlers_disconnect_by_func
- (proxy, G_CALLBACK (menu_item_select_cb), window);
- g_signal_handlers_disconnect_by_func
- (proxy, G_CALLBACK (menu_item_deselect_cb), window);
- }
-}
-
-static void
-apply_toolbar_style (GeditWindow *window,
- GtkWidget *toolbar)
-{
- switch (window->priv->toolbar_style)
- {
- case GEDIT_TOOLBAR_SYSTEM:
- gedit_debug_message (DEBUG_WINDOW, "GEDIT: SYSTEM");
- gtk_toolbar_unset_style (
- GTK_TOOLBAR (toolbar));
- break;
-
- case GEDIT_TOOLBAR_ICONS:
- gedit_debug_message (DEBUG_WINDOW, "GEDIT: ICONS");
- gtk_toolbar_set_style (
- GTK_TOOLBAR (toolbar),
- GTK_TOOLBAR_ICONS);
- break;
-
- case GEDIT_TOOLBAR_ICONS_AND_TEXT:
- gedit_debug_message (DEBUG_WINDOW, "GEDIT: ICONS_AND_TEXT");
- gtk_toolbar_set_style (
- GTK_TOOLBAR (toolbar),
- GTK_TOOLBAR_BOTH);
- break;
-
- case GEDIT_TOOLBAR_ICONS_BOTH_HORIZ:
- gedit_debug_message (DEBUG_WINDOW, "GEDIT: ICONS_BOTH_HORIZ");
- gtk_toolbar_set_style (
- GTK_TOOLBAR (toolbar),
- GTK_TOOLBAR_BOTH_HORIZ);
- break;
- }
-}
-
-/* Returns TRUE if toolbar is visible */
-static gboolean
-set_toolbar_style (GeditWindow *window,
- GeditWindow *origin)
-{
- gboolean visible;
- GeditToolbarSetting style;
- GtkAction *action;
-
- if (origin == NULL)
- visible = gedit_prefs_manager_get_toolbar_visible ();
- else
- visible = GTK_WIDGET_VISIBLE (origin->priv->toolbar);
-
- /* Set visibility */
- if (visible)
- gtk_widget_show (window->priv->toolbar);
- else
- gtk_widget_hide (window->priv->toolbar);
-
- action = gtk_action_group_get_action (window->priv->always_sensitive_action_group,
- "ViewToolbar");
-
- if (gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action)) != visible)
- gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), visible);
-
- /* Set style */
- if (origin == NULL)
- style = gedit_prefs_manager_get_toolbar_buttons_style ();
- else
- style = origin->priv->toolbar_style;
-
- window->priv->toolbar_style = style;
-
- apply_toolbar_style (window, window->priv->toolbar);
-
- return visible;
-}
-
-static void
-update_next_prev_doc_sensitivity (GeditWindow *window,
- GeditTab *tab)
-{
- gint tab_number;
- GtkNotebook *notebook;
- GtkAction *action;
-
- gedit_debug (DEBUG_WINDOW);
-
- notebook = GTK_NOTEBOOK (_gedit_window_get_notebook (window));
-
- tab_number = gtk_notebook_page_num (notebook, GTK_WIDGET (tab));
- g_return_if_fail (tab_number >= 0);
-
- action = gtk_action_group_get_action (window->priv->action_group,
- "DocumentsPreviousDocument");
- gtk_action_set_sensitive (action, tab_number != 0);
-
- action = gtk_action_group_get_action (window->priv->action_group,
- "DocumentsNextDocument");
- gtk_action_set_sensitive (action,
- tab_number < gtk_notebook_get_n_pages (notebook) - 1);
-}
-
-static void
-update_next_prev_doc_sensitivity_per_window (GeditWindow *window)
-{
- GeditTab *tab;
- GtkAction *action;
-
- gedit_debug (DEBUG_WINDOW);
-
- tab = gedit_window_get_active_tab (window);
- if (tab != NULL)
- {
- update_next_prev_doc_sensitivity (window, tab);
-
- return;
- }
-
- action = gtk_action_group_get_action (window->priv->action_group,
- "DocumentsPreviousDocument");
- gtk_action_set_sensitive (action, FALSE);
-
- action = gtk_action_group_get_action (window->priv->action_group,
- "DocumentsNextDocument");
- gtk_action_set_sensitive (action, FALSE);
-
-}
-
-static void
-received_clipboard_contents (GtkClipboard *clipboard,
- GtkSelectionData *selection_data,
- GeditWindow *window)
-{
- gboolean sens;
- GtkAction *action;
-
- /* getting clipboard contents is async, so we need to
- * get the current tab and its state */
-
- if (window->priv->active_tab != NULL)
- {
- GeditTabState state;
- gboolean state_normal;
-
- state = gedit_tab_get_state (window->priv->active_tab);
- state_normal = (state == GEDIT_TAB_STATE_NORMAL);
-
- sens = state_normal &&
- gtk_selection_data_targets_include_text (selection_data);
- }
- else
- {
- sens = FALSE;
- }
-
- action = gtk_action_group_get_action (window->priv->action_group,
- "EditPaste");
-
- gtk_action_set_sensitive (action, sens);
-
- g_object_unref (window);
-}
-
-static void
-set_paste_sensitivity_according_to_clipboard (GeditWindow *window,
- GtkClipboard *clipboard)
-{
- GdkDisplay *display;
-
- display = gtk_clipboard_get_display (clipboard);
-
- if (gdk_display_supports_selection_notification (display))
- {
- gtk_clipboard_request_contents (clipboard,
- gdk_atom_intern_static_string ("TARGETS"),
- (GtkClipboardReceivedFunc) received_clipboard_contents,
- g_object_ref (window));
- }
- else
- {
- GtkAction *action;
-
- action = gtk_action_group_get_action (window->priv->action_group,
- "EditPaste");
-
- /* XFIXES extension not availbale, make
- * Paste always sensitive */
- gtk_action_set_sensitive (action, TRUE);
- }
-}
-
-static void
-set_sensitivity_according_to_tab (GeditWindow *window,
- GeditTab *tab)
-{
- GeditDocument *doc;
- GeditView *view;
- GtkAction *action;
- gboolean b;
- gboolean state_normal;
- gboolean editable;
- GeditTabState state;
- GtkClipboard *clipboard;
- GeditLockdownMask lockdown;
-
- g_return_if_fail (GEDIT_TAB (tab));
-
- gedit_debug (DEBUG_WINDOW);
-
- lockdown = gedit_app_get_lockdown (gedit_app_get_default ());
-
- state = gedit_tab_get_state (tab);
- state_normal = (state == GEDIT_TAB_STATE_NORMAL);
-
- view = gedit_tab_get_view (tab);
- editable = gtk_text_view_get_editable (GTK_TEXT_VIEW (view));
-
- doc = GEDIT_DOCUMENT (gtk_text_view_get_buffer (GTK_TEXT_VIEW (view)));
-
- clipboard = gtk_widget_get_clipboard (GTK_WIDGET (window),
- GDK_SELECTION_CLIPBOARD);
-
- action = gtk_action_group_get_action (window->priv->action_group,
- "FileSave");
- gtk_action_set_sensitive (action,
- (state_normal ||
- (state == GEDIT_TAB_STATE_EXTERNALLY_MODIFIED_NOTIFICATION) ||
- (state == GEDIT_TAB_STATE_SHOWING_PRINT_PREVIEW)) &&
- !gedit_document_get_readonly (doc) &&
- !(lockdown & GEDIT_LOCKDOWN_SAVE_TO_DISK));
-
- action = gtk_action_group_get_action (window->priv->action_group,
- "FileSaveAs");
- gtk_action_set_sensitive (action,
- (state_normal ||
- (state == GEDIT_TAB_STATE_SAVING_ERROR) ||
- (state == GEDIT_TAB_STATE_EXTERNALLY_MODIFIED_NOTIFICATION) ||
- (state == GEDIT_TAB_STATE_SHOWING_PRINT_PREVIEW)) &&
- !(lockdown & GEDIT_LOCKDOWN_SAVE_TO_DISK));
-
- action = gtk_action_group_get_action (window->priv->action_group,
- "FileRevert");
- gtk_action_set_sensitive (action,
- (state_normal ||
- (state == GEDIT_TAB_STATE_EXTERNALLY_MODIFIED_NOTIFICATION)) &&
- !gedit_document_is_untitled (doc));
-
- action = gtk_action_group_get_action (window->priv->action_group,
- "FilePrintPreview");
- gtk_action_set_sensitive (action,
- state_normal &&
- !(lockdown & GEDIT_LOCKDOWN_PRINTING));
-
- action = gtk_action_group_get_action (window->priv->action_group,
- "FilePrint");
- gtk_action_set_sensitive (action,
- (state_normal ||
- (state == GEDIT_TAB_STATE_SHOWING_PRINT_PREVIEW)) &&
- !(lockdown & GEDIT_LOCKDOWN_PRINTING));
-
- action = gtk_action_group_get_action (window->priv->close_action_group,
- "FileClose");
-
- gtk_action_set_sensitive (action,
- (state != GEDIT_TAB_STATE_CLOSING) &&
- (state != GEDIT_TAB_STATE_SAVING) &&
- (state != GEDIT_TAB_STATE_SHOWING_PRINT_PREVIEW) &&
- (state != GEDIT_TAB_STATE_PRINTING) &&
- (state != GEDIT_TAB_STATE_PRINT_PREVIEWING) &&
- (state != GEDIT_TAB_STATE_SAVING_ERROR));
-
- action = gtk_action_group_get_action (window->priv->action_group,
- "EditUndo");
- gtk_action_set_sensitive (action,
- state_normal &&
- gtk_source_buffer_can_undo (GTK_SOURCE_BUFFER (doc)));
-
- action = gtk_action_group_get_action (window->priv->action_group,
- "EditRedo");
- gtk_action_set_sensitive (action,
- state_normal &&
- gtk_source_buffer_can_redo (GTK_SOURCE_BUFFER (doc)));
-
- action = gtk_action_group_get_action (window->priv->action_group,
- "EditCut");
- gtk_action_set_sensitive (action,
- state_normal &&
- editable &&
- gtk_text_buffer_get_has_selection (GTK_TEXT_BUFFER (doc)));
-
- action = gtk_action_group_get_action (window->priv->action_group,
- "EditCopy");
- gtk_action_set_sensitive (action,
- (state_normal ||
- state == GEDIT_TAB_STATE_EXTERNALLY_MODIFIED_NOTIFICATION) &&
- gtk_text_buffer_get_has_selection (GTK_TEXT_BUFFER (doc)));
-
- action = gtk_action_group_get_action (window->priv->action_group,
- "EditPaste");
- if (state_normal && editable)
- {
- set_paste_sensitivity_according_to_clipboard (window,
- clipboard);
- }
- else
- {
- gtk_action_set_sensitive (action, FALSE);
- }
-
- action = gtk_action_group_get_action (window->priv->action_group,
- "EditDelete");
- gtk_action_set_sensitive (action,
- state_normal &&
- editable &&
- gtk_text_buffer_get_has_selection (GTK_TEXT_BUFFER (doc)));
-
- action = gtk_action_group_get_action (window->priv->action_group,
- "SearchFind");
- gtk_action_set_sensitive (action,
- (state_normal ||
- state == GEDIT_TAB_STATE_EXTERNALLY_MODIFIED_NOTIFICATION));
-
- action = gtk_action_group_get_action (window->priv->action_group,
- "SearchIncrementalSearch");
- gtk_action_set_sensitive (action,
- (state_normal ||
- state == GEDIT_TAB_STATE_EXTERNALLY_MODIFIED_NOTIFICATION));
-
- action = gtk_action_group_get_action (window->priv->action_group,
- "SearchReplace");
- gtk_action_set_sensitive (action,
- state_normal &&
- editable);
-
- b = gedit_document_get_can_search_again (doc);
- action = gtk_action_group_get_action (window->priv->action_group,
- "SearchFindNext");
- gtk_action_set_sensitive (action,
- (state_normal ||
- state == GEDIT_TAB_STATE_EXTERNALLY_MODIFIED_NOTIFICATION) && b);
-
- action = gtk_action_group_get_action (window->priv->action_group,
- "SearchFindPrevious");
- gtk_action_set_sensitive (action,
- (state_normal ||
- state == GEDIT_TAB_STATE_EXTERNALLY_MODIFIED_NOTIFICATION) && b);
-
- action = gtk_action_group_get_action (window->priv->action_group,
- "SearchClearHighlight");
- gtk_action_set_sensitive (action,
- (state_normal ||
- state == GEDIT_TAB_STATE_EXTERNALLY_MODIFIED_NOTIFICATION) && b);
-
- action = gtk_action_group_get_action (window->priv->action_group,
- "SearchGoToLine");
- gtk_action_set_sensitive (action,
- (state_normal ||
- state == GEDIT_TAB_STATE_EXTERNALLY_MODIFIED_NOTIFICATION));
-
- action = gtk_action_group_get_action (window->priv->action_group,
- "ViewHighlightMode");
- gtk_action_set_sensitive (action,
- (state != GEDIT_TAB_STATE_CLOSING) &&
- gedit_prefs_manager_get_enable_syntax_highlighting ());
-
- update_next_prev_doc_sensitivity (window, tab);
-
- gedit_plugins_engine_update_plugins_ui (gedit_plugins_engine_get_default (),
- window);
-}
-
-static void
-language_toggled (GtkToggleAction *action,
- GeditWindow *window)
-{
- GeditDocument *doc;
- GtkSourceLanguage *lang;
- const gchar *lang_id;
-
- if (gtk_toggle_action_get_active (action) == FALSE)
- return;
-
- doc = gedit_window_get_active_document (window);
- if (doc == NULL)
- return;
-
- lang_id = gtk_action_get_name (GTK_ACTION (action));
-
- if (strcmp (lang_id, LANGUAGE_NONE) == 0)
- {
- /* Normal (no highlighting) */
- lang = NULL;
- }
- else
- {
- lang = gtk_source_language_manager_get_language (
- gedit_get_language_manager (),
- lang_id);
- if (lang == NULL)
- {
- g_warning ("Could not get language %s\n", lang_id);
- }
- }
-
- gedit_document_set_language (doc, lang);
-}
-
-static gchar *
-escape_section_name (const gchar *name)
-{
- gchar *ret;
-
- ret = g_markup_escape_text (name, -1);
-
- /* Replace '/' with '-' to avoid problems in xml paths */
- g_strdelimit (ret, "/", '-');
-
- return ret;
-}
-
-static void
-create_language_menu_item (GtkSourceLanguage *lang,
- gint index,
- guint ui_id,
- GeditWindow *window)
-{
- GtkAction *section_action;
- GtkRadioAction *action;
- GtkAction *normal_action;
- GSList *group;
- const gchar *section;
- gchar *escaped_section;
- const gchar *lang_id;
- const gchar *lang_name;
- gchar *escaped_lang_name;
- gchar *tip;
- gchar *path;
-
- section = gtk_source_language_get_section (lang);
- escaped_section = escape_section_name (section);
-
- /* check if the section submenu exists or create it */
- section_action = gtk_action_group_get_action (window->priv->languages_action_group,
- escaped_section);
-
- if (section_action == NULL)
- {
- gchar *section_name;
-
- section_name = gedit_utils_escape_underscores (section, -1);
-
- section_action = gtk_action_new (escaped_section,
- section_name,
- NULL,
- NULL);
-
- g_free (section_name);
-
- gtk_action_group_add_action (window->priv->languages_action_group,
- section_action);
- g_object_unref (section_action);
-
- gtk_ui_manager_add_ui (window->priv->manager,
- ui_id,
- "/MenuBar/ViewMenu/ViewHighlightModeMenu/LanguagesMenuPlaceholder",
- escaped_section,
- escaped_section,
- GTK_UI_MANAGER_MENU,
- FALSE);
- }
-
- /* now add the language item to the section */
- lang_name = gtk_source_language_get_name (lang);
- lang_id = gtk_source_language_get_id (lang);
-
- escaped_lang_name = gedit_utils_escape_underscores (lang_name, -1);
-
- tip = g_strdup_printf (_("Use %s highlight mode"), lang_name);
- path = g_strdup_printf ("/MenuBar/ViewMenu/ViewHighlightModeMenu/LanguagesMenuPlaceholder/%s",
- escaped_section);
-
- action = gtk_radio_action_new (lang_id,
- escaped_lang_name,
- tip,
- NULL,
- index);
-
- g_free (escaped_lang_name);
-
- /* Action is added with a NULL accel to make the accel overridable */
- gtk_action_group_add_action_with_accel (window->priv->languages_action_group,
- GTK_ACTION (action),
- NULL);
- g_object_unref (action);
-
- /* add the action to the same radio group of the "Normal" action */
- normal_action = gtk_action_group_get_action (window->priv->languages_action_group,
- LANGUAGE_NONE);
- group = gtk_radio_action_get_group (GTK_RADIO_ACTION (normal_action));
- gtk_radio_action_set_group (action, group);
-
- g_signal_connect (action,
- "activate",
- G_CALLBACK (language_toggled),
- window);
-
- gtk_ui_manager_add_ui (window->priv->manager,
- ui_id,
- path,
- lang_id,
- lang_id,
- GTK_UI_MANAGER_MENUITEM,
- FALSE);
-
- g_free (path);
- g_free (tip);
- g_free (escaped_section);
-}
-
-static void
-create_languages_menu (GeditWindow *window)
-{
- GtkRadioAction *action_none;
- GSList *languages;
- GSList *l;
- guint id;
- gint i;
-
- gedit_debug (DEBUG_WINDOW);
-
- /* add the "Plain Text" item before all the others */
-
- /* Translators: "Plain Text" means that no highlight mode is selected in the
- * "View->Highlight Mode" submenu and so syntax highlighting is disabled */
- action_none = gtk_radio_action_new (LANGUAGE_NONE, _("Plain Text"),
- _("Disable syntax highlighting"),
- NULL,
- -1);
-
- gtk_action_group_add_action (window->priv->languages_action_group,
- GTK_ACTION (action_none));
- g_object_unref (action_none);
-
- g_signal_connect (action_none,
- "activate",
- G_CALLBACK (language_toggled),
- window);
-
- id = gtk_ui_manager_new_merge_id (window->priv->manager);
-
- gtk_ui_manager_add_ui (window->priv->manager,
- id,
- "/MenuBar/ViewMenu/ViewHighlightModeMenu/LanguagesMenuPlaceholder",
- LANGUAGE_NONE,
- LANGUAGE_NONE,
- GTK_UI_MANAGER_MENUITEM,
- TRUE);
-
- gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action_none), TRUE);
-
- /* now add all the known languages */
- languages = gedit_language_manager_list_languages_sorted (
- gedit_get_language_manager (),
- FALSE);
-
- for (l = languages, i = 0; l != NULL; l = l->next, ++i)
- {
- create_language_menu_item (l->data,
- i,
- id,
- window);
- }
-
- g_slist_free (languages);
-}
-
-static void
-update_languages_menu (GeditWindow *window)
-{
- GeditDocument *doc;
- GList *actions;
- GList *l;
- GtkAction *action;
- GtkSourceLanguage *lang;
- const gchar *lang_id;
-
- doc = gedit_window_get_active_document (window);
- if (doc == NULL)
- return;
-
- lang = gedit_document_get_language (doc);
- if (lang != NULL)
- lang_id = gtk_source_language_get_id (lang);
- else
- lang_id = LANGUAGE_NONE;
-
- actions = gtk_action_group_list_actions (window->priv->languages_action_group);
-
- /* prevent recursion */
- for (l = actions; l != NULL; l = l->next)
- {
- g_signal_handlers_block_by_func (GTK_ACTION (l->data),
- G_CALLBACK (language_toggled),
- window);
- }
-
- action = gtk_action_group_get_action (window->priv->languages_action_group,
- lang_id);
-
- gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), TRUE);
-
- for (l = actions; l != NULL; l = l->next)
- {
- g_signal_handlers_unblock_by_func (GTK_ACTION (l->data),
- G_CALLBACK (language_toggled),
- window);
- }
-
- g_list_free (actions);
-}
-
-void
-_gedit_recent_add (GeditWindow *window,
- const gchar *uri,
- const gchar *mime)
-{
- GtkRecentManager *recent_manager;
- GtkRecentData *recent_data;
-
- static gchar *groups[2] = {
- "gedit",
- NULL
- };
-
- recent_manager = gtk_recent_manager_get_default ();
-
- recent_data = g_slice_new (GtkRecentData);
-
- recent_data->display_name = NULL;
- recent_data->description = NULL;
- recent_data->mime_type = (gchar *) mime;
- recent_data->app_name = (gchar *) g_get_application_name ();
- recent_data->app_exec = g_strjoin (" ", g_get_prgname (), "%u", NULL);
- recent_data->groups = groups;
- recent_data->is_private = FALSE;
-
- gtk_recent_manager_add_full (recent_manager,
- uri,
- recent_data);
-
- g_free (recent_data->app_exec);
-
- g_slice_free (GtkRecentData, recent_data);
-}
-
-void
-_gedit_recent_remove (GeditWindow *window,
- const gchar *uri)
-{
- GtkRecentManager *recent_manager;
-
- recent_manager = gtk_recent_manager_get_default ();
-
- gtk_recent_manager_remove_item (recent_manager, uri, NULL);
-}
-
-static void
-open_recent_file (const gchar *uri,
- GeditWindow *window)
-{
- GSList *uris = NULL;
-
- uris = g_slist_prepend (uris, (gpointer) uri);
-
- if (gedit_commands_load_uris (window, uris, NULL, 0) != 1)
- {
- _gedit_recent_remove (window, uri);
- }
-
- g_slist_free (uris);
-}
-
-static void
-recent_chooser_item_activated (GtkRecentChooser *chooser,
- GeditWindow *window)
-{
- gchar *uri;
-
- uri = gtk_recent_chooser_get_current_uri (chooser);
-
- open_recent_file (uri, window);
-
- g_free (uri);
-}
-
-static void
-recents_menu_activate (GtkAction *action,
- GeditWindow *window)
-{
- GtkRecentInfo *info;
- const gchar *uri;
-
- info = g_object_get_data (G_OBJECT (action), "gtk-recent-info");
- g_return_if_fail (info != NULL);
-
- uri = gtk_recent_info_get_uri (info);
-
- open_recent_file (uri, window);
-}
-
-static gint
-sort_recents_mru (GtkRecentInfo *a, GtkRecentInfo *b)
-{
- return (gtk_recent_info_get_modified (b) - gtk_recent_info_get_modified (a));
-}
-
-static void update_recent_files_menu (GeditWindow *window);
-
-static void
-recent_manager_changed (GtkRecentManager *manager,
- GeditWindow *window)
-{
- /* regenerate the menu when the model changes */
- update_recent_files_menu (window);
-}
-
-/*
- * Manually construct the inline recents list in the File menu.
- * Hopefully gtk 2.12 will add support for it.
- */
-static void
-update_recent_files_menu (GeditWindow *window)
-{
- GeditWindowPrivate *p = window->priv;
- GtkRecentManager *recent_manager;
- gint max_recents;
- GList *actions, *l, *items;
- GList *filtered_items = NULL;
- gint i;
-
- gedit_debug (DEBUG_WINDOW);
-
- max_recents = gedit_prefs_manager_get_max_recents ();
-
- g_return_if_fail (p->recents_action_group != NULL);
-
- if (p->recents_menu_ui_id != 0)
- gtk_ui_manager_remove_ui (p->manager,
- p->recents_menu_ui_id);
-
- actions = gtk_action_group_list_actions (p->recents_action_group);
- for (l = actions; l != NULL; l = l->next)
- {
- g_signal_handlers_disconnect_by_func (GTK_ACTION (l->data),
- G_CALLBACK (recents_menu_activate),
- window);
- gtk_action_group_remove_action (p->recents_action_group,
- GTK_ACTION (l->data));
- }
- g_list_free (actions);
-
- p->recents_menu_ui_id = gtk_ui_manager_new_merge_id (p->manager);
-
- recent_manager = gtk_recent_manager_get_default ();
- items = gtk_recent_manager_get_items (recent_manager);
-
- /* filter */
- for (l = items; l != NULL; l = l->next)
- {
- GtkRecentInfo *info = l->data;
-
- if (!gtk_recent_info_has_group (info, "gedit"))
- continue;
-
- filtered_items = g_list_prepend (filtered_items, info);
- }
-
- /* sort */
- filtered_items = g_list_sort (filtered_items,
- (GCompareFunc) sort_recents_mru);
-
- i = 0;
- for (l = filtered_items; l != NULL; l = l->next)
- {
- gchar *action_name;
- const gchar *display_name;
- gchar *escaped;
- gchar *label;
- gchar *uri;
- gchar *ruri;
- gchar *tip;
- GtkAction *action;
- GtkRecentInfo *info = l->data;
-
- /* clamp */
- if (i >= max_recents)
- break;
-
- i++;
-
- action_name = g_strdup_printf ("recent-info-%d", i);
-
- display_name = gtk_recent_info_get_display_name (info);
- escaped = gedit_utils_escape_underscores (display_name, -1);
- if (i >= 10)
- label = g_strdup_printf ("%d. %s",
- i,
- escaped);
- else
- label = g_strdup_printf ("_%d. %s",
- i,
- escaped);
- g_free (escaped);
-
- /* gtk_recent_info_get_uri_display (info) is buggy and
- * works only for local files */
- uri = gedit_utils_uri_for_display (gtk_recent_info_get_uri (info));
- ruri = gedit_utils_replace_home_dir_with_tilde (uri);
- g_free (uri);
-
- /* Translators: %s is a URI */
- tip = g_strdup_printf (_("Open '%s'"), ruri);
- g_free (ruri);
-
- action = gtk_action_new (action_name,
- label,
- tip,
- NULL);
-
- g_object_set_data_full (G_OBJECT (action),
- "gtk-recent-info",
- gtk_recent_info_ref (info),
- (GDestroyNotify) gtk_recent_info_unref);
-
- g_signal_connect (action,
- "activate",
- G_CALLBACK (recents_menu_activate),
- window);
-
- gtk_action_group_add_action (p->recents_action_group,
- action);
- g_object_unref (action);
-
- gtk_ui_manager_add_ui (p->manager,
- p->recents_menu_ui_id,
- "/MenuBar/FileMenu/FileRecentsPlaceholder",
- action_name,
- action_name,
- GTK_UI_MANAGER_MENUITEM,
- FALSE);
-
- g_free (action_name);
- g_free (label);
- g_free (tip);
- }
-
- g_list_free (filtered_items);
-
- g_list_foreach (items, (GFunc) gtk_recent_info_unref, NULL);
- g_list_free (items);
-}
-
-static void
-set_non_homogeneus (GtkWidget *widget, gpointer data)
-{
- gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (widget), FALSE);
-}
-
-static void
-toolbar_visibility_changed (GtkWidget *toolbar,
- GeditWindow *window)
-{
- gboolean visible;
- GtkAction *action;
-
- visible = GTK_WIDGET_VISIBLE (toolbar);
-
- if (gedit_prefs_manager_toolbar_visible_can_set ())
- gedit_prefs_manager_set_toolbar_visible (visible);
-
- action = gtk_action_group_get_action (window->priv->always_sensitive_action_group,
- "ViewToolbar");
-
- if (gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action)) != visible)
- gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), visible);
-}
-
-static GtkWidget *
-setup_toolbar_open_button (GeditWindow *window,
- GtkWidget *toolbar)
-{
- GtkRecentManager *recent_manager;
- GtkRecentFilter *filter;
- GtkWidget *toolbar_recent_menu;
- GtkToolItem *open_button;
- GtkAction *action;
-
- recent_manager = gtk_recent_manager_get_default ();
-
- /* recent files menu tool button */
- toolbar_recent_menu = gtk_recent_chooser_menu_new_for_manager (recent_manager);
-
- gtk_recent_chooser_set_local_only (GTK_RECENT_CHOOSER (toolbar_recent_menu),
- FALSE);
- gtk_recent_chooser_set_sort_type (GTK_RECENT_CHOOSER (toolbar_recent_menu),
- GTK_RECENT_SORT_MRU);
- gtk_recent_chooser_set_limit (GTK_RECENT_CHOOSER (toolbar_recent_menu),
- gedit_prefs_manager_get_max_recents ());
-
- filter = gtk_recent_filter_new ();
- gtk_recent_filter_add_group (filter, "gedit");
- gtk_recent_chooser_set_filter (GTK_RECENT_CHOOSER (toolbar_recent_menu),
- filter);
-
- g_signal_connect (toolbar_recent_menu,
- "item_activated",
- G_CALLBACK (recent_chooser_item_activated),
- window);
-
- /* add the custom Open button to the toolbar */
- open_button = gtk_menu_tool_button_new_from_stock (GTK_STOCK_OPEN);
- gtk_menu_tool_button_set_menu (GTK_MENU_TOOL_BUTTON (open_button),
- toolbar_recent_menu);
-
- gtk_tool_item_set_tooltip_text (open_button, _("Open a file"));
- gtk_menu_tool_button_set_arrow_tooltip_text (GTK_MENU_TOOL_BUTTON (open_button),
- _("Open a recently used file"));
-
- action = gtk_action_group_get_action (window->priv->always_sensitive_action_group,
- "FileOpen");
- g_object_set (action,
- "is_important", TRUE,
- "short_label", _("Open"),
- NULL);
- gtk_activatable_set_related_action (GTK_ACTIVATABLE (open_button),
- action);
-
- gtk_toolbar_insert (GTK_TOOLBAR (toolbar),
- open_button,
- 1);
-
- return toolbar_recent_menu;
-}
-
-static void
-create_menu_bar_and_toolbar (GeditWindow *window,
- GtkWidget *main_box)
-{
- GtkActionGroup *action_group;
- GtkAction *action;
- GtkUIManager *manager;
- GtkRecentManager *recent_manager;
- GError *error = NULL;
- gchar *ui_file;
-
- gedit_debug (DEBUG_WINDOW);
-
- manager = gtk_ui_manager_new ();
- window->priv->manager = manager;
-
- gtk_window_add_accel_group (GTK_WINDOW (window),
- gtk_ui_manager_get_accel_group (manager));
-
- action_group = gtk_action_group_new ("GeditWindowAlwaysSensitiveActions");
- gtk_action_group_set_translation_domain (action_group, NULL);
- gtk_action_group_add_actions (action_group,
- gedit_always_sensitive_menu_entries,
- G_N_ELEMENTS (gedit_always_sensitive_menu_entries),
- window);
- gtk_action_group_add_toggle_actions (action_group,
- gedit_always_sensitive_toggle_menu_entries,
- G_N_ELEMENTS (gedit_always_sensitive_toggle_menu_entries),
- window);
-
- gtk_ui_manager_insert_action_group (manager, action_group, 0);
- g_object_unref (action_group);
- window->priv->always_sensitive_action_group = action_group;
-
- action_group = gtk_action_group_new ("GeditWindowActions");
- gtk_action_group_set_translation_domain (action_group, NULL);
- gtk_action_group_add_actions (action_group,
- gedit_menu_entries,
- G_N_ELEMENTS (gedit_menu_entries),
- window);
- gtk_ui_manager_insert_action_group (manager, action_group, 0);
- g_object_unref (action_group);
- window->priv->action_group = action_group;
-
- /* set short labels to use in the toolbar */
- action = gtk_action_group_get_action (action_group, "FileSave");
- g_object_set (action, "short_label", _("Save"), NULL);
- action = gtk_action_group_get_action (action_group, "FilePrint");
- g_object_set (action, "short_label", _("Print"), NULL);
- action = gtk_action_group_get_action (action_group, "SearchFind");
- g_object_set (action, "short_label", _("Find"), NULL);
- action = gtk_action_group_get_action (action_group, "SearchReplace");
- g_object_set (action, "short_label", _("Replace"), NULL);
-
- /* set which actions should have priority on the toolbar */
- action = gtk_action_group_get_action (action_group, "FileSave");
- g_object_set (action, "is_important", TRUE, NULL);
- action = gtk_action_group_get_action (action_group, "EditUndo");
- g_object_set (action, "is_important", TRUE, NULL);
-
- action_group = gtk_action_group_new ("GeditQuitWindowActions");
- gtk_action_group_set_translation_domain (action_group, NULL);
- gtk_action_group_add_actions (action_group,
- gedit_quit_menu_entries,
- G_N_ELEMENTS (gedit_quit_menu_entries),
- window);
-
- gtk_ui_manager_insert_action_group (manager, action_group, 0);
- g_object_unref (action_group);
- window->priv->quit_action_group = action_group;
-
- action_group = gtk_action_group_new ("GeditCloseWindowActions");
- gtk_action_group_set_translation_domain (action_group, NULL);
- gtk_action_group_add_actions (action_group,
- gedit_close_menu_entries,
- G_N_ELEMENTS (gedit_close_menu_entries),
- window);
-
- gtk_ui_manager_insert_action_group (manager, action_group, 0);
- g_object_unref (action_group);
- window->priv->close_action_group = action_group;
-
- action_group = gtk_action_group_new ("GeditWindowPanesActions");
- gtk_action_group_set_translation_domain (action_group, NULL);
- gtk_action_group_add_toggle_actions (action_group,
- gedit_panes_toggle_menu_entries,
- G_N_ELEMENTS (gedit_panes_toggle_menu_entries),
- window);
-
- gtk_ui_manager_insert_action_group (manager, action_group, 0);
- g_object_unref (action_group);
- window->priv->panes_action_group = action_group;
-
- /* now load the UI definition */
- ui_file = gedit_dirs_get_ui_file (GEDIT_UIFILE);
- gtk_ui_manager_add_ui_from_file (manager, ui_file, &error);
- if (error != NULL)
- {
- g_warning ("Could not merge %s: %s", ui_file, error->message);
- g_error_free (error);
- }
- g_free (ui_file);
-
-#if !GTK_CHECK_VERSION (2, 17, 4)
- /* merge page setup menu manually since we cannot have conditional
- * sections in gedit-ui.xml */
- {
- guint merge_id;
- GeditLockdownMask lockdown;
-
- merge_id = gtk_ui_manager_new_merge_id (manager);
- gtk_ui_manager_add_ui (manager,
- merge_id,
- "/MenuBar/FileMenu/FileOps_5",
- "FilePageSetupMenu",
- "FilePageSetup",
- GTK_UI_MANAGER_MENUITEM,
- FALSE);
-
- lockdown = gedit_app_get_lockdown (gedit_app_get_default ());
- action = gtk_action_group_get_action (window->priv->action_group,
- "FilePageSetup");
- gtk_action_set_sensitive (action,
- !(lockdown & GEDIT_LOCKDOWN_PRINT_SETUP));
- }
-#endif
-
- /* show tooltips in the statusbar */
- g_signal_connect (manager,
- "connect_proxy",
- G_CALLBACK (connect_proxy_cb),
- window);
- g_signal_connect (manager,
- "disconnect_proxy",
- G_CALLBACK (disconnect_proxy_cb),
- window);
-
- /* recent files menu */
- action_group = gtk_action_group_new ("RecentFilesActions");
- gtk_action_group_set_translation_domain (action_group, NULL);
- window->priv->recents_action_group = action_group;
- gtk_ui_manager_insert_action_group (manager, action_group, 0);
- g_object_unref (action_group);
-
- recent_manager = gtk_recent_manager_get_default ();
- window->priv->recents_handler_id = g_signal_connect (recent_manager,
- "changed",
- G_CALLBACK (recent_manager_changed),
- window);
- update_recent_files_menu (window);
-
- /* languages menu */
- action_group = gtk_action_group_new ("LanguagesActions");
- gtk_action_group_set_translation_domain (action_group, NULL);
- window->priv->languages_action_group = action_group;
- gtk_ui_manager_insert_action_group (manager, action_group, 0);
- g_object_unref (action_group);
- create_languages_menu (window);
-
- /* list of open documents menu */
- action_group = gtk_action_group_new ("DocumentsListActions");
- gtk_action_group_set_translation_domain (action_group, NULL);
- window->priv->documents_list_action_group = action_group;
- gtk_ui_manager_insert_action_group (manager, action_group, 0);
- g_object_unref (action_group);
-
- window->priv->menubar = gtk_ui_manager_get_widget (manager, "/MenuBar");
- gtk_box_pack_start (GTK_BOX (main_box),
- window->priv->menubar,
- FALSE,
- FALSE,
- 0);
-
- window->priv->toolbar = gtk_ui_manager_get_widget (manager, "/ToolBar");
- gtk_box_pack_start (GTK_BOX (main_box),
- window->priv->toolbar,
- FALSE,
- FALSE,
- 0);
-
- set_toolbar_style (window, NULL);
-
- window->priv->toolbar_recent_menu = setup_toolbar_open_button (window,
- window->priv->toolbar);
-
- gtk_container_foreach (GTK_CONTAINER (window->priv->toolbar),
- (GtkCallback)set_non_homogeneus,
- NULL);
-
- g_signal_connect_after (G_OBJECT (window->priv->toolbar),
- "show",
- G_CALLBACK (toolbar_visibility_changed),
- window);
- g_signal_connect_after (G_OBJECT (window->priv->toolbar),
- "hide",
- G_CALLBACK (toolbar_visibility_changed),
- window);
-}
-
-static void
-documents_list_menu_activate (GtkToggleAction *action,
- GeditWindow *window)
-{
- gint n;
-
- if (gtk_toggle_action_get_active (action) == FALSE)
- return;
-
- n = gtk_radio_action_get_current_value (GTK_RADIO_ACTION (action));
- gtk_notebook_set_current_page (GTK_NOTEBOOK (window->priv->notebook), n);
-}
-
-static gchar *
-get_menu_tip_for_tab (GeditTab *tab)
-{
- GeditDocument *doc;
- gchar *uri;
- gchar *ruri;
- gchar *tip;
-
- doc = gedit_tab_get_document (tab);
-
- uri = gedit_document_get_uri_for_display (doc);
- ruri = gedit_utils_replace_home_dir_with_tilde (uri);
- g_free (uri);
-
- /* Translators: %s is a URI */
- tip = g_strdup_printf (_("Activate '%s'"), ruri);
- g_free (ruri);
-
- return tip;
-}
-
-static void
-update_documents_list_menu (GeditWindow *window)
-{
- GeditWindowPrivate *p = window->priv;
- GList *actions, *l;
- gint n, i;
- guint id;
- GSList *group = NULL;
-
- gedit_debug (DEBUG_WINDOW);
-
- g_return_if_fail (p->documents_list_action_group != NULL);
-
- if (p->documents_list_menu_ui_id != 0)
- gtk_ui_manager_remove_ui (p->manager,
- p->documents_list_menu_ui_id);
-
- actions = gtk_action_group_list_actions (p->documents_list_action_group);
- for (l = actions; l != NULL; l = l->next)
- {
- g_signal_handlers_disconnect_by_func (GTK_ACTION (l->data),
- G_CALLBACK (documents_list_menu_activate),
- window);
- gtk_action_group_remove_action (p->documents_list_action_group,
- GTK_ACTION (l->data));
- }
- g_list_free (actions);
-
- n = gtk_notebook_get_n_pages (GTK_NOTEBOOK (p->notebook));
-
- id = (n > 0) ? gtk_ui_manager_new_merge_id (p->manager) : 0;
-
- for (i = 0; i < n; i++)
- {
- GtkWidget *tab;
- GtkRadioAction *action;
- gchar *action_name;
- gchar *tab_name;
- gchar *name;
- gchar *tip;
- gchar *accel;
-
- tab = gtk_notebook_get_nth_page (GTK_NOTEBOOK (p->notebook), i);
-
- /* NOTE: the action is associated to the position of the tab in
- * the notebook not to the tab itself! This is needed to work
- * around the gtk+ bug #170727: gtk leaves around the accels
- * of the action. Since the accel depends on the tab position
- * the problem is worked around, action with the same name always
- * get the same accel.
- */
- action_name = g_strdup_printf ("Tab_%d", i);
- tab_name = _gedit_tab_get_name (GEDIT_TAB (tab));
- name = gedit_utils_escape_underscores (tab_name, -1);
- tip = get_menu_tip_for_tab (GEDIT_TAB (tab));
-
- /* alt + 1, 2, 3... 0 to switch to the first ten tabs */
- accel = (i < 10) ? g_strdup_printf ("<alt>%d", (i + 1) % 10) : NULL;
-
- action = gtk_radio_action_new (action_name,
- name,
- tip,
- NULL,
- i);
-
- if (group != NULL)
- gtk_radio_action_set_group (action, group);
-
- /* note that group changes each time we add an action, so it must be updated */
- group = gtk_radio_action_get_group (action);
-
- gtk_action_group_add_action_with_accel (p->documents_list_action_group,
- GTK_ACTION (action),
- accel);
-
- g_signal_connect (action,
- "activate",
- G_CALLBACK (documents_list_menu_activate),
- window);
-
- gtk_ui_manager_add_ui (p->manager,
- id,
- "/MenuBar/DocumentsMenu/DocumentsListPlaceholder",
- action_name, action_name,
- GTK_UI_MANAGER_MENUITEM,
- FALSE);
-
- if (GEDIT_TAB (tab) == p->active_tab)
- gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), TRUE);
-
- g_object_unref (action);
-
- g_free (action_name);
- g_free (tab_name);
- g_free (name);
- g_free (tip);
- g_free (accel);
- }
-
- p->documents_list_menu_ui_id = id;
-}
-
-/* Returns TRUE if status bar is visible */
-static gboolean
-set_statusbar_style (GeditWindow *window,
- GeditWindow *origin)
-{
- GtkAction *action;
-
- gboolean visible;
-
- if (origin == NULL)
- visible = gedit_prefs_manager_get_statusbar_visible ();
- else
- visible = GTK_WIDGET_VISIBLE (origin->priv->statusbar);
-
- if (visible)
- gtk_widget_show (window->priv->statusbar);
- else
- gtk_widget_hide (window->priv->statusbar);
-
- action = gtk_action_group_get_action (window->priv->always_sensitive_action_group,
- "ViewStatusbar");
-
- if (gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action)) != visible)
- gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), visible);
-
- return visible;
-}
-
-static void
-statusbar_visibility_changed (GtkWidget *statusbar,
- GeditWindow *window)
-{
- gboolean visible;
- GtkAction *action;
-
- visible = GTK_WIDGET_VISIBLE (statusbar);
-
- if (gedit_prefs_manager_statusbar_visible_can_set ())
- gedit_prefs_manager_set_statusbar_visible (visible);
-
- action = gtk_action_group_get_action (window->priv->always_sensitive_action_group,
- "ViewStatusbar");
-
- if (gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action)) != visible)
- gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), visible);
-}
-
-static void
-tab_width_combo_changed (GeditStatusComboBox *combo,
- GtkMenuItem *item,
- GeditWindow *window)
-{
- GeditView *view;
- guint width_data = 0;
-
- view = gedit_window_get_active_view (window);
-
- if (!view)
- return;
-
- width_data = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (item), TAB_WIDTH_DATA));
-
- if (width_data == 0)
- return;
-
- g_signal_handler_block (view, window->priv->tab_width_id);
- gtk_source_view_set_tab_width (GTK_SOURCE_VIEW (view), width_data);
- g_signal_handler_unblock (view, window->priv->tab_width_id);
-}
-
-static void
-use_spaces_toggled (GtkCheckMenuItem *item,
- GeditWindow *window)
-{
- GeditView *view;
-
- view = gedit_window_get_active_view (window);
-
- g_signal_handler_block (view, window->priv->spaces_instead_of_tabs_id);
- gtk_source_view_set_insert_spaces_instead_of_tabs (
- GTK_SOURCE_VIEW (view),
- gtk_check_menu_item_get_active (item));
- g_signal_handler_unblock (view, window->priv->spaces_instead_of_tabs_id);
-}
-
-static void
-language_combo_changed (GeditStatusComboBox *combo,
- GtkMenuItem *item,
- GeditWindow *window)
-{
- GeditDocument *doc;
- GtkSourceLanguage *language;
-
- doc = gedit_window_get_active_document (window);
-
- if (!doc)
- return;
-
- language = GTK_SOURCE_LANGUAGE (g_object_get_data (G_OBJECT (item), LANGUAGE_DATA));
-
- g_signal_handler_block (doc, window->priv->language_changed_id);
- gedit_document_set_language (doc, language);
- g_signal_handler_unblock (doc, window->priv->language_changed_id);
-}
-
-typedef struct
-{
- const gchar *label;
- guint width;
-} TabWidthDefinition;
-
-static void
-fill_tab_width_combo (GeditWindow *window)
-{
- static TabWidthDefinition defs[] = {
- {"2", 2},
- {"4", 4},
- {"8", 8},
- {"", 0}, /* custom size */
- {NULL, 0}
- };
-
- GeditStatusComboBox *combo = GEDIT_STATUS_COMBO_BOX (window->priv->tab_width_combo);
- guint i = 0;
- GtkWidget *item;
-
- while (defs[i].label != NULL)
- {
- item = gtk_menu_item_new_with_label (defs[i].label);
- g_object_set_data (G_OBJECT (item), TAB_WIDTH_DATA, GINT_TO_POINTER (defs[i].width));
-
- gedit_status_combo_box_add_item (combo,
- GTK_MENU_ITEM (item),
- defs[i].label);
-
- if (defs[i].width != 0)
- gtk_widget_show (item);
-
- ++i;
- }
-
- item = gtk_separator_menu_item_new ();
- gedit_status_combo_box_add_item (combo, GTK_MENU_ITEM (item), NULL);
- gtk_widget_show (item);
-
- item = gtk_check_menu_item_new_with_label (_("Use Spaces"));
- gedit_status_combo_box_add_item (combo, GTK_MENU_ITEM (item), NULL);
- gtk_widget_show (item);
-
- g_signal_connect (item,
- "toggled",
- G_CALLBACK (use_spaces_toggled),
- window);
-}
-
-static void
-fill_language_combo (GeditWindow *window)
-{
- GtkSourceLanguageManager *manager;
- GSList *languages;
- GSList *item;
- GtkWidget *menu_item;
- const gchar *name;
-
- manager = gedit_get_language_manager ();
- languages = gedit_language_manager_list_languages_sorted (manager, FALSE);
-
- name = _("Plain Text");
- menu_item = gtk_menu_item_new_with_label (name);
- gtk_widget_show (menu_item);
-
- g_object_set_data (G_OBJECT (menu_item), LANGUAGE_DATA, NULL);
- gedit_status_combo_box_add_item (GEDIT_STATUS_COMBO_BOX (window->priv->language_combo),
- GTK_MENU_ITEM (menu_item),
- name);
-
- for (item = languages; item; item = item->next)
- {
- GtkSourceLanguage *lang = GTK_SOURCE_LANGUAGE (item->data);
-
- name = gtk_source_language_get_name (lang);
- menu_item = gtk_menu_item_new_with_label (name);
- gtk_widget_show (menu_item);
-
- g_object_set_data_full (G_OBJECT (menu_item),
- LANGUAGE_DATA,
- g_object_ref (lang),
- (GDestroyNotify)g_object_unref);
-
- gedit_status_combo_box_add_item (GEDIT_STATUS_COMBO_BOX (window->priv->language_combo),
- GTK_MENU_ITEM (menu_item),
- name);
- }
-
- g_slist_free (languages);
-}
-
-static void
-create_statusbar (GeditWindow *window,
- GtkWidget *main_box)
-{
- gedit_debug (DEBUG_WINDOW);
-
- window->priv->statusbar = gedit_statusbar_new ();
-
- window->priv->generic_message_cid = gtk_statusbar_get_context_id
- (GTK_STATUSBAR (window->priv->statusbar), "generic_message");
- window->priv->tip_message_cid = gtk_statusbar_get_context_id
- (GTK_STATUSBAR (window->priv->statusbar), "tip_message");
-
- gtk_box_pack_end (GTK_BOX (main_box),
- window->priv->statusbar,
- FALSE,
- TRUE,
- 0);
-
- window->priv->tab_width_combo = gedit_status_combo_box_new (_("Tab Width"));
- gtk_widget_show (window->priv->tab_width_combo);
- gtk_box_pack_end (GTK_BOX (window->priv->statusbar),
- window->priv->tab_width_combo,
- FALSE,
- TRUE,
- 0);
-
- fill_tab_width_combo (window);
-
- g_signal_connect (G_OBJECT (window->priv->tab_width_combo),
- "changed",
- G_CALLBACK (tab_width_combo_changed),
- window);
-
- window->priv->language_combo = gedit_status_combo_box_new (NULL);
- gtk_widget_show (window->priv->language_combo);
- gtk_box_pack_end (GTK_BOX (window->priv->statusbar),
- window->priv->language_combo,
- FALSE,
- TRUE,
- 0);
-
- fill_language_combo (window);
-
- g_signal_connect (G_OBJECT (window->priv->language_combo),
- "changed",
- G_CALLBACK (language_combo_changed),
- window);
-
- g_signal_connect_after (G_OBJECT (window->priv->statusbar),
- "show",
- G_CALLBACK (statusbar_visibility_changed),
- window);
- g_signal_connect_after (G_OBJECT (window->priv->statusbar),
- "hide",
- G_CALLBACK (statusbar_visibility_changed),
- window);
-
- set_statusbar_style (window, NULL);
-}
-
-static GeditWindow *
-clone_window (GeditWindow *origin)
-{
- GeditWindow *window;
- GdkScreen *screen;
- GeditApp *app;
- gint panel_page;
-
- gedit_debug (DEBUG_WINDOW);
-
- app = gedit_app_get_default ();
-
- screen = gtk_window_get_screen (GTK_WINDOW (origin));
- window = gedit_app_create_window (app, screen);
-
- if ((origin->priv->window_state & GDK_WINDOW_STATE_MAXIMIZED) != 0)
- {
- gint w, h;
-
- gedit_prefs_manager_get_default_window_size (&w, &h);
- gtk_window_set_default_size (GTK_WINDOW (window), w, h);
- gtk_window_maximize (GTK_WINDOW (window));
- }
- else
- {
- gtk_window_set_default_size (GTK_WINDOW (window),
- origin->priv->width,
- origin->priv->height);
-
- gtk_window_unmaximize (GTK_WINDOW (window));
- }
-
- if ((origin->priv->window_state & GDK_WINDOW_STATE_STICKY ) != 0)
- gtk_window_stick (GTK_WINDOW (window));
- else
- gtk_window_unstick (GTK_WINDOW (window));
-
- /* set the panes size, the paned position will be set when
- * they are mapped */
- window->priv->side_panel_size = origin->priv->side_panel_size;
- window->priv->bottom_panel_size = origin->priv->bottom_panel_size;
-
- panel_page = _gedit_panel_get_active_item_id (GEDIT_PANEL (origin->priv->side_panel));
- _gedit_panel_set_active_item_by_id (GEDIT_PANEL (window->priv->side_panel),
- panel_page);
-
- panel_page = _gedit_panel_get_active_item_id (GEDIT_PANEL (origin->priv->bottom_panel));
- _gedit_panel_set_active_item_by_id (GEDIT_PANEL (window->priv->bottom_panel),
- panel_page);
-
- if (GTK_WIDGET_VISIBLE (origin->priv->side_panel))
- gtk_widget_show (window->priv->side_panel);
- else
- gtk_widget_hide (window->priv->side_panel);
-
- if (GTK_WIDGET_VISIBLE (origin->priv->bottom_panel))
- gtk_widget_show (window->priv->bottom_panel);
- else
- gtk_widget_hide (window->priv->bottom_panel);
-
- set_statusbar_style (window, origin);
- set_toolbar_style (window, origin);
-
- return window;
-}
-
-static void
-update_cursor_position_statusbar (GtkTextBuffer *buffer,
- GeditWindow *window)
-{
- gint row, col;
- GtkTextIter iter;
- GtkTextIter start;
- guint tab_size;
- GeditView *view;
-
- gedit_debug (DEBUG_WINDOW);
-
- if (buffer != GTK_TEXT_BUFFER (gedit_window_get_active_document (window)))
- return;
-
- view = gedit_window_get_active_view (window);
-
- gtk_text_buffer_get_iter_at_mark (buffer,
- &iter,
- gtk_text_buffer_get_insert (buffer));
-
- row = gtk_text_iter_get_line (&iter);
-
- start = iter;
- gtk_text_iter_set_line_offset (&start, 0);
- col = 0;
-
- tab_size = gtk_source_view_get_tab_width (GTK_SOURCE_VIEW (view));
-
- while (!gtk_text_iter_equal (&start, &iter))
- {
- /* FIXME: Are we Unicode compliant here? */
- if (gtk_text_iter_get_char (&start) == '\t')
-
- col += (tab_size - (col % tab_size));
- else
- ++col;
-
- gtk_text_iter_forward_char (&start);
- }
-
- gedit_statusbar_set_cursor_position (
- GEDIT_STATUSBAR (window->priv->statusbar),
- row + 1,
- col + 1);
-}
-
-static void
-update_overwrite_mode_statusbar (GtkTextView *view,
- GeditWindow *window)
-{
- if (view != GTK_TEXT_VIEW (gedit_window_get_active_view (window)))
- return;
-
- /* Note that we have to use !gtk_text_view_get_overwrite since we
- are in the in the signal handler of "toggle overwrite" that is
- G_SIGNAL_RUN_LAST
- */
- gedit_statusbar_set_overwrite (
- GEDIT_STATUSBAR (window->priv->statusbar),
- !gtk_text_view_get_overwrite (view));
-}
-
-#define MAX_TITLE_LENGTH 100
-
-static void
-set_title (GeditWindow *window)
-{
- GeditDocument *doc = NULL;
- gchar *name;
- gchar *dirname = NULL;
- gchar *title = NULL;
- gint len;
-
- if (window->priv->active_tab == NULL)
- {
-#ifdef OS_OSX
- gedit_osx_set_window_title (window, "gedit", NULL);
-#else
- gtk_window_set_title (GTK_WINDOW (window), "gedit");
-#endif
- return;
- }
-
- doc = gedit_tab_get_document (window->priv->active_tab);
- g_return_if_fail (doc != NULL);
-
- name = gedit_document_get_short_name_for_display (doc);
-
- len = g_utf8_strlen (name, -1);
-
- /* if the name is awfully long, truncate it and be done with it,
- * otherwise also show the directory (ellipsized if needed)
- */
- if (len > MAX_TITLE_LENGTH)
- {
- gchar *tmp;
-
- tmp = gedit_utils_str_middle_truncate (name,
- MAX_TITLE_LENGTH);
- g_free (name);
- name = tmp;
- }
- else
- {
- GFile *file;
-
- file = gedit_document_get_location (doc);
- if (file != NULL)
- {
- gchar *str;
-
- str = gedit_utils_location_get_dirname_for_display (file);
- g_object_unref (file);
-
- /* use the remaining space for the dir, but use a min of 20 chars
- * so that we do not end up with a dirname like "(a...b)".
- * This means that in the worst case when the filename is long 99
- * we have a title long 99 + 20, but I think it's a rare enough
- * case to be acceptable. It's justa darn title afterall :)
- */
- dirname = gedit_utils_str_middle_truncate (str,
- MAX (20, MAX_TITLE_LENGTH - len));
- g_free (str);
- }
- }
-
- if (gtk_text_buffer_get_modified (GTK_TEXT_BUFFER (doc)))
- {
- gchar *tmp_name;
-
- tmp_name = g_strdup_printf ("*%s", name);
- g_free (name);
-
- name = tmp_name;
- }
-
- if (gedit_document_get_readonly (doc))
- {
- if (dirname != NULL)
- title = g_strdup_printf ("%s [%s] (%s) - gedit",
- name,
- _("Read-Only"),
- dirname);
- else
- title = g_strdup_printf ("%s [%s] - gedit",
- name,
- _("Read-Only"));
- }
- else
- {
- if (dirname != NULL)
- title = g_strdup_printf ("%s (%s) - gedit",
- name,
- dirname);
- else
- title = g_strdup_printf ("%s - gedit",
- name);
- }
-
-#ifdef OS_OSX
- gedit_osx_set_window_title (window, title, doc);
-#else
- gtk_window_set_title (GTK_WINDOW (window), title);
-#endif
-
- g_free (dirname);
- g_free (name);
- g_free (title);
-}
-
-#undef MAX_TITLE_LENGTH
-
-static void
-set_tab_width_item_blocked (GeditWindow *window,
- GtkMenuItem *item)
-{
- g_signal_handlers_block_by_func (window->priv->tab_width_combo,
- tab_width_combo_changed,
- window);
-
- gedit_status_combo_box_set_item (GEDIT_STATUS_COMBO_BOX (window->priv->tab_width_combo),
- item);
-
- g_signal_handlers_unblock_by_func (window->priv->tab_width_combo,
- tab_width_combo_changed,
- window);
-}
-
-static void
-spaces_instead_of_tabs_changed (GObject *object,
- GParamSpec *pspec,
- GeditWindow *window)
-{
- GeditView *view = GEDIT_VIEW (object);
- gboolean active = gtk_source_view_get_insert_spaces_instead_of_tabs (
- GTK_SOURCE_VIEW (view));
- GList *children = gedit_status_combo_box_get_items (
- GEDIT_STATUS_COMBO_BOX (window->priv->tab_width_combo));
- GtkCheckMenuItem *item;
-
- item = GTK_CHECK_MENU_ITEM (g_list_last (children)->data);
-
- gtk_check_menu_item_set_active (item, active);
-
- g_list_free (children);
-}
-
-static void
-tab_width_changed (GObject *object,
- GParamSpec *pspec,
- GeditWindow *window)
-{
- GList *items;
- GList *item;
- GeditStatusComboBox *combo = GEDIT_STATUS_COMBO_BOX (window->priv->tab_width_combo);
- guint new_tab_width;
- gboolean found = FALSE;
-
- items = gedit_status_combo_box_get_items (combo);
-
- new_tab_width = gtk_source_view_get_tab_width (GTK_SOURCE_VIEW (object));
-
- for (item = items; item; item = item->next)
- {
- guint tab_width = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (item->data), TAB_WIDTH_DATA));
-
- if (tab_width == new_tab_width)
- {
- set_tab_width_item_blocked (window, GTK_MENU_ITEM (item->data));
- found = TRUE;
- }
-
- if (GTK_IS_SEPARATOR_MENU_ITEM (item->next->data))
- {
- if (!found)
- {
- /* Set for the last item the custom thing */
- gchar *text;
-
- text = g_strdup_printf ("%u", new_tab_width);
- gedit_status_combo_box_set_item_text (combo,
- GTK_MENU_ITEM (item->data),
- text);
-
- gtk_label_set_text (GTK_LABEL (gtk_bin_get_child (GTK_BIN (item->data))),
- text);
-
- set_tab_width_item_blocked (window, GTK_MENU_ITEM (item->data));
- gtk_widget_show (GTK_WIDGET (item->data));
- }
- else
- {
- gtk_widget_hide (GTK_WIDGET (item->data));
- }
-
- break;
- }
- }
-
- g_list_free (items);
-}
-
-static void
-language_changed (GObject *object,
- GParamSpec *pspec,
- GeditWindow *window)
-{
- GList *items;
- GList *item;
- GeditStatusComboBox *combo = GEDIT_STATUS_COMBO_BOX (window->priv->language_combo);
- GtkSourceLanguage *new_language;
- const gchar *new_id;
-
- items = gedit_status_combo_box_get_items (combo);
-
- new_language = gtk_source_buffer_get_language (GTK_SOURCE_BUFFER (object));
-
- if (new_language)
- new_id = gtk_source_language_get_id (new_language);
- else
- new_id = NULL;
-
- for (item = items; item; item = item->next)
- {
- GtkSourceLanguage *lang = g_object_get_data (G_OBJECT (item->data), LANGUAGE_DATA);
-
- if ((new_id == NULL && lang == NULL) ||
- (new_id != NULL && lang != NULL && strcmp (gtk_source_language_get_id (lang),
- new_id) == 0))
- {
- g_signal_handlers_block_by_func (window->priv->language_combo,
- language_combo_changed,
- window);
-
- gedit_status_combo_box_set_item (GEDIT_STATUS_COMBO_BOX (window->priv->language_combo),
- GTK_MENU_ITEM (item->data));
-
- g_signal_handlers_unblock_by_func (window->priv->language_combo,
- language_combo_changed,
- window);
- }
- }
-
- g_list_free (items);
-}
-
-static void
-notebook_switch_page (GtkNotebook *book,
- GtkNotebookPage *pg,
- gint page_num,
- GeditWindow *window)
-{
- GeditView *view;
- GeditTab *tab;
- GtkAction *action;
- gchar *action_name;
-
- /* CHECK: I don't know why but it seems notebook_switch_page is called
- two times every time the user change the active tab */
-
- tab = GEDIT_TAB (gtk_notebook_get_nth_page (book, page_num));
- if (tab == window->priv->active_tab)
- return;
-
- if (window->priv->active_tab)
- {
- if (window->priv->tab_width_id)
- {
- g_signal_handler_disconnect (gedit_tab_get_view (window->priv->active_tab),
- window->priv->tab_width_id);
-
- window->priv->tab_width_id = 0;
- }
-
- if (window->priv->spaces_instead_of_tabs_id)
- {
- g_signal_handler_disconnect (gedit_tab_get_view (window->priv->active_tab),
- window->priv->spaces_instead_of_tabs_id);
-
- window->priv->spaces_instead_of_tabs_id = 0;
- }
- }
-
- /* set the active tab */
- window->priv->active_tab = tab;
-
- set_title (window);
- set_sensitivity_according_to_tab (window, tab);
-
- /* activate the right item in the documents menu */
- action_name = g_strdup_printf ("Tab_%d", page_num);
- action = gtk_action_group_get_action (window->priv->documents_list_action_group,
- action_name);
-
- /* sometimes the action doesn't exist yet, and the proper action
- * is set active during the documents list menu creation
- * CHECK: would it be nicer if active_tab was a property and we monitored the notify signal?
- */
- if (action != NULL)
- gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), TRUE);
-
- g_free (action_name);
-
- /* update the syntax menu */
- update_languages_menu (window);
-
- view = gedit_tab_get_view (tab);
-
- /* sync the statusbar */
- update_cursor_position_statusbar (GTK_TEXT_BUFFER (gedit_tab_get_document (tab)),
- window);
- gedit_statusbar_set_overwrite (GEDIT_STATUSBAR (window->priv->statusbar),
- gtk_text_view_get_overwrite (GTK_TEXT_VIEW (view)));
-
- gtk_widget_show (window->priv->tab_width_combo);
- gtk_widget_show (window->priv->language_combo);
-
- window->priv->tab_width_id = g_signal_connect (view,
- "notify::tab-width",
- G_CALLBACK (tab_width_changed),
- window);
- window->priv->spaces_instead_of_tabs_id = g_signal_connect (view,
- "notify::insert-spaces-instead-of-tabs",
- G_CALLBACK (spaces_instead_of_tabs_changed),
- window);
-
- window->priv->language_changed_id = g_signal_connect (gedit_tab_get_document (tab),
- "notify::language",
- G_CALLBACK (language_changed),
- window);
-
- /* call it for the first time */
- tab_width_changed (G_OBJECT (view), NULL, window);
- spaces_instead_of_tabs_changed (G_OBJECT (view), NULL, window);
- language_changed (G_OBJECT (gedit_tab_get_document (tab)), NULL, window);
-
- g_signal_emit (G_OBJECT (window),
- signals[ACTIVE_TAB_CHANGED],
- 0,
- window->priv->active_tab);
-}
-
-static void
-set_sensitivity_according_to_window_state (GeditWindow *window)
-{
- GtkAction *action;
- GeditLockdownMask lockdown;
-
- lockdown = gedit_app_get_lockdown (gedit_app_get_default ());
-
- /* We disable File->Quit/SaveAll/CloseAll while printing to avoid to have two
- operations (save and print/print preview) that uses the message area at
- the same time (may be we can remove this limitation in the future) */
- /* We disable File->Quit/CloseAll if state is saving since saving cannot be
- cancelled (may be we can remove this limitation in the future) */
- gtk_action_group_set_sensitive (window->priv->quit_action_group,
- !(window->priv->state & GEDIT_WINDOW_STATE_SAVING) &&
- !(window->priv->state & GEDIT_WINDOW_STATE_PRINTING));
-
- action = gtk_action_group_get_action (window->priv->action_group,
- "FileCloseAll");
- gtk_action_set_sensitive (action,
- !(window->priv->state & GEDIT_WINDOW_STATE_SAVING) &&
- !(window->priv->state & GEDIT_WINDOW_STATE_PRINTING));
-
- action = gtk_action_group_get_action (window->priv->action_group,
- "FileSaveAll");
- gtk_action_set_sensitive (action,
- !(window->priv->state & GEDIT_WINDOW_STATE_PRINTING) &&
- !(lockdown & GEDIT_LOCKDOWN_SAVE_TO_DISK));
-
- action = gtk_action_group_get_action (window->priv->always_sensitive_action_group,
- "FileNew");
- gtk_action_set_sensitive (action,
- !(window->priv->state & GEDIT_WINDOW_STATE_SAVING_SESSION));
-
- action = gtk_action_group_get_action (window->priv->always_sensitive_action_group,
- "FileOpen");
- gtk_action_set_sensitive (action,
- !(window->priv->state & GEDIT_WINDOW_STATE_SAVING_SESSION));
-
- gtk_action_group_set_sensitive (window->priv->recents_action_group,
- !(window->priv->state & GEDIT_WINDOW_STATE_SAVING_SESSION));
-
- gedit_notebook_set_close_buttons_sensitive (GEDIT_NOTEBOOK (window->priv->notebook),
- !(window->priv->state & GEDIT_WINDOW_STATE_SAVING_SESSION));
-
- gedit_notebook_set_tab_drag_and_drop_enabled (GEDIT_NOTEBOOK (window->priv->notebook),
- !(window->priv->state & GEDIT_WINDOW_STATE_SAVING_SESSION));
-
- if ((window->priv->state & GEDIT_WINDOW_STATE_SAVING_SESSION) != 0)
- {
- /* TODO: If we really care, Find could be active
- * when in SAVING_SESSION state */
-
- if (gtk_action_group_get_sensitive (window->priv->action_group))
- gtk_action_group_set_sensitive (window->priv->action_group,
- FALSE);
- if (gtk_action_group_get_sensitive (window->priv->quit_action_group))
- gtk_action_group_set_sensitive (window->priv->quit_action_group,
- FALSE);
- if (gtk_action_group_get_sensitive (window->priv->close_action_group))
- gtk_action_group_set_sensitive (window->priv->close_action_group,
- FALSE);
- }
- else
- {
- if (!gtk_action_group_get_sensitive (window->priv->action_group))
- gtk_action_group_set_sensitive (window->priv->action_group,
- window->priv->num_tabs > 0);
- if (!gtk_action_group_get_sensitive (window->priv->quit_action_group))
- gtk_action_group_set_sensitive (window->priv->quit_action_group,
- window->priv->num_tabs > 0);
- if (!gtk_action_group_get_sensitive (window->priv->close_action_group))
- {
-#ifdef OS_OSX
- /* On OS X, File Close is always sensitive */
- gtk_action_group_set_sensitive (window->priv->close_action_group,
- TRUE);
-#else
- gtk_action_group_set_sensitive (window->priv->close_action_group,
- window->priv->num_tabs > 0);
-#endif
- }
- }
-}
-
-static void
-update_tab_autosave (GtkWidget *widget,
- gpointer data)
-{
- GeditTab *tab = GEDIT_TAB (widget);
- gboolean *enabled = (gboolean *) data;
-
- gedit_tab_set_auto_save_enabled (tab, *enabled);
-}
-
-void
-_gedit_window_set_lockdown (GeditWindow *window,
- GeditLockdownMask lockdown)
-{
- GeditTab *tab;
- GtkAction *action;
- gboolean autosave;
-
- /* start/stop autosave in each existing tab */
- autosave = gedit_prefs_manager_get_auto_save ();
- gtk_container_foreach (GTK_CONTAINER (window->priv->notebook),
- update_tab_autosave,
- &autosave);
-
- /* update menues wrt the current active tab */
- tab = gedit_window_get_active_tab (window);
-
- set_sensitivity_according_to_tab (window, tab);
-
- action = gtk_action_group_get_action (window->priv->action_group,
- "FileSaveAll");
- gtk_action_set_sensitive (action,
- !(window->priv->state & GEDIT_WINDOW_STATE_PRINTING) &&
- !(lockdown & GEDIT_LOCKDOWN_SAVE_TO_DISK));
-
-#if !GTK_CHECK_VERSION (2, 17, 4)
- action = gtk_action_group_get_action (window->priv->action_group,
- "FilePageSetup");
- gtk_action_set_sensitive (action,
- !(lockdown & GEDIT_LOCKDOWN_PRINT_SETUP));
-#endif
-}
-
-static void
-analyze_tab_state (GeditTab *tab,
- GeditWindow *window)
-{
- GeditTabState ts;
-
- ts = gedit_tab_get_state (tab);
-
- switch (ts)
- {
- case GEDIT_TAB_STATE_LOADING:
- case GEDIT_TAB_STATE_REVERTING:
- window->priv->state |= GEDIT_WINDOW_STATE_LOADING;
- break;
-
- case GEDIT_TAB_STATE_SAVING:
- window->priv->state |= GEDIT_WINDOW_STATE_SAVING;
- break;
-
- case GEDIT_TAB_STATE_PRINTING:
- case GEDIT_TAB_STATE_PRINT_PREVIEWING:
- window->priv->state |= GEDIT_WINDOW_STATE_PRINTING;
- break;
-
- case GEDIT_TAB_STATE_LOADING_ERROR:
- case GEDIT_TAB_STATE_REVERTING_ERROR:
- case GEDIT_TAB_STATE_SAVING_ERROR:
- case GEDIT_TAB_STATE_GENERIC_ERROR:
- window->priv->state |= GEDIT_WINDOW_STATE_ERROR;
- ++window->priv->num_tabs_with_error;
- default:
- /* NOP */
- break;
- }
-}
-
-static void
-update_window_state (GeditWindow *window)
-{
- GeditWindowState old_ws;
- gint old_num_of_errors;
-
- gedit_debug_message (DEBUG_WINDOW, "Old state: %x", window->priv->state);
-
- old_ws = window->priv->state;
- old_num_of_errors = window->priv->num_tabs_with_error;
-
- window->priv->state = old_ws & GEDIT_WINDOW_STATE_SAVING_SESSION;
-
- window->priv->num_tabs_with_error = 0;
-
- gtk_container_foreach (GTK_CONTAINER (window->priv->notebook),
- (GtkCallback)analyze_tab_state,
- window);
-
- gedit_debug_message (DEBUG_WINDOW, "New state: %x", window->priv->state);
-
- if (old_ws != window->priv->state)
- {
- set_sensitivity_according_to_window_state (window);
-
- gedit_statusbar_set_window_state (GEDIT_STATUSBAR (window->priv->statusbar),
- window->priv->state,
- window->priv->num_tabs_with_error);
-
- g_object_notify (G_OBJECT (window), "state");
- }
- else if (old_num_of_errors != window->priv->num_tabs_with_error)
- {
- gedit_statusbar_set_window_state (GEDIT_STATUSBAR (window->priv->statusbar),
- window->priv->state,
- window->priv->num_tabs_with_error);
- }
-}
-
-static void
-sync_state (GeditTab *tab,
- GParamSpec *pspec,
- GeditWindow *window)
-{
- gedit_debug (DEBUG_WINDOW);
-
- update_window_state (window);
-
- if (tab != window->priv->active_tab)
- return;
-
- set_sensitivity_according_to_tab (window, tab);
-
- g_signal_emit (G_OBJECT (window), signals[ACTIVE_TAB_STATE_CHANGED], 0);
-}
-
-static void
-sync_name (GeditTab *tab,
- GParamSpec *pspec,
- GeditWindow *window)
-{
- GtkAction *action;
- gchar *action_name;
- gchar *tab_name;
- gchar *escaped_name;
- gchar *tip;
- gint n;
- GeditDocument *doc;
-
- if (tab == window->priv->active_tab)
- {
- set_title (window);
-
- doc = gedit_tab_get_document (tab);
- action = gtk_action_group_get_action (window->priv->action_group,
- "FileRevert");
- gtk_action_set_sensitive (action,
- !gedit_document_is_untitled (doc));
- }
-
- /* sync the item in the documents list menu */
- n = gtk_notebook_page_num (GTK_NOTEBOOK (window->priv->notebook),
- GTK_WIDGET (tab));
- action_name = g_strdup_printf ("Tab_%d", n);
- action = gtk_action_group_get_action (window->priv->documents_list_action_group,
- action_name);
- g_return_if_fail (action != NULL);
-
- tab_name = _gedit_tab_get_name (tab);
- escaped_name = gedit_utils_escape_underscores (tab_name, -1);
- tip = get_menu_tip_for_tab (tab);
-
- g_object_set (action, "label", escaped_name, NULL);
- g_object_set (action, "tooltip", tip, NULL);
-
- g_free (action_name);
- g_free (tab_name);
- g_free (escaped_name);
- g_free (tip);
-
- gedit_plugins_engine_update_plugins_ui (gedit_plugins_engine_get_default (),
- window);
-}
-
-static GeditWindow *
-get_drop_window (GtkWidget *widget)
-{
- GtkWidget *target_window;
-
- target_window = gtk_widget_get_toplevel (widget);
- g_return_val_if_fail (GEDIT_IS_WINDOW (target_window), NULL);
-
- if ((GEDIT_WINDOW(target_window)->priv->state & GEDIT_WINDOW_STATE_SAVING_SESSION) != 0)
- return NULL;
-
- return GEDIT_WINDOW (target_window);
-}
-
-static void
-load_uris_from_drop (GeditWindow *window,
- gchar **uri_list)
-{
- GSList *uris = NULL;
- gint i;
-
- if (uri_list == NULL)
- return;
-
- for (i = 0; uri_list[i] != NULL; ++i)
- {
- uris = g_slist_prepend (uris, uri_list[i]);
- }
-
- uris = g_slist_reverse (uris);
- gedit_commands_load_uris (window,
- uris,
- NULL,
- 0);
-
- g_slist_free (uris);
-}
-
-/* Handle drops on the GeditWindow */
-static void
-drag_data_received_cb (GtkWidget *widget,
- GdkDragContext *context,
- gint x,
- gint y,
- GtkSelectionData *selection_data,
- guint info,
- guint timestamp,
- gpointer data)
-{
- GeditWindow *window;
- gchar **uri_list;
-
- window = get_drop_window (widget);
-
- if (window == NULL)
- return;
-
- if (info == TARGET_URI_LIST)
- {
- uri_list = gedit_utils_drop_get_uris(selection_data);
- load_uris_from_drop (window, uri_list);
- g_strfreev (uri_list);
- }
-}
-
-/* Handle drops on the GeditView */
-static void
-drop_uris_cb (GtkWidget *widget,
- gchar **uri_list)
-{
- GeditWindow *window;
-
- window = get_drop_window (widget);
-
- if (window == NULL)
- return;
-
- load_uris_from_drop (window, uri_list);
-}
-
-static void
-fullscreen_controls_show (GeditWindow *window)
-{
- GdkScreen *screen;
- GdkRectangle fs_rect;
- gint w, h;
-
- screen = gtk_window_get_screen (GTK_WINDOW (window));
- gdk_screen_get_monitor_geometry (screen,
- gdk_screen_get_monitor_at_window (screen,
- gtk_widget_get_window (GTK_WIDGET (window))),
- &fs_rect);
-
- gtk_window_get_size (GTK_WINDOW (window->priv->fullscreen_controls), &w, &h);
-
- gtk_window_resize (GTK_WINDOW (window->priv->fullscreen_controls),
- fs_rect.width, h);
-
- gtk_window_move (GTK_WINDOW (window->priv->fullscreen_controls),
- fs_rect.x, fs_rect.y - h + 1);
-
- gtk_widget_show_all (window->priv->fullscreen_controls);
-}
-
-static gboolean
-run_fullscreen_animation (gpointer data)
-{
- GeditWindow *window = GEDIT_WINDOW (data);
- GdkScreen *screen;
- GdkRectangle fs_rect;
- gint x, y;
-
- screen = gtk_window_get_screen (GTK_WINDOW (window));
- gdk_screen_get_monitor_geometry (screen,
- gdk_screen_get_monitor_at_window (screen,
- gtk_widget_get_window (GTK_WIDGET (window))),
- &fs_rect);
-
- gtk_window_get_position (GTK_WINDOW (window->priv->fullscreen_controls),
- &x, &y);
-
- if (window->priv->fullscreen_animation_enter)
- {
- if (y == fs_rect.y)
- {
- window->priv->fullscreen_animation_timeout_id = 0;
- return FALSE;
- }
- else
- {
- gtk_window_move (GTK_WINDOW (window->priv->fullscreen_controls),
- x, y + 1);
- return TRUE;
- }
- }
- else
- {
- gint w, h;
-
- gtk_window_get_size (GTK_WINDOW (window->priv->fullscreen_controls),
- &w, &h);
-
- if (y == fs_rect.y - h + 1)
- {
- window->priv->fullscreen_animation_timeout_id = 0;
- return FALSE;
- }
- else
- {
- gtk_window_move (GTK_WINDOW (window->priv->fullscreen_controls),
- x, y - 1);
- return TRUE;
- }
- }
-}
-
-static void
-show_hide_fullscreen_toolbar (GeditWindow *window,
- gboolean show,
- gint height)
-{
- GtkSettings *settings;
- gboolean enable_animations;
-
- settings = gtk_widget_get_settings (GTK_WIDGET (window));
- g_object_get (G_OBJECT (settings),
- "gtk-enable-animations",
- &enable_animations,
- NULL);
-
- if (enable_animations)
- {
- window->priv->fullscreen_animation_enter = show;
-
- if (window->priv->fullscreen_animation_timeout_id == 0)
- {
- window->priv->fullscreen_animation_timeout_id =
- g_timeout_add (FULLSCREEN_ANIMATION_SPEED,
- (GSourceFunc) run_fullscreen_animation,
- window);
- }
- }
- else
- {
- GdkRectangle fs_rect;
- GdkScreen *screen;
-
- screen = gtk_window_get_screen (GTK_WINDOW (window));
- gdk_screen_get_monitor_geometry (screen,
- gdk_screen_get_monitor_at_window (screen,
- gtk_widget_get_window (GTK_WIDGET (window))),
- &fs_rect);
-
- if (show)
- gtk_window_move (GTK_WINDOW (window->priv->fullscreen_controls),
- fs_rect.x, fs_rect.y);
- else
- gtk_window_move (GTK_WINDOW (window->priv->fullscreen_controls),
- fs_rect.x, fs_rect.y - height + 1);
- }
-
-}
-
-static gboolean
-on_fullscreen_controls_enter_notify_event (GtkWidget *widget,
- GdkEventCrossing *event,
- GeditWindow *window)
-{
- show_hide_fullscreen_toolbar (window, TRUE, 0);
-
- return FALSE;
-}
-
-static gboolean
-on_fullscreen_controls_leave_notify_event (GtkWidget *widget,
- GdkEventCrossing *event,
- GeditWindow *window)
-{
- GdkDisplay *display;
- GdkScreen *screen;
- gint w, h;
- gint x, y;
-
- display = gdk_display_get_default ();
- screen = gtk_window_get_screen (GTK_WINDOW (window));
-
- gtk_window_get_size (GTK_WINDOW (window->priv->fullscreen_controls), &w, &h);
- gdk_display_get_pointer (display, &screen, &x, &y, NULL);
-
- /* gtk seems to emit leave notify when clicking on tool items,
- * work around it by checking the coordinates
- */
- if (y >= h)
- {
- show_hide_fullscreen_toolbar (window, FALSE, h);
- }
-
- return FALSE;
-}
-
-static void
-fullscreen_controls_build (GeditWindow *window)
-{
- GeditWindowPrivate *priv = window->priv;
- GtkWidget *toolbar;
- GtkWidget *toolbar_recent_menu;
- GtkAction *action;
-
- if (priv->fullscreen_controls != NULL)
- return;
-
- priv->fullscreen_controls = gtk_window_new (GTK_WINDOW_POPUP);
-
- gtk_window_set_transient_for (GTK_WINDOW (priv->fullscreen_controls),
- &window->window);
-
- /* popup toolbar */
- toolbar = gtk_ui_manager_get_widget (priv->manager, "/FullscreenToolBar");
- gtk_container_add (GTK_CONTAINER (priv->fullscreen_controls),
- toolbar);
-
- action = gtk_action_group_get_action (priv->always_sensitive_action_group,
- "LeaveFullscreen");
- g_object_set (action, "is-important", TRUE, NULL);
-
- toolbar_recent_menu = setup_toolbar_open_button (window, toolbar);
-
- gtk_container_foreach (GTK_CONTAINER (toolbar),
- (GtkCallback)set_non_homogeneus,
- NULL);
-
- /* Set the toolbar style */
- gtk_toolbar_set_style (GTK_TOOLBAR (toolbar),
- GTK_TOOLBAR_BOTH_HORIZ);
-
- g_signal_connect (priv->fullscreen_controls, "enter-notify-event",
- G_CALLBACK (on_fullscreen_controls_enter_notify_event),
- window);
- g_signal_connect (priv->fullscreen_controls, "leave-notify-event",
- G_CALLBACK (on_fullscreen_controls_leave_notify_event),
- window);
-}
-
-static void
-can_search_again (GeditDocument *doc,
- GParamSpec *pspec,
- GeditWindow *window)
-{
- gboolean sensitive;
- GtkAction *action;
-
- if (doc != gedit_window_get_active_document (window))
- return;
-
- sensitive = gedit_document_get_can_search_again (doc);
-
- action = gtk_action_group_get_action (window->priv->action_group,
- "SearchFindNext");
- gtk_action_set_sensitive (action, sensitive);
-
- action = gtk_action_group_get_action (window->priv->action_group,
- "SearchFindPrevious");
- gtk_action_set_sensitive (action, sensitive);
-
- action = gtk_action_group_get_action (window->priv->action_group,
- "SearchClearHighlight");
- gtk_action_set_sensitive (action, sensitive);
-}
-
-static void
-can_undo (GeditDocument *doc,
- GParamSpec *pspec,
- GeditWindow *window)
-{
- GtkAction *action;
- gboolean sensitive;
-
- sensitive = gtk_source_buffer_can_undo (GTK_SOURCE_BUFFER (doc));
-
- if (doc != gedit_window_get_active_document (window))
- return;
-
- action = gtk_action_group_get_action (window->priv->action_group,
- "EditUndo");
- gtk_action_set_sensitive (action, sensitive);
-}
-
-static void
-can_redo (GeditDocument *doc,
- GParamSpec *pspec,
- GeditWindow *window)
-{
- GtkAction *action;
- gboolean sensitive;
-
- sensitive = gtk_source_buffer_can_redo (GTK_SOURCE_BUFFER (doc));
-
- if (doc != gedit_window_get_active_document (window))
- return;
-
- action = gtk_action_group_get_action (window->priv->action_group,
- "EditRedo");
- gtk_action_set_sensitive (action, sensitive);
-}
-
-static void
-selection_changed (GeditDocument *doc,
- GParamSpec *pspec,
- GeditWindow *window)
-{
- GeditTab *tab;
- GeditView *view;
- GtkAction *action;
- GeditTabState state;
- gboolean state_normal;
- gboolean editable;
-
- gedit_debug (DEBUG_WINDOW);
-
- if (doc != gedit_window_get_active_document (window))
- return;
-
- tab = gedit_tab_get_from_document (doc);
- state = gedit_tab_get_state (tab);
- state_normal = (state == GEDIT_TAB_STATE_NORMAL);
-
- view = gedit_tab_get_view (tab);
- editable = gtk_text_view_get_editable (GTK_TEXT_VIEW (view));
-
- action = gtk_action_group_get_action (window->priv->action_group,
- "EditCut");
- gtk_action_set_sensitive (action,
- state_normal &&
- editable &&
- gtk_text_buffer_get_has_selection (GTK_TEXT_BUFFER (doc)));
-
- action = gtk_action_group_get_action (window->priv->action_group,
- "EditCopy");
- gtk_action_set_sensitive (action,
- (state_normal ||
- state == GEDIT_TAB_STATE_EXTERNALLY_MODIFIED_NOTIFICATION) &&
- gtk_text_buffer_get_has_selection (GTK_TEXT_BUFFER (doc)));
-
- action = gtk_action_group_get_action (window->priv->action_group,
- "EditDelete");
- gtk_action_set_sensitive (action,
- state_normal &&
- editable &&
- gtk_text_buffer_get_has_selection (GTK_TEXT_BUFFER (doc)));
-
- gedit_plugins_engine_update_plugins_ui (gedit_plugins_engine_get_default (),
- window);
-}
-
-static void
-sync_languages_menu (GeditDocument *doc,
- GParamSpec *pspec,
- GeditWindow *window)
-{
- update_languages_menu (window);
- gedit_plugins_engine_update_plugins_ui (gedit_plugins_engine_get_default (),
- window);
-}
-
-static void
-readonly_changed (GeditDocument *doc,
- GParamSpec *pspec,
- GeditWindow *window)
-{
- set_sensitivity_according_to_tab (window, window->priv->active_tab);
-
- sync_name (window->priv->active_tab, NULL, window);
-
- gedit_plugins_engine_update_plugins_ui (gedit_plugins_engine_get_default (),
- window);
-}
-
-static void
-editable_changed (GeditView *view,
- GParamSpec *arg1,
- GeditWindow *window)
-{
- gedit_plugins_engine_update_plugins_ui (gedit_plugins_engine_get_default (),
- window);
-}
-
-static void
-update_sensitivity_according_to_open_tabs (GeditWindow *window)
-{
- GtkAction *action;
-
- /* Set sensitivity */
- gtk_action_group_set_sensitive (window->priv->action_group,
- window->priv->num_tabs != 0);
-
- action = gtk_action_group_get_action (window->priv->action_group,
- "DocumentsMoveToNewWindow");
- gtk_action_set_sensitive (action,
- window->priv->num_tabs > 1);
-
- /* Do not set close action insensitive on OS X */
-#ifndef OS_OSX
- gtk_action_group_set_sensitive (window->priv->close_action_group,
- window->priv->num_tabs != 0);
-#endif
-}
-
-static void
-notebook_tab_added (GeditNotebook *notebook,
- GeditTab *tab,
- GeditWindow *window)
-{
- GeditView *view;
- GeditDocument *doc;
-
- gedit_debug (DEBUG_WINDOW);
-
- g_return_if_fail ((window->priv->state & GEDIT_WINDOW_STATE_SAVING_SESSION) == 0);
-
- ++window->priv->num_tabs;
-
- update_sensitivity_according_to_open_tabs (window);
-
- view = gedit_tab_get_view (tab);
- doc = gedit_tab_get_document (tab);
-
- /* IMPORTANT: remember to disconnect the signal in notebook_tab_removed
- * if a new signal is connected here */
-
- g_signal_connect (tab,
- "notify::name",
- G_CALLBACK (sync_name),
- window);
- g_signal_connect (tab,
- "notify::state",
- G_CALLBACK (sync_state),
- window);
-
- g_signal_connect (doc,
- "cursor-moved",
- G_CALLBACK (update_cursor_position_statusbar),
- window);
- g_signal_connect (doc,
- "notify::can-search-again",
- G_CALLBACK (can_search_again),
- window);
- g_signal_connect (doc,
- "notify::can-undo",
- G_CALLBACK (can_undo),
- window);
- g_signal_connect (doc,
- "notify::can-redo",
- G_CALLBACK (can_redo),
- window);
- g_signal_connect (doc,
- "notify::has-selection",
- G_CALLBACK (selection_changed),
- window);
- g_signal_connect (doc,
- "notify::language",
- G_CALLBACK (sync_languages_menu),
- window);
- g_signal_connect (doc,
- "notify::read-only",
- G_CALLBACK (readonly_changed),
- window);
- g_signal_connect (view,
- "toggle_overwrite",
- G_CALLBACK (update_overwrite_mode_statusbar),
- window);
- g_signal_connect (view,
- "notify::editable",
- G_CALLBACK (editable_changed),
- window);
-
- update_documents_list_menu (window);
-
- g_signal_connect (view,
- "drop_uris",
- G_CALLBACK (drop_uris_cb),
- NULL);
-
- update_window_state (window);
-
- g_signal_emit (G_OBJECT (window), signals[TAB_ADDED], 0, tab);
-}
-
-static void
-notebook_tab_removed (GeditNotebook *notebook,
- GeditTab *tab,
- GeditWindow *window)
-{
- GeditView *view;
- GeditDocument *doc;
-
- gedit_debug (DEBUG_WINDOW);
-
- g_return_if_fail ((window->priv->state & GEDIT_WINDOW_STATE_SAVING_SESSION) == 0);
-
- --window->priv->num_tabs;
-
- view = gedit_tab_get_view (tab);
- doc = gedit_tab_get_document (tab);
-
- g_signal_handlers_disconnect_by_func (tab,
- G_CALLBACK (sync_name),
- window);
- g_signal_handlers_disconnect_by_func (tab,
- G_CALLBACK (sync_state),
- window);
- g_signal_handlers_disconnect_by_func (doc,
- G_CALLBACK (update_cursor_position_statusbar),
- window);
- g_signal_handlers_disconnect_by_func (doc,
- G_CALLBACK (can_search_again),
- window);
- g_signal_handlers_disconnect_by_func (doc,
- G_CALLBACK (can_undo),
- window);
- g_signal_handlers_disconnect_by_func (doc,
- G_CALLBACK (can_redo),
- window);
- g_signal_handlers_disconnect_by_func (doc,
- G_CALLBACK (selection_changed),
- window);
- g_signal_handlers_disconnect_by_func (doc,
- G_CALLBACK (sync_languages_menu),
- window);
- g_signal_handlers_disconnect_by_func (doc,
- G_CALLBACK (readonly_changed),
- window);
- g_signal_handlers_disconnect_by_func (view,
- G_CALLBACK (update_overwrite_mode_statusbar),
- window);
- g_signal_handlers_disconnect_by_func (view,
- G_CALLBACK (editable_changed),
- window);
- g_signal_handlers_disconnect_by_func (view,
- G_CALLBACK (drop_uris_cb),
- NULL);
-
- if (window->priv->tab_width_id && tab == gedit_window_get_active_tab (window))
- {
- g_signal_handler_disconnect (view, window->priv->tab_width_id);
- window->priv->tab_width_id = 0;
- }
-
- if (window->priv->spaces_instead_of_tabs_id && tab == gedit_window_get_active_tab (window))
- {
- g_signal_handler_disconnect (view, window->priv->spaces_instead_of_tabs_id);
- window->priv->spaces_instead_of_tabs_id = 0;
- }
-
- if (window->priv->language_changed_id && tab == gedit_window_get_active_tab (window))
- {
- g_signal_handler_disconnect (doc, window->priv->language_changed_id);
- window->priv->language_changed_id = 0;
- }
-
- g_return_if_fail (window->priv->num_tabs >= 0);
- if (window->priv->num_tabs == 0)
- {
- window->priv->active_tab = NULL;
-
- set_title (window);
-
- /* Remove line and col info */
- gedit_statusbar_set_cursor_position (
- GEDIT_STATUSBAR (window->priv->statusbar),
- -1,
- -1);
-
- gedit_statusbar_clear_overwrite (
- GEDIT_STATUSBAR (window->priv->statusbar));
-
- /* hide the combos */
- gtk_widget_hide (window->priv->tab_width_combo);
- gtk_widget_hide (window->priv->language_combo);
- }
-
- if (!window->priv->removing_tabs)
- {
- update_documents_list_menu (window);
- update_next_prev_doc_sensitivity_per_window (window);
- }
- else
- {
- if (window->priv->num_tabs == 0)
- {
- update_documents_list_menu (window);
- update_next_prev_doc_sensitivity_per_window (window);
- }
- }
-
- update_sensitivity_according_to_open_tabs (window);
-
- if (window->priv->num_tabs == 0)
- {
- gedit_plugins_engine_update_plugins_ui (gedit_plugins_engine_get_default (),
- window);
- }
-
- update_window_state (window);
-
- g_signal_emit (G_OBJECT (window), signals[TAB_REMOVED], 0, tab);
-}
-
-static void
-notebook_tabs_reordered (GeditNotebook *notebook,
- GeditWindow *window)
-{
- update_documents_list_menu (window);
- update_next_prev_doc_sensitivity_per_window (window);
-
- g_signal_emit (G_OBJECT (window), signals[TABS_REORDERED], 0);
-}
-
-static void
-notebook_tab_detached (GeditNotebook *notebook,
- GeditTab *tab,
- GeditWindow *window)
-{
- GeditWindow *new_window;
-
- new_window = clone_window (window);
-
- gedit_notebook_move_tab (notebook,
- GEDIT_NOTEBOOK (_gedit_window_get_notebook (new_window)),
- tab, 0);
-
- gtk_window_set_position (GTK_WINDOW (new_window),
- GTK_WIN_POS_MOUSE);
-
- gtk_widget_show (GTK_WIDGET (new_window));
-}
-
-static void
-notebook_tab_close_request (GeditNotebook *notebook,
- GeditTab *tab,
- GtkWindow *window)
-{
- /* Note: we are destroying the tab before the default handler
- * seems to be ok, but we need to keep an eye on this. */
- _gedit_cmd_file_close_tab (tab, GEDIT_WINDOW (window));
-}
-
-static gboolean
-show_notebook_popup_menu (GtkNotebook *notebook,
- GeditWindow *window,
- GdkEventButton *event)
-{
- GtkWidget *menu;
-// GtkAction *action;
-
- menu = gtk_ui_manager_get_widget (window->priv->manager, "/NotebookPopup");
- g_return_val_if_fail (menu != NULL, FALSE);
-
-// CHECK do we need this?
-#if 0
- /* allow extensions to sync when showing the popup */
- action = gtk_action_group_get_action (window->priv->action_group,
- "NotebookPopupAction");
- g_return_val_if_fail (action != NULL, FALSE);
- gtk_action_activate (action);
-#endif
- if (event != NULL)
- {
- gtk_menu_popup (GTK_MENU (menu), NULL, NULL,
- NULL, NULL,
- event->button, event->time);
- }
- else
- {
- GtkWidget *tab;
- GtkWidget *tab_label;
-
- tab = GTK_WIDGET (gedit_window_get_active_tab (window));
- g_return_val_if_fail (tab != NULL, FALSE);
-
- tab_label = gtk_notebook_get_tab_label (notebook, tab);
-
- gtk_menu_popup (GTK_MENU (menu), NULL, NULL,
- gedit_utils_menu_position_under_widget, tab_label,
- 0, gtk_get_current_event_time ());
-
- gtk_menu_shell_select_first (GTK_MENU_SHELL (menu), FALSE);
- }
-
- return TRUE;
-}
-
-static gboolean
-notebook_button_press_event (GtkNotebook *notebook,
- GdkEventButton *event,
- GeditWindow *window)
-{
- if (GDK_BUTTON_PRESS == event->type && 3 == event->button)
- {
- return show_notebook_popup_menu (notebook, window, event);
- }
-
- return FALSE;
-}
-
-static gboolean
-notebook_popup_menu (GtkNotebook *notebook,
- GeditWindow *window)
-{
- /* Only respond if the notebook is the actual focus */
- if (GEDIT_IS_NOTEBOOK (gtk_window_get_focus (GTK_WINDOW (window))))
- {
- return show_notebook_popup_menu (notebook, window, NULL);
- }
-
- return FALSE;
-}
-
-static void
-side_panel_size_allocate (GtkWidget *widget,
- GtkAllocation *allocation,
- GeditWindow *window)
-{
- window->priv->side_panel_size = allocation->width;
-}
-
-static void
-bottom_panel_size_allocate (GtkWidget *widget,
- GtkAllocation *allocation,
- GeditWindow *window)
-{
- window->priv->bottom_panel_size = allocation->height;
-}
-
-static void
-hpaned_restore_position (GtkWidget *widget,
- GeditWindow *window)
-{
- gint pos;
-
- gedit_debug_message (DEBUG_WINDOW,
- "Restoring hpaned position: side panel size %d",
- window->priv->side_panel_size);
-
- pos = MAX (100, window->priv->side_panel_size);
- gtk_paned_set_position (GTK_PANED (window->priv->hpaned), pos);
-
- /* start monitoring the size */
- g_signal_connect (window->priv->side_panel,
- "size-allocate",
- G_CALLBACK (side_panel_size_allocate),
- window);
-
- /* run this only once */
- g_signal_handlers_disconnect_by_func (widget, hpaned_restore_position, window);
-}
-
-static void
-vpaned_restore_position (GtkWidget *widget,
- GeditWindow *window)
-{
- gint pos;
-
- gedit_debug_message (DEBUG_WINDOW,
- "Restoring vpaned position: bottom panel size %d",
- window->priv->bottom_panel_size);
-
- pos = widget->allocation.height -
- MAX (50, window->priv->bottom_panel_size);
- gtk_paned_set_position (GTK_PANED (window->priv->vpaned), pos);
-
- /* start monitoring the size */
- g_signal_connect (window->priv->bottom_panel,
- "size-allocate",
- G_CALLBACK (bottom_panel_size_allocate),
- window);
-
- /* run this only once */
- g_signal_handlers_disconnect_by_func (widget, vpaned_restore_position, window);
-}
-
-static void
-side_panel_visibility_changed (GtkWidget *side_panel,
- GeditWindow *window)
-{
- gboolean visible;
- GtkAction *action;
-
- visible = GTK_WIDGET_VISIBLE (side_panel);
-
- if (gedit_prefs_manager_side_pane_visible_can_set ())
- gedit_prefs_manager_set_side_pane_visible (visible);
-
- action = gtk_action_group_get_action (window->priv->panes_action_group,
- "ViewSidePane");
-
- if (gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action)) != visible)
- gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), visible);
-
- /* focus the document */
- if (!visible && window->priv->active_tab != NULL)
- gtk_widget_grab_focus (GTK_WIDGET (
- gedit_tab_get_view (GEDIT_TAB (window->priv->active_tab))));
-}
-
-static void
-create_side_panel (GeditWindow *window)
-{
- GtkWidget *documents_panel;
-
- gedit_debug (DEBUG_WINDOW);
-
- window->priv->side_panel = gedit_panel_new (GTK_ORIENTATION_VERTICAL);
-
- gtk_paned_pack1 (GTK_PANED (window->priv->hpaned),
- window->priv->side_panel,
- FALSE,
- FALSE);
-
- g_signal_connect_after (window->priv->side_panel,
- "show",
- G_CALLBACK (side_panel_visibility_changed),
- window);
- g_signal_connect_after (window->priv->side_panel,
- "hide",
- G_CALLBACK (side_panel_visibility_changed),
- window);
-
- documents_panel = gedit_documents_panel_new (window);
- gedit_panel_add_item_with_stock_icon (GEDIT_PANEL (window->priv->side_panel),
- documents_panel,
- _("Documents"),
- GTK_STOCK_FILE);
-}
-
-static void
-bottom_panel_visibility_changed (GeditPanel *bottom_panel,
- GeditWindow *window)
-{
- gboolean visible;
- GtkAction *action;
-
- visible = GTK_WIDGET_VISIBLE (bottom_panel);
-
- if (gedit_prefs_manager_bottom_panel_visible_can_set ())
- gedit_prefs_manager_set_bottom_panel_visible (visible);
-
- action = gtk_action_group_get_action (window->priv->panes_action_group,
- "ViewBottomPane");
-
- if (gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action)) != visible)
- gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), visible);
-
- /* focus the document */
- if (!visible && window->priv->active_tab != NULL)
- gtk_widget_grab_focus (GTK_WIDGET (
- gedit_tab_get_view (GEDIT_TAB (window->priv->active_tab))));
-}
-
-static void
-bottom_panel_item_removed (GeditPanel *panel,
- GtkWidget *item,
- GeditWindow *window)
-{
- if (gedit_panel_get_n_items (panel) == 0)
- {
- GtkAction *action;
-
- gtk_widget_hide (GTK_WIDGET (panel));
-
- action = gtk_action_group_get_action (window->priv->panes_action_group,
- "ViewBottomPane");
- gtk_action_set_sensitive (action, FALSE);
- }
-}
-
-static void
-bottom_panel_item_added (GeditPanel *panel,
- GtkWidget *item,
- GeditWindow *window)
-{
- /* if it's the first item added, set the menu item
- * sensitive and if needed show the panel */
- if (gedit_panel_get_n_items (panel) == 1)
- {
- GtkAction *action;
- gboolean show;
-
- action = gtk_action_group_get_action (window->priv->panes_action_group,
- "ViewBottomPane");
- gtk_action_set_sensitive (action, TRUE);
-
- show = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));
- if (show)
- gtk_widget_show (GTK_WIDGET (panel));
- }
-}
-
-static void
-create_bottom_panel (GeditWindow *window)
-{
- gedit_debug (DEBUG_WINDOW);
-
- window->priv->bottom_panel = gedit_panel_new (GTK_ORIENTATION_HORIZONTAL);
-
- gtk_paned_pack2 (GTK_PANED (window->priv->vpaned),
- window->priv->bottom_panel,
- FALSE,
- FALSE);
-
- g_signal_connect_after (window->priv->bottom_panel,
- "show",
- G_CALLBACK (bottom_panel_visibility_changed),
- window);
- g_signal_connect_after (window->priv->bottom_panel,
- "hide",
- G_CALLBACK (bottom_panel_visibility_changed),
- window);
-}
-
-static void
-init_panels_visibility (GeditWindow *window)
-{
- gint active_page;
-
- gedit_debug (DEBUG_WINDOW);
-
- /* side pane */
- active_page = gedit_prefs_manager_get_side_panel_active_page ();
- _gedit_panel_set_active_item_by_id (GEDIT_PANEL (window->priv->side_panel),
- active_page);
-
- if (gedit_prefs_manager_get_side_pane_visible ())
- {
- gtk_widget_show (window->priv->side_panel);
- }
-
- /* bottom pane, it can be empty */
- if (gedit_panel_get_n_items (GEDIT_PANEL (window->priv->bottom_panel)) > 0)
- {
- active_page = gedit_prefs_manager_get_bottom_panel_active_page ();
- _gedit_panel_set_active_item_by_id (GEDIT_PANEL (window->priv->bottom_panel),
- active_page);
-
- if (gedit_prefs_manager_get_bottom_panel_visible ())
- {
- gtk_widget_show (window->priv->bottom_panel);
- }
- }
- else
- {
- GtkAction *action;
- action = gtk_action_group_get_action (window->priv->panes_action_group,
- "ViewBottomPane");
- gtk_action_set_sensitive (action, FALSE);
- }
-
- /* start track sensitivity after the initial state is set */
- window->priv->bottom_panel_item_removed_handler_id =
- g_signal_connect (window->priv->bottom_panel,
- "item_removed",
- G_CALLBACK (bottom_panel_item_removed),
- window);
-
- g_signal_connect (window->priv->bottom_panel,
- "item_added",
- G_CALLBACK (bottom_panel_item_added),
- window);
-}
-
-static void
-clipboard_owner_change (GtkClipboard *clipboard,
- GdkEventOwnerChange *event,
- GeditWindow *window)
-{
- set_paste_sensitivity_according_to_clipboard (window,
- clipboard);
-}
-
-static void
-window_realized (GtkWidget *window,
- gpointer *data)
-{
- GtkClipboard *clipboard;
-
- clipboard = gtk_widget_get_clipboard (window,
- GDK_SELECTION_CLIPBOARD);
-
- g_signal_connect (clipboard,
- "owner_change",
- G_CALLBACK (clipboard_owner_change),
- window);
-}
-
-static void
-window_unrealized (GtkWidget *window,
- gpointer *data)
-{
- GtkClipboard *clipboard;
-
- clipboard = gtk_widget_get_clipboard (window,
- GDK_SELECTION_CLIPBOARD);
-
- g_signal_handlers_disconnect_by_func (clipboard,
- G_CALLBACK (clipboard_owner_change),
- window);
-}
-
-static void
-check_window_is_active (GeditWindow *window,
- GParamSpec *property,
- gpointer useless)
-{
- if (window->priv->window_state & GDK_WINDOW_STATE_FULLSCREEN)
- {
- if (gtk_window_is_active (GTK_WINDOW (window)))
- {
- gtk_widget_show (window->priv->fullscreen_controls);
- }
- else
- {
- gtk_widget_hide (window->priv->fullscreen_controls);
- }
- }
-}
-
-#ifdef OS_OSX
-static void
-setup_mac_menu (GeditWindow *window)
-{
- GtkAction *action;
-
- gtk_widget_hide (window->priv->menubar);
- action = gtk_ui_manager_get_action (window->priv->manager, "/ui/MenuBar/HelpMenu/HelpAboutMenu");
-
- gtk_action_set_label (action, _("About gedit"));
-
- ige_mac_menu_set_menu_bar (GTK_MENU_SHELL (window->priv->menubar));
- ige_mac_menu_set_quit_menu_item (ui_manager_menu_item (window->priv->manager, "/ui/MenuBar/FileMenu/FileQuitMenu"));
-
- ige_mac_menu_set_preferences_menu_item (ui_manager_menu_item (window->priv->manager, "/ui/MenuBar/EditMenu/EditPreferencesMenu"));
-
- add_mac_root_menu (window);
- ige_mac_menu_connect_window_key_handler (GTK_WINDOW (window));
-}
-#endif
-
-static void
-connect_notebook_signals (GeditWindow *window,
- GtkWidget *notebook)
-{
- g_signal_connect (notebook,
- "switch-page",
- G_CALLBACK (notebook_switch_page),
- window);
- g_signal_connect (notebook,
- "tab-added",
- G_CALLBACK (notebook_tab_added),
- window);
- g_signal_connect (notebook,
- "tab-removed",
- G_CALLBACK (notebook_tab_removed),
- window);
- g_signal_connect (notebook,
- "tabs-reordered",
- G_CALLBACK (notebook_tabs_reordered),
- window);
- g_signal_connect (notebook,
- "tab-detached",
- G_CALLBACK (notebook_tab_detached),
- window);
- g_signal_connect (notebook,
- "tab-close-request",
- G_CALLBACK (notebook_tab_close_request),
- window);
- g_signal_connect (notebook,
- "button-press-event",
- G_CALLBACK (notebook_button_press_event),
- window);
- g_signal_connect (notebook,
- "popup-menu",
- G_CALLBACK (notebook_popup_menu),
- window);
-}
-
-static void
-add_notebook (GeditWindow *window,
- GtkWidget *notebook)
-{
- gtk_paned_pack1 (GTK_PANED (window->priv->vpaned),
- notebook,
- TRUE,
- TRUE);
-
- gtk_widget_show (notebook);
-
- connect_notebook_signals (window, notebook);
-}
-
-static void
-gedit_window_init (GeditWindow *window)
-{
- GtkWidget *main_box;
- GtkTargetList *tl;
-
- gedit_debug (DEBUG_WINDOW);
-
- window->priv = GEDIT_WINDOW_GET_PRIVATE (window);
- window->priv->active_tab = NULL;
- window->priv->num_tabs = 0;
- window->priv->removing_tabs = FALSE;
- window->priv->state = GEDIT_WINDOW_STATE_NORMAL;
- window->priv->dispose_has_run = FALSE;
- window->priv->fullscreen_controls = NULL;
- window->priv->fullscreen_animation_timeout_id = 0;
-
- window->priv->message_bus = gedit_message_bus_new ();
-
- window->priv->window_group = gtk_window_group_new ();
- gtk_window_group_add_window (window->priv->window_group, GTK_WINDOW (window));
-
- main_box = gtk_vbox_new (FALSE, 0);
- gtk_container_add (GTK_CONTAINER (window), main_box);
- gtk_widget_show (main_box);
-
- /* Add menu bar and toolbar bar */
- create_menu_bar_and_toolbar (window, main_box);
-
- /* Add status bar */
- create_statusbar (window, main_box);
-
- /* Add the main area */
- gedit_debug_message (DEBUG_WINDOW, "Add main area");
- window->priv->hpaned = gtk_hpaned_new ();
- gtk_box_pack_start (GTK_BOX (main_box),
- window->priv->hpaned,
- TRUE,
- TRUE,
- 0);
-
- window->priv->vpaned = gtk_vpaned_new ();
- gtk_paned_pack2 (GTK_PANED (window->priv->hpaned),
- window->priv->vpaned,
- TRUE,
- FALSE);
-
- gedit_debug_message (DEBUG_WINDOW, "Create gedit notebook");
- window->priv->notebook = gedit_notebook_new ();
- add_notebook (window, window->priv->notebook);
-
- /* side and bottom panels */
- create_side_panel (window);
- create_bottom_panel (window);
-
- /* panes' state must be restored after panels have been mapped,
- * since the bottom pane position depends on the size of the vpaned. */
- window->priv->side_panel_size = gedit_prefs_manager_get_side_panel_size ();
- window->priv->bottom_panel_size = gedit_prefs_manager_get_bottom_panel_size ();
-
- g_signal_connect_after (window->priv->hpaned,
- "map",
- G_CALLBACK (hpaned_restore_position),
- window);
- g_signal_connect_after (window->priv->vpaned,
- "map",
- G_CALLBACK (vpaned_restore_position),
- window);
-
- gtk_widget_show (window->priv->hpaned);
- gtk_widget_show (window->priv->vpaned);
-
- /* Drag and drop support, set targets to NULL because we add the
- default uri_targets below */
- gtk_drag_dest_set (GTK_WIDGET (window),
- GTK_DEST_DEFAULT_MOTION |
- GTK_DEST_DEFAULT_HIGHLIGHT |
- GTK_DEST_DEFAULT_DROP,
- NULL,
- 0,
- GDK_ACTION_COPY);
-
- /* Add uri targets */
- tl = gtk_drag_dest_get_target_list (GTK_WIDGET (window));
-
- if (tl == NULL)
- {
- tl = gtk_target_list_new (NULL, 0);
- gtk_drag_dest_set_target_list (GTK_WIDGET (window), tl);
- gtk_target_list_unref (tl);
- }
-
- gtk_target_list_add_uri_targets (tl, TARGET_URI_LIST);
-
- /* connect instead of override, so that we can
- * share the cb code with the view */
- g_signal_connect (window,
- "drag_data_received",
- G_CALLBACK (drag_data_received_cb),
- NULL);
-
- /* we can get the clipboard only after the widget
- * is realized */
- g_signal_connect (window,
- "realize",
- G_CALLBACK (window_realized),
- NULL);
- g_signal_connect (window,
- "unrealize",
- G_CALLBACK (window_unrealized),
- NULL);
-
- /* Check if the window is active for fullscreen */
- g_signal_connect (window,
- "notify::is-active",
- G_CALLBACK (check_window_is_active),
- NULL);
-
- gedit_debug_message (DEBUG_WINDOW, "Update plugins ui");
-
- gedit_plugins_engine_activate_plugins (gedit_plugins_engine_get_default (),
- window);
-
- /* set visibility of panes.
- * This needs to be done after plugins activatation */
- init_panels_visibility (window);
-
- update_sensitivity_according_to_open_tabs (window);
-
-#ifdef OS_OSX
- setup_mac_menu (window);
-#endif
-
- gedit_debug_message (DEBUG_WINDOW, "END");
-}
-
-/**
- * gedit_window_get_active_view:
- * @window: a #GeditWindow
- *
- * Gets the active #GeditView.
- *
- * Returns: the active #GeditView
- */
-GeditView *
-gedit_window_get_active_view (GeditWindow *window)
-{
- GeditView *view;
-
- g_return_val_if_fail (GEDIT_IS_WINDOW (window), NULL);
-
- if (window->priv->active_tab == NULL)
- return NULL;
-
- view = gedit_tab_get_view (GEDIT_TAB (window->priv->active_tab));
-
- return view;
-}
-
-/**
- * gedit_window_get_active_document:
- * @window: a #GeditWindow
- *
- * Gets the active #GeditDocument.
- *
- * Returns: the active #GeditDocument
- */
-GeditDocument *
-gedit_window_get_active_document (GeditWindow *window)
-{
- GeditView *view;
-
- g_return_val_if_fail (GEDIT_IS_WINDOW (window), NULL);
-
- view = gedit_window_get_active_view (window);
- if (view == NULL)
- return NULL;
-
- return GEDIT_DOCUMENT (gtk_text_view_get_buffer (GTK_TEXT_VIEW (view)));
-}
-
-GtkWidget *
-_gedit_window_get_notebook (GeditWindow *window)
-{
- g_return_val_if_fail (GEDIT_IS_WINDOW (window), NULL);
-
- return window->priv->notebook;
-}
-
-/**
- * gedit_window_create_tab:
- * @window: a #GeditWindow
- * @jump_to: %TRUE to set the new #GeditTab as active
- *
- * Creates a new #GeditTab and adds the new tab to the #GeditNotebook.
- * In case @jump_to is %TRUE the #GeditNotebook switches to that new #GeditTab.
- *
- * Returns: a new #GeditTab
- */
-GeditTab *
-gedit_window_create_tab (GeditWindow *window,
- gboolean jump_to)
-{
- GeditTab *tab;
-
- g_return_val_if_fail (GEDIT_IS_WINDOW (window), NULL);
-
- tab = GEDIT_TAB (_gedit_tab_new ());
- gtk_widget_show (GTK_WIDGET (tab));
-
- gedit_notebook_add_tab (GEDIT_NOTEBOOK (window->priv->notebook),
- tab,
- -1,
- jump_to);
-
- if (!GTK_WIDGET_VISIBLE (window))
- {
- gtk_window_present (GTK_WINDOW (window));
- }
-
- return tab;
-}
-
-/**
- * gedit_window_create_tab_from_uri:
- * @window: a #GeditWindow
- * @uri: the uri of the document
- * @encoding: a #GeditEncoding
- * @line_pos: the line position to visualize
- * @create: %TRUE to create a new document in case @uri does exist
- * @jump_to: %TRUE to set the new #GeditTab as active
- *
- * Creates a new #GeditTab loading the document specified by @uri.
- * In case @jump_to is %TRUE the #GeditNotebook swithes to that new #GeditTab.
- * Whether @create is %TRUE, creates a new empty document if location does
- * not refer to an existing file
- *
- * Returns: a new #GeditTab
- */
-GeditTab *
-gedit_window_create_tab_from_uri (GeditWindow *window,
- const gchar *uri,
- const GeditEncoding *encoding,
- gint line_pos,
- gboolean create,
- gboolean jump_to)
-{
- GtkWidget *tab;
-
- g_return_val_if_fail (GEDIT_IS_WINDOW (window), NULL);
- g_return_val_if_fail (uri != NULL, NULL);
-
- tab = _gedit_tab_new_from_uri (uri,
- encoding,
- line_pos,
- create);
- if (tab == NULL)
- return NULL;
-
- gtk_widget_show (tab);
-
- gedit_notebook_add_tab (GEDIT_NOTEBOOK (window->priv->notebook),
- GEDIT_TAB (tab),
- -1,
- jump_to);
-
-
- if (!GTK_WIDGET_VISIBLE (window))
- {
- gtk_window_present (GTK_WINDOW (window));
- }
-
- return GEDIT_TAB (tab);
-}
-
-/**
- * gedit_window_get_active_tab:
- * @window: a GeditWindow
- *
- * Gets the active #GeditTab in the @window.
- *
- * Returns: the active #GeditTab in the @window.
- */
-GeditTab *
-gedit_window_get_active_tab (GeditWindow *window)
-{
- g_return_val_if_fail (GEDIT_IS_WINDOW (window), NULL);
-
- return (window->priv->active_tab == NULL) ?
- NULL : GEDIT_TAB (window->priv->active_tab);
-}
-
-static void
-add_document (GeditTab *tab, GList **res)
-{
- GeditDocument *doc;
-
- doc = gedit_tab_get_document (tab);
-
- *res = g_list_prepend (*res, doc);
-}
-
-/**
- * gedit_window_get_documents:
- * @window: a #GeditWindow
- *
- * Gets a newly allocated list with all the documents in the window.
- * This list must be freed.
- *
- * Returns: a newly allocated list with all the documents in the window
- */
-GList *
-gedit_window_get_documents (GeditWindow *window)
-{
- GList *res = NULL;
-
- g_return_val_if_fail (GEDIT_IS_WINDOW (window), NULL);
-
- gtk_container_foreach (GTK_CONTAINER (window->priv->notebook),
- (GtkCallback)add_document,
- &res);
-
- res = g_list_reverse (res);
-
- return res;
-}
-
-static void
-add_view (GeditTab *tab, GList **res)
-{
- GeditView *view;
-
- view = gedit_tab_get_view (tab);
-
- *res = g_list_prepend (*res, view);
-}
-
-/**
- * gedit_window_get_views:
- * @window: a #GeditWindow
- *
- * Gets a list with all the views in the window. This list must be freed.
- *
- * Returns: a newly allocated list with all the views in the window
- */
-GList *
-gedit_window_get_views (GeditWindow *window)
-{
- GList *res = NULL;
-
- g_return_val_if_fail (GEDIT_IS_WINDOW (window), NULL);
-
- gtk_container_foreach (GTK_CONTAINER (window->priv->notebook),
- (GtkCallback)add_view,
- &res);
-
- res = g_list_reverse (res);
-
- return res;
-}
-
-/**
- * gedit_window_close_tab:
- * @window: a #GeditWindow
- * @tab: the #GeditTab to close
- *
- * Closes the @tab.
- */
-void
-gedit_window_close_tab (GeditWindow *window,
- GeditTab *tab)
-{
- g_return_if_fail (GEDIT_IS_WINDOW (window));
- g_return_if_fail (GEDIT_IS_TAB (tab));
- g_return_if_fail ((gedit_tab_get_state (tab) != GEDIT_TAB_STATE_SAVING) &&
- (gedit_tab_get_state (tab) != GEDIT_TAB_STATE_SHOWING_PRINT_PREVIEW));
-
- gedit_notebook_remove_tab (GEDIT_NOTEBOOK (window->priv->notebook),
- tab);
-}
-
-/**
- * gedit_window_close_all_tabs:
- * @window: a #GeditWindow
- *
- * Closes all opened tabs.
- */
-void
-gedit_window_close_all_tabs (GeditWindow *window)
-{
- g_return_if_fail (GEDIT_IS_WINDOW (window));
- g_return_if_fail (!(window->priv->state & GEDIT_WINDOW_STATE_SAVING) &&
- !(window->priv->state & GEDIT_WINDOW_STATE_SAVING_SESSION));
-
- window->priv->removing_tabs = TRUE;
-
- gedit_notebook_remove_all_tabs (GEDIT_NOTEBOOK (window->priv->notebook));
-
- window->priv->removing_tabs = FALSE;
-}
-
-/**
- * gedit_window_close_tabs:
- * @window: a #GeditWindow
- * @tabs: a list of #GeditTab
- *
- * Closes all tabs specified by @tabs.
- */
-void
-gedit_window_close_tabs (GeditWindow *window,
- const GList *tabs)
-{
- g_return_if_fail (GEDIT_IS_WINDOW (window));
- g_return_if_fail (!(window->priv->state & GEDIT_WINDOW_STATE_SAVING) &&
- !(window->priv->state & GEDIT_WINDOW_STATE_SAVING_SESSION));
-
- if (tabs == NULL)
- return;
-
- window->priv->removing_tabs = TRUE;
-
- while (tabs != NULL)
- {
- if (tabs->next == NULL)
- window->priv->removing_tabs = FALSE;
-
- gedit_notebook_remove_tab (GEDIT_NOTEBOOK (window->priv->notebook),
- GEDIT_TAB (tabs->data));
-
- tabs = g_list_next (tabs);
- }
-
- g_return_if_fail (window->priv->removing_tabs == FALSE);
-}
-
-GeditWindow *
-_gedit_window_move_tab_to_new_window (GeditWindow *window,
- GeditTab *tab)
-{
- GeditWindow *new_window;
-
- g_return_val_if_fail (GEDIT_IS_WINDOW (window), NULL);
- g_return_val_if_fail (GEDIT_IS_TAB (tab), NULL);
- g_return_val_if_fail (gtk_notebook_get_n_pages (
- GTK_NOTEBOOK (window->priv->notebook)) > 1,
- NULL);
-
- new_window = clone_window (window);
-
- gedit_notebook_move_tab (GEDIT_NOTEBOOK (window->priv->notebook),
- GEDIT_NOTEBOOK (new_window->priv->notebook),
- tab,
- -1);
-
- gtk_widget_show (GTK_WIDGET (new_window));
-
- return new_window;
-}
-
-/**
- * gedit_window_set_active_tab:
- * @window: a #GeditWindow
- * @tab: a #GeditTab
- *
- * Switches to the tab that matches with @tab.
- */
-void
-gedit_window_set_active_tab (GeditWindow *window,
- GeditTab *tab)
-{
- gint page_num;
-
- g_return_if_fail (GEDIT_IS_WINDOW (window));
- g_return_if_fail (GEDIT_IS_TAB (tab));
-
- page_num = gtk_notebook_page_num (GTK_NOTEBOOK (window->priv->notebook),
- GTK_WIDGET (tab));
- g_return_if_fail (page_num != -1);
-
- gtk_notebook_set_current_page (GTK_NOTEBOOK (window->priv->notebook),
- page_num);
-}
-
-/**
- * gedit_window_get_group:
- * @window: a #GeditWindow
- *
- * Gets the #GtkWindowGroup in which @window resides.
- *
- * Returns: the #GtkWindowGroup
- */
-GtkWindowGroup *
-gedit_window_get_group (GeditWindow *window)
-{
- g_return_val_if_fail (GEDIT_IS_WINDOW (window), NULL);
-
- return window->priv->window_group;
-}
-
-gboolean
-_gedit_window_is_removing_tabs (GeditWindow *window)
-{
- g_return_val_if_fail (GEDIT_IS_WINDOW (window), FALSE);
-
- return window->priv->removing_tabs;
-}
-
-/**
- * gedit_window_get_ui_manager:
- * @window: a #GeditWindow
- *
- * Gets the #GtkUIManager associated with the @window.
- *
- * Returns: the #GtkUIManager of the @window.
- */
-GtkUIManager *
-gedit_window_get_ui_manager (GeditWindow *window)
-{
- g_return_val_if_fail (GEDIT_IS_WINDOW (window), NULL);
-
- return window->priv->manager;
-}
-
-/**
- * gedit_window_get_side_panel:
- * @window: a #GeditWindow
- *
- * Gets the side #GeditPanel of the @window.
- *
- * Returns: the side #GeditPanel.
- */
-GeditPanel *
-gedit_window_get_side_panel (GeditWindow *window)
-{
- g_return_val_if_fail (GEDIT_IS_WINDOW (window), NULL);
-
- return GEDIT_PANEL (window->priv->side_panel);
-}
-
-/**
- * gedit_window_get_bottom_panel:
- * @window: a #GeditWindow
- *
- * Gets the bottom #GeditPanel of the @window.
- *
- * Returns: the bottom #GeditPanel.
- */
-GeditPanel *
-gedit_window_get_bottom_panel (GeditWindow *window)
-{
- g_return_val_if_fail (GEDIT_IS_WINDOW (window), NULL);
-
- return GEDIT_PANEL (window->priv->bottom_panel);
-}
-
-/**
- * gedit_window_get_statusbar:
- * @window: a #GeditWindow
- *
- * Gets the #GeditStatusbar of the @window.
- *
- * Returns: the #GeditStatusbar of the @window.
- */
-GtkWidget *
-gedit_window_get_statusbar (GeditWindow *window)
-{
- g_return_val_if_fail (GEDIT_IS_WINDOW (window), 0);
-
- return window->priv->statusbar;
-}
-
-/**
- * gedit_window_get_state:
- * @window: a #GeditWindow
- *
- * Retrieves the state of the @window.
- *
- * Returns: the current #GeditWindowState of the @window.
- */
-GeditWindowState
-gedit_window_get_state (GeditWindow *window)
-{
- g_return_val_if_fail (GEDIT_IS_WINDOW (window), GEDIT_WINDOW_STATE_NORMAL);
-
- return window->priv->state;
-}
-
-GFile *
-_gedit_window_get_default_location (GeditWindow *window)
-{
- g_return_val_if_fail (GEDIT_IS_WINDOW (window), NULL);
-
- return window->priv->default_location != NULL ?
- g_object_ref (window->priv->default_location) : NULL;
-}
-
-void
-_gedit_window_set_default_location (GeditWindow *window,
- GFile *location)
-{
- GFile *dir;
-
- g_return_if_fail (GEDIT_IS_WINDOW (window));
- g_return_if_fail (G_IS_FILE (location));
-
- dir = g_file_get_parent (location);
- g_return_if_fail (dir != NULL);
-
- if (window->priv->default_location != NULL)
- g_object_unref (window->priv->default_location);
-
- window->priv->default_location = dir;
-}
-
-/**
- * gedit_window_get_unsaved_documents:
- * @window: a #GeditWindow
- *
- * Gets the list of documents that need to be saved before closing the window.
- *
- * Returns: a list of #GeditDocument that need to be saved before closing the window
- */
-GList *
-gedit_window_get_unsaved_documents (GeditWindow *window)
-{
- GList *unsaved_docs = NULL;
- GList *tabs;
- GList *l;
-
- g_return_val_if_fail (GEDIT_IS_WINDOW (window), NULL);
-
- tabs = gtk_container_get_children (GTK_CONTAINER (window->priv->notebook));
-
- l = tabs;
- while (l != NULL)
- {
- GeditTab *tab;
-
- tab = GEDIT_TAB (l->data);
-
- if (!_gedit_tab_can_close (tab))
- {
- GeditDocument *doc;
-
- doc = gedit_tab_get_document (tab);
- unsaved_docs = g_list_prepend (unsaved_docs, doc);
- }
-
- l = g_list_next (l);
- }
-
- g_list_free (tabs);
-
- return g_list_reverse (unsaved_docs);
-}
-
-void
-_gedit_window_set_saving_session_state (GeditWindow *window,
- gboolean saving_session)
-{
- GeditWindowState old_state;
-
- g_return_if_fail (GEDIT_IS_WINDOW (window));
-
- old_state = window->priv->state;
-
- if (saving_session)
- window->priv->state |= GEDIT_WINDOW_STATE_SAVING_SESSION;
- else
- window->priv->state &= ~GEDIT_WINDOW_STATE_SAVING_SESSION;
-
- if (old_state != window->priv->state)
- {
- set_sensitivity_according_to_window_state (window);
-
- g_object_notify (G_OBJECT (window), "state");
- }
-}
-
-static void
-hide_notebook_tabs_on_fullscreen (GtkNotebook *notebook,
- GParamSpec *pspec,
- GeditWindow *window)
-{
- gtk_notebook_set_show_tabs (notebook, FALSE);
-}
-
-void
-_gedit_window_fullscreen (GeditWindow *window)
-{
- g_return_if_fail (GEDIT_IS_WINDOW (window));
-
- if (_gedit_window_is_fullscreen (window))
- return;
-
- /* Go to fullscreen mode and hide bars */
- gtk_window_fullscreen (&window->window);
- gtk_notebook_set_show_tabs (GTK_NOTEBOOK (window->priv->notebook), FALSE);
- g_signal_connect (window->priv->notebook, "notify::show-tabs",
- G_CALLBACK (hide_notebook_tabs_on_fullscreen), window);
-
- gtk_widget_hide (window->priv->menubar);
-
- g_signal_handlers_block_by_func (window->priv->toolbar,
- toolbar_visibility_changed,
- window);
- gtk_widget_hide (window->priv->toolbar);
-
- g_signal_handlers_block_by_func (window->priv->statusbar,
- statusbar_visibility_changed,
- window);
- gtk_widget_hide (window->priv->statusbar);
-
- fullscreen_controls_build (window);
- fullscreen_controls_show (window);
-}
-
-void
-_gedit_window_unfullscreen (GeditWindow *window)
-{
- gboolean visible;
- GtkAction *action;
-
- g_return_if_fail (GEDIT_IS_WINDOW (window));
-
- if (!_gedit_window_is_fullscreen (window))
- return;
-
- /* Unfullscreen and show bars */
- gtk_window_unfullscreen (&window->window);
- g_signal_handlers_disconnect_by_func (window->priv->notebook,
- hide_notebook_tabs_on_fullscreen,
- window);
- gtk_notebook_set_show_tabs (GTK_NOTEBOOK (window->priv->notebook), TRUE);
- gtk_widget_show (window->priv->menubar);
-
- action = gtk_action_group_get_action (window->priv->always_sensitive_action_group,
- "ViewToolbar");
- visible = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));
- if (visible)
- gtk_widget_show (window->priv->toolbar);
- g_signal_handlers_unblock_by_func (window->priv->toolbar,
- toolbar_visibility_changed,
- window);
-
- action = gtk_action_group_get_action (window->priv->always_sensitive_action_group,
- "ViewStatusbar");
- visible = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));
- if (visible)
- gtk_widget_show (window->priv->statusbar);
- g_signal_handlers_unblock_by_func (window->priv->statusbar,
- statusbar_visibility_changed,
- window);
-
- gtk_widget_hide (window->priv->fullscreen_controls);
-}
-
-gboolean
-_gedit_window_is_fullscreen (GeditWindow *window)
-{
- g_return_val_if_fail (GEDIT_IS_WINDOW (window), FALSE);
-
- return window->priv->window_state & GDK_WINDOW_STATE_FULLSCREEN;
-}
-
-/**
- * gedit_window_get_tab_from_location:
- * @window: a #GeditWindow
- * @location: a #GFile
- *
- * Gets the #GeditTab that matches with the given @location.
- *
- * Returns: the #GeditTab that matches with the given @location.
- */
-GeditTab *
-gedit_window_get_tab_from_location (GeditWindow *window,
- GFile *location)
-{
- GList *tabs;
- GList *l;
- GeditTab *ret = NULL;
-
- g_return_val_if_fail (GEDIT_IS_WINDOW (window), NULL);
- g_return_val_if_fail (G_IS_FILE (location), NULL);
-
- tabs = gtk_container_get_children (GTK_CONTAINER (window->priv->notebook));
-
- for (l = tabs; l != NULL; l = g_list_next (l))
- {
- GeditDocument *d;
- GeditTab *t;
- GFile *f;
-
- t = GEDIT_TAB (l->data);
- d = gedit_tab_get_document (t);
-
- f = gedit_document_get_location (d);
-
- if ((f != NULL))
- {
- gboolean found = g_file_equal (location, f);
-
- g_object_unref (f);
-
- if (found)
- {
- ret = t;
- break;
- }
- }
- }
-
- g_list_free (tabs);
-
- return ret;
-}
-
-/**
- * gedit_window_get_message_bus:
- * @window: a #GeditWindow
- *
- * Gets the #GeditMessageBus associated with @window. The returned reference
- * is owned by the window and should not be unreffed.
- *
- * Return value: the #GeditMessageBus associated with @window
- */
-GeditMessageBus *
-gedit_window_get_message_bus (GeditWindow *window)
-{
- g_return_val_if_fail (GEDIT_IS_WINDOW (window), NULL);
-
- return window->priv->message_bus;
-}
-
-/**
- * gedit_window_get_tab_from_uri:
- * @window: a #GeditWindow
- * @uri: the uri to get the #GeditTab
- *
- * Gets the #GeditTab that matches @uri.
- *
- * Returns: the #GeditTab associated with @uri.
- *
- * Deprecated: 2.24: Use gedit_window_get_tab_from_location() instead.
- */
-GeditTab *
-gedit_window_get_tab_from_uri (GeditWindow *window,
- const gchar *uri)
-{
- GFile *f;
- GeditTab *tab;
-
- g_return_val_if_fail (GEDIT_IS_WINDOW (window), NULL);
- g_return_val_if_fail (uri != NULL, NULL);
-
- f = g_file_new_for_uri (uri);
- tab = gedit_window_get_tab_from_location (window, f);
- g_object_unref (f);
-
- return tab;
-}
diff --git a/gedit/gedit-window.h b/gedit/gedit-window.h
deleted file mode 100755
index e8c7eef3..00000000
--- a/gedit/gedit-window.h
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
- * gedit-window.h
- * This file is part of gedit
- *
- * Copyright (C) 2005 - Paolo Maggi
- *
- * 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
- * MERCHANWINDOWILITY 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifndef __GEDIT_WINDOW_H__
-#define __GEDIT_WINDOW_H__
-
-#include <gio/gio.h>
-#include <gtk/gtk.h>
-
-#include <gedit/gedit-tab.h>
-#include <gedit/gedit-panel.h>
-#include <gedit/gedit-message-bus.h>
-
-G_BEGIN_DECLS
-
-typedef enum
-{
- GEDIT_WINDOW_STATE_NORMAL = 0,
- GEDIT_WINDOW_STATE_SAVING = 1 << 1,
- GEDIT_WINDOW_STATE_PRINTING = 1 << 2,
- GEDIT_WINDOW_STATE_LOADING = 1 << 3,
- GEDIT_WINDOW_STATE_ERROR = 1 << 4,
- GEDIT_WINDOW_STATE_SAVING_SESSION = 1 << 5
-} GeditWindowState;
-
-/*
- * Type checking and casting macros
- */
-#define GEDIT_TYPE_WINDOW (gedit_window_get_type())
-#define GEDIT_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GEDIT_TYPE_WINDOW, GeditWindow))
-#define GEDIT_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GEDIT_TYPE_WINDOW, GeditWindowClass))
-#define GEDIT_IS_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GEDIT_TYPE_WINDOW))
-#define GEDIT_IS_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEDIT_TYPE_WINDOW))
-#define GEDIT_WINDOW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GEDIT_TYPE_WINDOW, GeditWindowClass))
-
-/* Private structure type */
-typedef struct _GeditWindowPrivate GeditWindowPrivate;
-
-/*
- * Main object structure
- */
-typedef struct _GeditWindow GeditWindow;
-
-struct _GeditWindow
-{
- GtkWindow window;
-
- /*< private > */
- GeditWindowPrivate *priv;
-};
-
-/*
- * Class definition
- */
-typedef struct _GeditWindowClass GeditWindowClass;
-
-struct _GeditWindowClass
-{
- GtkWindowClass parent_class;
-
- /* Signals */
- void (* tab_added) (GeditWindow *window,
- GeditTab *tab);
- void (* tab_removed) (GeditWindow *window,
- GeditTab *tab);
- void (* tabs_reordered) (GeditWindow *window);
- void (* active_tab_changed) (GeditWindow *window,
- GeditTab *tab);
- void (* active_tab_state_changed)
- (GeditWindow *window);
-};
-
-/*
- * Public methods
- */
-GType gedit_window_get_type (void) G_GNUC_CONST;
-
-GeditTab *gedit_window_create_tab (GeditWindow *window,
- gboolean jump_to);
-
-GeditTab *gedit_window_create_tab_from_uri (GeditWindow *window,
- const gchar *uri,
- const GeditEncoding *encoding,
- gint line_pos,
- gboolean create,
- gboolean jump_to);
-
-void gedit_window_close_tab (GeditWindow *window,
- GeditTab *tab);
-
-void gedit_window_close_all_tabs (GeditWindow *window);
-
-void gedit_window_close_tabs (GeditWindow *window,
- const GList *tabs);
-
-GeditTab *gedit_window_get_active_tab (GeditWindow *window);
-
-void gedit_window_set_active_tab (GeditWindow *window,
- GeditTab *tab);
-
-/* Helper functions */
-GeditView *gedit_window_get_active_view (GeditWindow *window);
-GeditDocument *gedit_window_get_active_document (GeditWindow *window);
-
-/* Returns a newly allocated list with all the documents in the window */
-GList *gedit_window_get_documents (GeditWindow *window);
-
-/* Returns a newly allocated list with all the documents that need to be
- saved before closing the window */
-GList *gedit_window_get_unsaved_documents (GeditWindow *window);
-
-/* Returns a newly allocated list with all the views in the window */
-GList *gedit_window_get_views (GeditWindow *window);
-
-GtkWindowGroup *gedit_window_get_group (GeditWindow *window);
-
-GeditPanel *gedit_window_get_side_panel (GeditWindow *window);
-
-GeditPanel *gedit_window_get_bottom_panel (GeditWindow *window);
-
-GtkWidget *gedit_window_get_statusbar (GeditWindow *window);
-
-GtkUIManager *gedit_window_get_ui_manager (GeditWindow *window);
-
-GeditWindowState gedit_window_get_state (GeditWindow *window);
-
-GeditTab *gedit_window_get_tab_from_location (GeditWindow *window,
- GFile *location);
-
-GeditTab *gedit_window_get_tab_from_uri (GeditWindow *window,
- const gchar *uri);
-
-/* Message bus */
-GeditMessageBus *gedit_window_get_message_bus (GeditWindow *window);
-
-/*
- * Non exported functions
- */
-GtkWidget *_gedit_window_get_notebook (GeditWindow *window);
-
-GeditWindow *_gedit_window_move_tab_to_new_window (GeditWindow *window,
- GeditTab *tab);
-gboolean _gedit_window_is_removing_tabs (GeditWindow *window);
-
-GFile *_gedit_window_get_default_location (GeditWindow *window);
-
-void _gedit_window_set_default_location (GeditWindow *window,
- GFile *location);
-
-void _gedit_window_set_saving_session_state (GeditWindow *window,
- gboolean saving_session);
-
-void _gedit_window_fullscreen (GeditWindow *window);
-
-void _gedit_window_unfullscreen (GeditWindow *window);
-
-gboolean _gedit_window_is_fullscreen (GeditWindow *window);
-
-/* these are in gedit-window because of screen safety */
-void _gedit_recent_add (GeditWindow *window,
- const gchar *uri,
- const gchar *mime);
-void _gedit_recent_remove (GeditWindow *window,
- const gchar *uri);
-
-G_END_DECLS
-
-#endif /* __GEDIT_WINDOW_H__ */
diff --git a/gedit/gedit.c b/gedit/gedit.c
deleted file mode 100755
index fa53b407..00000000
--- a/gedit/gedit.c
+++ /dev/null
@@ -1,766 +0,0 @@
-/*
- * gedit.c
- * This file is part of gedit
- *
- * Copyright (C) 2005 - Paolo Maggi
- *
- * 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., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * Modified by the gedit Team, 2005. See the AUTHORS file for a
- * list of people on the gedit Team.
- * See the ChangeLog files for a list of changes.
- *
- * $Id$
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <errno.h>
-#include <locale.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <glib.h>
-#include <glib/gi18n.h>
-#include <gtk/gtk.h>
-
-#ifdef GDK_WINDOWING_X11
-#include <gdk/gdkx.h>
-#endif
-
-#include "gedit-app.h"
-#include "gedit-commands.h"
-#include "gedit-debug.h"
-#include "gedit-dirs.h"
-#include "gedit-encodings.h"
-#include "gedit-plugins-engine.h"
-#include "gedit-prefs-manager-app.h"
-#include "gedit-session.h"
-#include "gedit-utils.h"
-#include "gedit-window.h"
-
-#include "eggsmclient.h"
-#include "eggdesktopfile.h"
-
-#ifdef G_OS_WIN32
-#define SAVE_DATADIR DATADIR
-#undef DATADIR
-#include <io.h>
-#include <conio.h>
-#define _WIN32_WINNT 0x0500
-#include <windows.h>
-#define DATADIR SAVE_DATADIR
-#undef SAVE_DATADIR
-#endif
-
-#ifdef OS_OSX
-#include <ige-mac-dock.h>
-#include <ige-mac-integration.h>
-#include "osx/gedit-osx.h"
-#endif
-
-#ifndef ENABLE_GVFS_METADATA
-#include "gedit-metadata-manager.h"
-#endif
-
-static guint32 startup_timestamp = 0;
-
-#ifndef G_OS_WIN32
-#include "bacon-message-connection.h"
-
-static BaconMessageConnection *connection;
-#endif
-
-/* command line */
-static gint line_position = 0;
-static gchar *encoding_charset = NULL;
-static gboolean new_window_option = FALSE;
-static gboolean new_document_option = FALSE;
-static gchar **remaining_args = NULL;
-static GSList *file_list = NULL;
-
-static void
-show_version_and_quit (void)
-{
- g_print ("%s - Version %s\n", g_get_application_name (), VERSION);
-
- exit (0);
-}
-
-static void
-list_encodings_and_quit (void)
-{
- gint i = 0;
- const GeditEncoding *enc;
-
- while ((enc = gedit_encoding_get_from_index (i)) != NULL)
- {
- g_print ("%s\n", gedit_encoding_get_charset (enc));
-
- ++i;
- }
-
- exit (0);
-}
-
-static const GOptionEntry options [] =
-{
- { "version", 'V', G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK,
- show_version_and_quit, N_("Show the application's version"), NULL },
-
- { "encoding", '\0', 0, G_OPTION_ARG_STRING, &encoding_charset,
- N_("Set the character encoding to be used to open the files listed on the command line"), N_("ENCODING")},
-
- { "list-encodings", '\0', G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK,
- list_encodings_and_quit, N_("Display list of possible values for the encoding option"), NULL},
-
- { "new-window", '\0', 0, G_OPTION_ARG_NONE, &new_window_option,
- N_("Create a new top-level window in an existing instance of gedit"), NULL },
-
- { "new-document", '\0', 0, G_OPTION_ARG_NONE, &new_document_option,
- N_("Create a new document in an existing instance of gedit"), NULL },
-
- { G_OPTION_REMAINING, '\0', 0, G_OPTION_ARG_FILENAME_ARRAY, &remaining_args,
- NULL, N_("[FILE...]") }, /* collects file arguments */
-
- {NULL}
-};
-
-static void
-free_command_line_data (void)
-{
- g_slist_foreach (file_list, (GFunc) g_object_unref, NULL);
- g_slist_free (file_list);
- file_list = NULL;
-
- g_strfreev (remaining_args);
- remaining_args = NULL;
-
- g_free (encoding_charset);
- encoding_charset = NULL;
-
- new_window_option = FALSE;
- new_document_option = FALSE;
- line_position = 0;
-}
-
-static void
-gedit_get_command_line_data (void)
-{
- if (remaining_args)
- {
- gint i;
-
- for (i = 0; remaining_args[i]; i++)
- {
- if (*remaining_args[i] == '+')
- {
- if (*(remaining_args[i] + 1) == '\0')
- /* goto the last line of the document */
- line_position = G_MAXINT;
- else
- line_position = atoi (remaining_args[i] + 1);
- }
- else
- {
- GFile *file;
-
- file = g_file_new_for_commandline_arg (remaining_args[i]);
- file_list = g_slist_prepend (file_list, file);
- }
- }
-
- file_list = g_slist_reverse (file_list);
- }
-
- if (encoding_charset &&
- (gedit_encoding_get_from_charset (encoding_charset) == NULL))
- {
- g_print (_("%s: invalid encoding.\n"),
- encoding_charset);
- }
-}
-
-static guint32
-get_startup_timestamp (void)
-{
- const gchar *startup_id_env;
- gchar *startup_id = NULL;
- gchar *time_str;
- gchar *end;
- gulong retval = 0;
-
- /* we don't unset the env, since startup-notification
- * may still need it */
- startup_id_env = g_getenv ("DESKTOP_STARTUP_ID");
- if (startup_id_env == NULL)
- goto out;
-
- startup_id = g_strdup (startup_id_env);
-
- time_str = g_strrstr (startup_id, "_TIME");
- if (time_str == NULL)
- goto out;
-
- errno = 0;
-
- /* Skip past the "_TIME" part */
- time_str += 5;
-
- retval = strtoul (time_str, &end, 0);
- if (end == time_str || errno != 0)
- retval = 0;
-
- out:
- g_free (startup_id);
-
- return (retval > 0) ? retval : 0;
-}
-
-#ifndef G_OS_WIN32
-static GdkDisplay *
-display_open_if_needed (const gchar *name)
-{
- GSList *displays;
- GSList *l;
- GdkDisplay *display = NULL;
-
- displays = gdk_display_manager_list_displays (gdk_display_manager_get ());
-
- for (l = displays; l != NULL; l = l->next)
- {
- if (strcmp (gdk_display_get_name ((GdkDisplay *) l->data), name) == 0)
- {
- display = l->data;
- break;
- }
- }
-
- g_slist_free (displays);
-
- return display != NULL ? display : gdk_display_open (name);
-}
-
-/* serverside */
-static void
-on_message_received (const char *message,
- gpointer data)
-{
- const GeditEncoding *encoding = NULL;
- gchar **commands;
- gchar **params;
- gint workspace;
- gint viewport_x;
- gint viewport_y;
- gchar *display_name;
- gint screen_number;
- gint i;
- GeditApp *app;
- GeditWindow *window;
- GdkDisplay *display;
- GdkScreen *screen;
-
- g_return_if_fail (message != NULL);
-
- gedit_debug_message (DEBUG_APP, "Received message:\n%s\n", message);
-
- commands = g_strsplit (message, "\v", -1);
-
- /* header */
- params = g_strsplit (commands[0], "\t", 6);
- startup_timestamp = atoi (params[0]);
- display_name = params[1];
- screen_number = atoi (params[2]);
- workspace = atoi (params[3]);
- viewport_x = atoi (params[4]);
- viewport_y = atoi (params[5]);
-
- display = display_open_if_needed (display_name);
- if (display == NULL)
- {
- g_warning ("Could not open display %s\n", display_name);
- g_strfreev (params);
- goto out;
- }
-
- screen = gdk_display_get_screen (display, screen_number);
-
- g_strfreev (params);
-
- /* body */
- for (i = 1; commands[i] != NULL; i++)
- {
- params = g_strsplit (commands[i], "\t", -1);
-
- if (strcmp (params[0], "NEW-WINDOW") == 0)
- {
- new_window_option = TRUE;
- }
- else if (strcmp (params[0], "NEW-DOCUMENT") == 0)
- {
- new_document_option = TRUE;
- }
- else if (strcmp (params[0], "OPEN-URIS") == 0)
- {
- gint n_uris, j;
- gchar **uris;
-
- line_position = atoi (params[1]);
-
- if (params[2] != '\0')
- encoding = gedit_encoding_get_from_charset (params[2]);
-
- n_uris = atoi (params[3]);
- uris = g_strsplit (params[4], " ", n_uris);
-
- for (j = 0; j < n_uris; j++)
- {
- GFile *file;
-
- file = g_file_new_for_uri (uris[j]);
- file_list = g_slist_prepend (file_list, file);
- }
-
- file_list = g_slist_reverse (file_list);
-
- /* the list takes ownerhip of the strings,
- * only free the array */
- g_free (uris);
- }
- else
- {
- g_warning ("Unexpected bacon command");
- }
-
- g_strfreev (params);
- }
-
- /* execute the commands */
-
- app = gedit_app_get_default ();
-
- if (new_window_option)
- {
- window = gedit_app_create_window (app, screen);
- }
- else
- {
- /* get a window in the current workspace (if exists) and raise it */
- window = _gedit_app_get_window_in_viewport (app,
- screen,
- workspace,
- viewport_x,
- viewport_y);
- }
-
- if (file_list != NULL)
- {
- _gedit_cmd_load_files_from_prompt (window,
- file_list,
- encoding,
- line_position);
-
- if (new_document_option)
- gedit_window_create_tab (window, TRUE);
- }
- else
- {
- GeditDocument *doc;
- doc = gedit_window_get_active_document (window);
-
- if (doc == NULL ||
- !gedit_document_is_untouched (doc) ||
- new_document_option)
- gedit_window_create_tab (window, TRUE);
- }
-
- /* set the proper interaction time on the window.
- * Fall back to roundtripping to the X server when we
- * don't have the timestamp, e.g. when launched from
- * terminal. We also need to make sure that the window
- * has been realized otherwise it will not work. lame.
- */
- if (!GTK_WIDGET_REALIZED (window))
- gtk_widget_realize (GTK_WIDGET (window));
-
-#ifdef GDK_WINDOWING_X11
- if (startup_timestamp <= 0)
- startup_timestamp = gdk_x11_get_server_time (gtk_widget_get_window (GTK_WIDGET (window)));
-
- gdk_x11_window_set_user_time (gtk_widget_get_window (GTK_WIDGET (window)),
- startup_timestamp);
-#endif
-
- gtk_window_present (GTK_WINDOW (window));
-
- out:
- g_strfreev (commands);
-
- free_command_line_data ();
-}
-
-/* clientside */
-static void
-send_bacon_message (void)
-{
- GdkScreen *screen;
- GdkDisplay *display;
- const gchar *display_name;
- gint screen_number;
- gint ws;
- gint viewport_x;
- gint viewport_y;
- GString *command;
-
- /* the messages have the following format:
- * <--- header ---> <---- body ----->
- * timestamp \t display_name \t screen_number \t workspace \t viewport_x \t viewport_y \v OP1 \t arg \t arg \v OP2 \t arg \t arg|...
- *
- * when the arg is a list of uri, they are separated by a space.
- * So the delimiters are \v for the commands, \t for the tokens in
- * a command and ' ' for the uris: note that such delimiters cannot
- * be part of an uri, this way parsing is easier.
- */
-
- gedit_debug (DEBUG_APP);
-
- screen = gdk_screen_get_default ();
- display = gdk_screen_get_display (screen);
-
- display_name = gdk_display_get_name (display);
- screen_number = gdk_screen_get_number (screen);
-
- gedit_debug_message (DEBUG_APP, "Display: %s", display_name);
- gedit_debug_message (DEBUG_APP, "Screen: %d", screen_number);
-
- ws = gedit_utils_get_current_workspace (screen);
- gedit_utils_get_current_viewport (screen, &viewport_x, &viewport_y);
-
- command = g_string_new (NULL);
-
- /* header */
- g_string_append_printf (command,
- "%" G_GUINT32_FORMAT "\t%s\t%d\t%d\t%d\t%d",
- startup_timestamp,
- display_name,
- screen_number,
- ws,
- viewport_x,
- viewport_y);
-
- /* NEW-WINDOW command */
- if (new_window_option)
- {
- command = g_string_append_c (command, '\v');
- command = g_string_append (command, "NEW-WINDOW");
- }
-
- /* NEW-DOCUMENT command */
- if (new_document_option)
- {
- command = g_string_append_c (command, '\v');
- command = g_string_append (command, "NEW-DOCUMENT");
- }
-
- /* OPEN_URIS command, optionally specify line_num and encoding */
- if (file_list)
- {
- GSList *l;
-
- command = g_string_append_c (command, '\v');
- command = g_string_append (command, "OPEN-URIS");
-
- g_string_append_printf (command,
- "\t%d\t%s\t%u\t",
- line_position,
- encoding_charset ? encoding_charset : "",
- g_slist_length (file_list));
-
- for (l = file_list; l != NULL; l = l->next)
- {
- gchar *uri;
-
- uri = g_file_get_uri (G_FILE (l->data));
- command = g_string_append (command, uri);
- if (l->next != NULL)
- command = g_string_append_c (command, ' ');
-
- g_free (uri);
- }
- }
-
- gedit_debug_message (DEBUG_APP, "Bacon Message: %s", command->str);
-
- bacon_message_connection_send (connection,
- command->str);
-
- g_string_free (command, TRUE);
-}
-#endif /* G_OS_WIN32 */
-
-#ifdef G_OS_WIN32
-static void
-setup_path (void)
-{
- gchar *path;
- gchar *installdir;
- gchar *bin;
-
- installdir = g_win32_get_package_installation_directory_of_module (NULL);
-
- bin = g_build_filename (installdir,
- "bin", NULL);
- g_free (installdir);
-
- /* Set PATH to include the gedit executable's folder */
- path = g_build_path (";",
- bin,
- g_getenv ("PATH"),
- NULL);
- g_free (bin);
-
- if (!g_setenv ("PATH", path, TRUE))
- g_warning ("Could not set PATH for gedit");
-
- g_free (path);
-}
-#endif
-
-int
-main (int argc, char *argv[])
-{
- GOptionContext *context;
- GeditPluginsEngine *engine;
- GeditWindow *window;
- GeditApp *app;
- gboolean restored = FALSE;
- GError *error = NULL;
- gchar *dir;
- gchar *icon_dir;
-
- /* Init type system as soon as possible */
- g_type_init ();
-
- /* Init glib threads asap */
- g_thread_init (NULL);
-
- /* Setup debugging */
- gedit_debug_init ();
- gedit_debug_message (DEBUG_APP, "Startup");
-
- setlocale (LC_ALL, "");
-
- dir = gedit_dirs_get_gedit_locale_dir ();
- bindtextdomain (GETTEXT_PACKAGE, dir);
- g_free (dir);
- bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
- textdomain (GETTEXT_PACKAGE);
-
- startup_timestamp = get_startup_timestamp();
-
- /* Setup command line options */
- context = g_option_context_new (_("- Edit text files"));
- g_option_context_add_main_entries (context, options, GETTEXT_PACKAGE);
- g_option_context_add_group (context, gtk_get_option_group (FALSE));
- g_option_context_add_group (context, egg_sm_client_get_option_group ());
-
-#ifdef G_OS_WIN32
- setup_path ();
-
- /* If we open gedit from a console get the stdout printing */
- if (fileno (stdout) != -1 &&
- _get_osfhandle (fileno (stdout)) != -1)
- {
- /* stdout is fine, presumably redirected to a file or pipe */
- }
- else
- {
- typedef BOOL (* WINAPI AttachConsole_t) (DWORD);
-
- AttachConsole_t p_AttachConsole =
- (AttachConsole_t) GetProcAddress (GetModuleHandle ("kernel32.dll"),
- "AttachConsole");
-
- if (p_AttachConsole != NULL && p_AttachConsole (ATTACH_PARENT_PROCESS))
- {
- freopen ("CONOUT$", "w", stdout);
- dup2 (fileno (stdout), 1);
- freopen ("CONOUT$", "w", stderr);
- dup2 (fileno (stderr), 2);
- }
- }
-#endif
-
- gtk_init (&argc, &argv);
-
- if (!g_option_context_parse (context, &argc, &argv, &error))
- {
- g_print(_("%s\nRun '%s --help' to see a full list of available command line options.\n"),
- error->message, argv[0]);
- g_error_free (error);
- return 1;
- }
-
- g_option_context_free (context);
-
-#ifndef G_OS_WIN32
- gedit_debug_message (DEBUG_APP, "Create bacon connection");
-
- connection = bacon_message_connection_new ("gedit");
-
- if (connection != NULL)
- {
- if (!bacon_message_connection_get_is_server (connection))
- {
- gedit_debug_message (DEBUG_APP, "I'm a client");
-
- gedit_get_command_line_data ();
-
- send_bacon_message ();
-
- free_command_line_data ();
-
- /* we never popup a window... tell startup-notification
- * that we are done.
- */
- gdk_notify_startup_complete ();
-
- bacon_message_connection_free (connection);
-
- exit (0);
- }
- else
- {
- gedit_debug_message (DEBUG_APP, "I'm a server");
-
- bacon_message_connection_set_callback (connection,
- on_message_received,
- NULL);
- }
- }
- else
- {
- g_warning ("Cannot create the 'gedit' connection.");
- }
-#endif
-
- gedit_debug_message (DEBUG_APP, "Set icon");
-
- dir = gedit_dirs_get_gedit_data_dir ();
- icon_dir = g_build_filename (dir,
- "icons",
- NULL);
- g_free (dir);
-
- gtk_icon_theme_append_search_path (gtk_icon_theme_get_default (),
- icon_dir);
- g_free (icon_dir);
-
-#ifdef GDK_WINDOWING_X11
- /* Set the associated .desktop file */
- egg_set_desktop_file (DATADIR "/applications/gedit.desktop");
-#else
- /* manually set name and icon */
- g_set_application_name("gedit");
- gtk_window_set_default_icon_name ("accessories-text-editor");
-#endif
-
- /* Load user preferences */
- gedit_debug_message (DEBUG_APP, "Init prefs manager");
- gedit_prefs_manager_app_init ();
-
- /* Init plugins engine */
- gedit_debug_message (DEBUG_APP, "Init plugins");
- engine = gedit_plugins_engine_get_default ();
-
- #if !GTK_CHECK_VERSION(3, 0, 0)
- gtk_about_dialog_set_url_hook(gedit_utils_activate_url, NULL, NULL);
- #endif
- /* Initialize session management */
- gedit_debug_message (DEBUG_APP, "Init session manager");
- gedit_session_init ();
-
-#ifdef OS_OSX
- ige_mac_menu_set_global_key_handler_enabled (FALSE);
-#endif
-
- if (gedit_session_is_restored ())
- restored = gedit_session_load ();
-
- if (!restored)
- {
- gedit_debug_message (DEBUG_APP, "Analyze command line data");
- gedit_get_command_line_data ();
-
- gedit_debug_message (DEBUG_APP, "Get default app");
- app = gedit_app_get_default ();
-
- gedit_debug_message (DEBUG_APP, "Create main window");
- window = gedit_app_create_window (app, NULL);
-
- if (file_list != NULL)
- {
- const GeditEncoding *encoding = NULL;
-
- if (encoding_charset)
- encoding = gedit_encoding_get_from_charset (encoding_charset);
-
- gedit_debug_message (DEBUG_APP, "Load files");
- _gedit_cmd_load_files_from_prompt (window,
- file_list,
- encoding,
- line_position);
- }
- else
- {
- gedit_debug_message (DEBUG_APP, "Create tab");
- gedit_window_create_tab (window, TRUE);
- }
-
- gedit_debug_message (DEBUG_APP, "Show window");
- gtk_widget_show (GTK_WIDGET (window));
-
- free_command_line_data ();
- }
-
- gedit_debug_message (DEBUG_APP, "Start gtk-main");
-
-#ifdef OS_OSX
- gedit_osx_init(gedit_app_get_default ());
-#endif
- gtk_main();
-
-#ifndef G_OS_WIN32
- bacon_message_connection_free (connection);
-#endif
-
- /* We kept the original engine reference here. So let's unref it to
- * finalize it properly.
- */
- g_object_unref (engine);
- gedit_prefs_manager_app_shutdown ();
-
-#ifndef ENABLE_GVFS_METADATA
- gedit_metadata_manager_shutdown ();
-#endif
-
- return 0;
-}
-
diff --git a/gedit/gedit.rc b/gedit/gedit.rc
deleted file mode 100755
index 17d8eb13..00000000
--- a/gedit/gedit.rc
+++ /dev/null
@@ -1 +0,0 @@
-A ICON MOVEABLE PURE LOADONCALL DISCARDABLE "../pixmaps/gedit.ico"
diff --git a/gedit/gedittextregion.c b/gedit/gedittextregion.c
deleted file mode 100755
index f6790489..00000000
--- a/gedit/gedittextregion.c
+++ /dev/null
@@ -1,647 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
- *
- * gedittextregion.h - GtkTextMark based region utility functions
- *
- * This file is part of the GtkSourceView widget
- *
- * Copyright (C) 2002 Gustavo Gir�ldez <[email protected]>
- *
- * 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., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <glib.h>
-
-#include "gedittextregion.h"
-
-
-#undef ENABLE_DEBUG
-/*
-#define ENABLE_DEBUG
-*/
-
-#ifdef ENABLE_DEBUG
-#define DEBUG(x) (x)
-#else
-#define DEBUG(x)
-#endif
-
-typedef struct _Subregion {
- GtkTextMark *start;
- GtkTextMark *end;
-} Subregion;
-
-struct _GeditTextRegion {
- GtkTextBuffer *buffer;
- GList *subregions;
- guint32 time_stamp;
-};
-
-typedef struct _GeditTextRegionIteratorReal GeditTextRegionIteratorReal;
-
-struct _GeditTextRegionIteratorReal {
- GeditTextRegion *region;
- guint32 region_time_stamp;
-
- GList *subregions;
-};
-
-
-/* ----------------------------------------------------------------------
- Private interface
- ---------------------------------------------------------------------- */
-
-/* Find and return a subregion node which contains the given text
- iter. If left_side is TRUE, return the subregion which contains
- the text iter or which is the leftmost; else return the rightmost
- subregion */
-static GList *
-find_nearest_subregion (GeditTextRegion *region,
- const GtkTextIter *iter,
- GList *begin,
- gboolean leftmost,
- gboolean include_edges)
-{
- GList *l, *retval;
-
- g_return_val_if_fail (region != NULL && iter != NULL, NULL);
-
- if (!begin)
- begin = region->subregions;
-
- if (begin)
- retval = begin->prev;
- else
- retval = NULL;
-
- for (l = begin; l; l = l->next) {
- GtkTextIter sr_iter;
- Subregion *sr = l->data;
- gint cmp;
-
- if (!leftmost) {
- gtk_text_buffer_get_iter_at_mark (region->buffer, &sr_iter, sr->end);
- cmp = gtk_text_iter_compare (iter, &sr_iter);
- if (cmp < 0 || (cmp == 0 && include_edges)) {
- retval = l;
- break;
- }
-
- } else {
- gtk_text_buffer_get_iter_at_mark (region->buffer, &sr_iter, sr->start);
- cmp = gtk_text_iter_compare (iter, &sr_iter);
- if (cmp > 0 || (cmp == 0 && include_edges))
- retval = l;
- else
- break;
- }
- }
- return retval;
-}
-
-/* ----------------------------------------------------------------------
- Public interface
- ---------------------------------------------------------------------- */
-
-GeditTextRegion *
-gedit_text_region_new (GtkTextBuffer *buffer)
-{
- GeditTextRegion *region;
-
- g_return_val_if_fail (buffer != NULL, NULL);
-
- region = g_new (GeditTextRegion, 1);
- region->buffer = buffer;
- region->subregions = NULL;
- region->time_stamp = 0;
-
- return region;
-}
-
-void
-gedit_text_region_destroy (GeditTextRegion *region, gboolean delete_marks)
-{
- g_return_if_fail (region != NULL);
-
- while (region->subregions) {
- Subregion *sr = region->subregions->data;
- if (delete_marks) {
- gtk_text_buffer_delete_mark (region->buffer, sr->start);
- gtk_text_buffer_delete_mark (region->buffer, sr->end);
- }
- g_free (sr);
- region->subregions = g_list_delete_link (region->subregions,
- region->subregions);
- }
- region->buffer = NULL;
- region->time_stamp = 0;
-
- g_free (region);
-}
-
-GtkTextBuffer *
-gedit_text_region_get_buffer (GeditTextRegion *region)
-{
- g_return_val_if_fail (region != NULL, NULL);
-
- return region->buffer;
-}
-
-static void
-gedit_text_region_clear_zero_length_subregions (GeditTextRegion *region)
-{
- GtkTextIter start, end;
- GList *node;
-
- g_return_if_fail (region != NULL);
-
- for (node = region->subregions; node; ) {
- Subregion *sr = node->data;
- gtk_text_buffer_get_iter_at_mark (region->buffer, &start, sr->start);
- gtk_text_buffer_get_iter_at_mark (region->buffer, &end, sr->end);
- if (gtk_text_iter_equal (&start, &end)) {
- gtk_text_buffer_delete_mark (region->buffer, sr->start);
- gtk_text_buffer_delete_mark (region->buffer, sr->end);
- g_free (sr);
- if (node == region->subregions)
- region->subregions = node = g_list_delete_link (node, node);
- else
- node = g_list_delete_link (node, node);
-
- ++region->time_stamp;
-
- } else {
- node = node->next;
- }
- }
-}
-
-void
-gedit_text_region_add (GeditTextRegion *region,
- const GtkTextIter *_start,
- const GtkTextIter *_end)
-{
- GList *start_node, *end_node;
- GtkTextIter start, end;
-
- g_return_if_fail (region != NULL && _start != NULL && _end != NULL);
-
- start = *_start;
- end = *_end;
-
- DEBUG (g_print ("---\n"));
- DEBUG (gedit_text_region_debug_print (region));
- DEBUG (g_message ("region_add (%d, %d)",
- gtk_text_iter_get_offset (&start),
- gtk_text_iter_get_offset (&end)));
-
- gtk_text_iter_order (&start, &end);
-
- /* don't add zero-length regions */
- if (gtk_text_iter_equal (&start, &end))
- return;
-
- /* find bounding subregions */
- start_node = find_nearest_subregion (region, &start, NULL, FALSE, TRUE);
- end_node = find_nearest_subregion (region, &end, start_node, TRUE, TRUE);
-
- if (start_node == NULL || end_node == NULL || end_node == start_node->prev) {
- /* create the new subregion */
- Subregion *sr = g_new0 (Subregion, 1);
- sr->start = gtk_text_buffer_create_mark (region->buffer, NULL, &start, TRUE);
- sr->end = gtk_text_buffer_create_mark (region->buffer, NULL, &end, FALSE);
-
- if (start_node == NULL) {
- /* append the new region */
- region->subregions = g_list_append (region->subregions, sr);
-
- } else if (end_node == NULL) {
- /* prepend the new region */
- region->subregions = g_list_prepend (region->subregions, sr);
-
- } else {
- /* we are in the middle of two subregions */
- region->subregions = g_list_insert_before (region->subregions,
- start_node, sr);
- }
- }
- else {
- GtkTextIter iter;
- Subregion *sr = start_node->data;
- if (start_node != end_node) {
- /* we need to merge some subregions */
- GList *l = start_node->next;
- Subregion *q;
-
- gtk_text_buffer_delete_mark (region->buffer, sr->end);
- while (l != end_node) {
- q = l->data;
- gtk_text_buffer_delete_mark (region->buffer, q->start);
- gtk_text_buffer_delete_mark (region->buffer, q->end);
- g_free (q);
- l = g_list_delete_link (l, l);
- }
- q = l->data;
- gtk_text_buffer_delete_mark (region->buffer, q->start);
- sr->end = q->end;
- g_free (q);
- l = g_list_delete_link (l, l);
- }
- /* now move marks if that action expands the region */
- gtk_text_buffer_get_iter_at_mark (region->buffer, &iter, sr->start);
- if (gtk_text_iter_compare (&iter, &start) > 0)
- gtk_text_buffer_move_mark (region->buffer, sr->start, &start);
- gtk_text_buffer_get_iter_at_mark (region->buffer, &iter, sr->end);
- if (gtk_text_iter_compare (&iter, &end) < 0)
- gtk_text_buffer_move_mark (region->buffer, sr->end, &end);
- }
-
- ++region->time_stamp;
-
- DEBUG (gedit_text_region_debug_print (region));
-}
-
-void
-gedit_text_region_subtract (GeditTextRegion *region,
- const GtkTextIter *_start,
- const GtkTextIter *_end)
-{
- GList *start_node, *end_node, *node;
- GtkTextIter sr_start_iter, sr_end_iter;
- gboolean done;
- gboolean start_is_outside, end_is_outside;
- Subregion *sr;
- GtkTextIter start, end;
-
- g_return_if_fail (region != NULL && _start != NULL && _end != NULL);
-
- start = *_start;
- end = *_end;
-
- DEBUG (g_print ("---\n"));
- DEBUG (gedit_text_region_debug_print (region));
- DEBUG (g_message ("region_substract (%d, %d)",
- gtk_text_iter_get_offset (&start),
- gtk_text_iter_get_offset (&end)));
-
- gtk_text_iter_order (&start, &end);
-
- /* find bounding subregions */
- start_node = find_nearest_subregion (region, &start, NULL, FALSE, FALSE);
- end_node = find_nearest_subregion (region, &end, start_node, TRUE, FALSE);
-
- /* easy case first */
- if (start_node == NULL || end_node == NULL || end_node == start_node->prev)
- return;
-
- /* deal with the start point */
- start_is_outside = end_is_outside = FALSE;
-
- sr = start_node->data;
- gtk_text_buffer_get_iter_at_mark (region->buffer, &sr_start_iter, sr->start);
- gtk_text_buffer_get_iter_at_mark (region->buffer, &sr_end_iter, sr->end);
-
- if (gtk_text_iter_in_range (&start, &sr_start_iter, &sr_end_iter) &&
- !gtk_text_iter_equal (&start, &sr_start_iter)) {
- /* the starting point is inside the first subregion */
- if (gtk_text_iter_in_range (&end, &sr_start_iter, &sr_end_iter) &&
- !gtk_text_iter_equal (&end, &sr_end_iter)) {
- /* the ending point is also inside the first
- subregion: we need to split */
- Subregion *new_sr = g_new0 (Subregion, 1);
- new_sr->end = sr->end;
- new_sr->start = gtk_text_buffer_create_mark (region->buffer,
- NULL, &end, TRUE);
- start_node = g_list_insert_before (start_node, start_node->next, new_sr);
-
- sr->end = gtk_text_buffer_create_mark (region->buffer,
- NULL, &start, FALSE);
-
- /* no further processing needed */
- DEBUG (g_message ("subregion splitted"));
-
- return;
- } else {
- /* the ending point is outside, so just move
- the end of the subregion to the starting point */
- gtk_text_buffer_move_mark (region->buffer, sr->end, &start);
- }
- } else {
- /* the starting point is outside (and so to the left)
- of the first subregion */
- DEBUG (g_message ("start is outside"));
-
- start_is_outside = TRUE;
- }
-
- /* deal with the end point */
- if (start_node != end_node) {
- sr = end_node->data;
- gtk_text_buffer_get_iter_at_mark (region->buffer, &sr_start_iter, sr->start);
- gtk_text_buffer_get_iter_at_mark (region->buffer, &sr_end_iter, sr->end);
- }
-
- if (gtk_text_iter_in_range (&end, &sr_start_iter, &sr_end_iter) &&
- !gtk_text_iter_equal (&end, &sr_end_iter)) {
- /* ending point is inside, move the start mark */
- gtk_text_buffer_move_mark (region->buffer, sr->start, &end);
- } else {
- end_is_outside = TRUE;
- DEBUG (g_message ("end is outside"));
-
- }
-
- /* finally remove any intermediate subregions */
- done = FALSE;
- node = start_node;
-
- while (!done) {
- if (node == end_node)
- /* we are done, exit in the next iteration */
- done = TRUE;
-
- if ((node == start_node && !start_is_outside) ||
- (node == end_node && !end_is_outside)) {
- /* skip starting or ending node */
- node = node->next;
- } else {
- GList *l = node->next;
- sr = node->data;
- gtk_text_buffer_delete_mark (region->buffer, sr->start);
- gtk_text_buffer_delete_mark (region->buffer, sr->end);
- g_free (sr);
- region->subregions = g_list_delete_link (region->subregions,
- node);
- node = l;
- }
- }
-
- ++region->time_stamp;
-
- DEBUG (gedit_text_region_debug_print (region));
-
- /* now get rid of empty subregions */
- gedit_text_region_clear_zero_length_subregions (region);
-
- DEBUG (gedit_text_region_debug_print (region));
-}
-
-gint
-gedit_text_region_subregions (GeditTextRegion *region)
-{
- g_return_val_if_fail (region != NULL, 0);
-
- return g_list_length (region->subregions);
-}
-
-gboolean
-gedit_text_region_nth_subregion (GeditTextRegion *region,
- guint subregion,
- GtkTextIter *start,
- GtkTextIter *end)
-{
- Subregion *sr;
-
- g_return_val_if_fail (region != NULL, FALSE);
-
- sr = g_list_nth_data (region->subregions, subregion);
- if (sr == NULL)
- return FALSE;
-
- if (start)
- gtk_text_buffer_get_iter_at_mark (region->buffer, start, sr->start);
- if (end)
- gtk_text_buffer_get_iter_at_mark (region->buffer, end, sr->end);
-
- return TRUE;
-}
-
-GeditTextRegion *
-gedit_text_region_intersect (GeditTextRegion *region,
- const GtkTextIter *_start,
- const GtkTextIter *_end)
-{
- GList *start_node, *end_node, *node;
- GtkTextIter sr_start_iter, sr_end_iter;
- Subregion *sr, *new_sr;
- gboolean done;
- GeditTextRegion *new_region;
- GtkTextIter start, end;
-
- g_return_val_if_fail (region != NULL && _start != NULL && _end != NULL, NULL);
-
- start = *_start;
- end = *_end;
-
- gtk_text_iter_order (&start, &end);
-
- /* find bounding subregions */
- start_node = find_nearest_subregion (region, &start, NULL, FALSE, FALSE);
- end_node = find_nearest_subregion (region, &end, start_node, TRUE, FALSE);
-
- /* easy case first */
- if (start_node == NULL || end_node == NULL || end_node == start_node->prev)
- return NULL;
-
- new_region = gedit_text_region_new (region->buffer);
- done = FALSE;
-
- sr = start_node->data;
- gtk_text_buffer_get_iter_at_mark (region->buffer, &sr_start_iter, sr->start);
- gtk_text_buffer_get_iter_at_mark (region->buffer, &sr_end_iter, sr->end);
-
- /* starting node */
- if (gtk_text_iter_in_range (&start, &sr_start_iter, &sr_end_iter)) {
- new_sr = g_new0 (Subregion, 1);
- new_region->subregions = g_list_prepend (new_region->subregions, new_sr);
-
- new_sr->start = gtk_text_buffer_create_mark (new_region->buffer, NULL,
- &start, TRUE);
- if (start_node == end_node) {
- /* things will finish shortly */
- done = TRUE;
- if (gtk_text_iter_in_range (&end, &sr_start_iter, &sr_end_iter))
- new_sr->end = gtk_text_buffer_create_mark (new_region->buffer,
- NULL, &end, FALSE);
- else
- new_sr->end = gtk_text_buffer_create_mark (new_region->buffer,
- NULL, &sr_end_iter,
- FALSE);
- } else {
- new_sr->end = gtk_text_buffer_create_mark (new_region->buffer, NULL,
- &sr_end_iter, FALSE);
- }
- node = start_node->next;
- } else {
- /* start should be the same as the subregion, so copy it in the loop */
- node = start_node;
- }
-
- if (!done) {
- while (node != end_node) {
- /* copy intermediate subregions verbatim */
- sr = node->data;
- gtk_text_buffer_get_iter_at_mark (region->buffer, &sr_start_iter,
- sr->start);
- gtk_text_buffer_get_iter_at_mark (region->buffer, &sr_end_iter, sr->end);
-
- new_sr = g_new0 (Subregion, 1);
- new_region->subregions = g_list_prepend (new_region->subregions, new_sr);
- new_sr->start = gtk_text_buffer_create_mark (new_region->buffer, NULL,
- &sr_start_iter, TRUE);
- new_sr->end = gtk_text_buffer_create_mark (new_region->buffer, NULL,
- &sr_end_iter, FALSE);
- /* next node */
- node = node->next;
- }
-
- /* ending node */
- sr = node->data;
- gtk_text_buffer_get_iter_at_mark (region->buffer, &sr_start_iter, sr->start);
- gtk_text_buffer_get_iter_at_mark (region->buffer, &sr_end_iter, sr->end);
-
- new_sr = g_new0 (Subregion, 1);
- new_region->subregions = g_list_prepend (new_region->subregions, new_sr);
-
- new_sr->start = gtk_text_buffer_create_mark (new_region->buffer, NULL,
- &sr_start_iter, TRUE);
-
- if (gtk_text_iter_in_range (&end, &sr_start_iter, &sr_end_iter))
- new_sr->end = gtk_text_buffer_create_mark (new_region->buffer, NULL,
- &end, FALSE);
- else
- new_sr->end = gtk_text_buffer_create_mark (new_region->buffer, NULL,
- &sr_end_iter, FALSE);
- }
-
- new_region->subregions = g_list_reverse (new_region->subregions);
- return new_region;
-}
-
-static gboolean
-check_iterator (GeditTextRegionIteratorReal *real)
-{
- if ((real->region == NULL) ||
- (real->region_time_stamp != real->region->time_stamp))
- {
- g_warning("Invalid iterator: either the iterator "
- "is uninitialized, or the region "
- "has been modified since the iterator "
- "was created.");
-
- return FALSE;
- }
-
- return TRUE;
-}
-
-void
-gedit_text_region_get_iterator (GeditTextRegion *region,
- GeditTextRegionIterator *iter,
- guint start)
-{
- GeditTextRegionIteratorReal *real;
-
- g_return_if_fail (region != NULL);
- g_return_if_fail (iter != NULL);
-
- real = (GeditTextRegionIteratorReal *)iter;
-
- /* region->subregions may be NULL, -> end iter */
-
- real->region = region;
- real->subregions = g_list_nth (region->subregions, start);
- real->region_time_stamp = region->time_stamp;
-}
-
-gboolean
-gedit_text_region_iterator_is_end (GeditTextRegionIterator *iter)
-{
- GeditTextRegionIteratorReal *real;
-
- g_return_val_if_fail (iter != NULL, FALSE);
-
- real = (GeditTextRegionIteratorReal *)iter;
- g_return_val_if_fail (check_iterator (real), FALSE);
-
- return (real->subregions == NULL);
-}
-
-gboolean
-gedit_text_region_iterator_next (GeditTextRegionIterator *iter)
-{
- GeditTextRegionIteratorReal *real;
-
- g_return_val_if_fail (iter != NULL, FALSE);
-
- real = (GeditTextRegionIteratorReal *)iter;
- g_return_val_if_fail (check_iterator (real), FALSE);
-
- if (real->subregions != NULL) {
- real->subregions = g_list_next (real->subregions);
- return TRUE;
- }
- else
- return FALSE;
-}
-
-void
-gedit_text_region_iterator_get_subregion (GeditTextRegionIterator *iter,
- GtkTextIter *start,
- GtkTextIter *end)
-{
- GeditTextRegionIteratorReal *real;
- Subregion *sr;
-
- g_return_if_fail (iter != NULL);
-
- real = (GeditTextRegionIteratorReal *)iter;
- g_return_if_fail (check_iterator (real));
- g_return_if_fail (real->subregions != NULL);
-
- sr = (Subregion*)real->subregions->data;
- g_return_if_fail (sr != NULL);
-
- if (start)
- gtk_text_buffer_get_iter_at_mark (real->region->buffer, start, sr->start);
- if (end)
- gtk_text_buffer_get_iter_at_mark (real->region->buffer, end, sr->end);
-}
-
-void
-gedit_text_region_debug_print (GeditTextRegion *region)
-{
- GList *l;
-
- g_return_if_fail (region != NULL);
-
- g_print ("Subregions: ");
- l = region->subregions;
- while (l) {
- Subregion *sr = l->data;
- GtkTextIter iter1, iter2;
- gtk_text_buffer_get_iter_at_mark (region->buffer, &iter1, sr->start);
- gtk_text_buffer_get_iter_at_mark (region->buffer, &iter2, sr->end);
- g_print ("%d-%d ", gtk_text_iter_get_offset (&iter1),
- gtk_text_iter_get_offset (&iter2));
- l = l->next;
- }
- g_print ("\n");
-}
-
diff --git a/gedit/gedittextregion.h b/gedit/gedittextregion.h
deleted file mode 100755
index 594a4950..00000000
--- a/gedit/gedittextregion.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
- *
- * gedittextregion.h - GtkTextMark based region utility functions
- *
- * This file is part of the GtkSourceView widget
- *
- * Copyright (C) 2002 Gustavo Gir�ldez <[email protected]>
- *
- * 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., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#ifndef __GEDIT_TEXT_REGION_H__
-#define __GEDIT_TEXT_REGION_H__
-
-#include <gtk/gtk.h>
-
-G_BEGIN_DECLS
-
-typedef struct _GeditTextRegion GeditTextRegion;
-typedef struct _GeditTextRegionIterator GeditTextRegionIterator;
-
-struct _GeditTextRegionIterator {
- /* GeditTextRegionIterator is an opaque datatype; ignore all these fields.
- * Initialize the iter with gedit_text_region_get_iterator
- * function
- */
- /*< private >*/
- gpointer dummy1;
- guint32 dummy2;
- gpointer dummy3;
-};
-
-GeditTextRegion *gedit_text_region_new (GtkTextBuffer *buffer);
-void gedit_text_region_destroy (GeditTextRegion *region,
- gboolean delete_marks);
-
-GtkTextBuffer *gedit_text_region_get_buffer (GeditTextRegion *region);
-
-void gedit_text_region_add (GeditTextRegion *region,
- const GtkTextIter *_start,
- const GtkTextIter *_end);
-
-void gedit_text_region_subtract (GeditTextRegion *region,
- const GtkTextIter *_start,
- const GtkTextIter *_end);
-
-gint gedit_text_region_subregions (GeditTextRegion *region);
-
-gboolean gedit_text_region_nth_subregion (GeditTextRegion *region,
- guint subregion,
- GtkTextIter *start,
- GtkTextIter *end);
-
-GeditTextRegion *gedit_text_region_intersect (GeditTextRegion *region,
- const GtkTextIter *_start,
- const GtkTextIter *_end);
-
-void gedit_text_region_get_iterator (GeditTextRegion *region,
- GeditTextRegionIterator *iter,
- guint start);
-
-gboolean gedit_text_region_iterator_is_end (GeditTextRegionIterator *iter);
-
-/* Returns FALSE if iterator is the end iterator */
-gboolean gedit_text_region_iterator_next (GeditTextRegionIterator *iter);
-
-void gedit_text_region_iterator_get_subregion (GeditTextRegionIterator *iter,
- GtkTextIter *start,
- GtkTextIter *end);
-
-void gedit_text_region_debug_print (GeditTextRegion *region);
-
-G_END_DECLS
-
-#endif /* __GEDIT_TEXT_REGION_H__ */
diff --git a/gedit/osx/Makefile.am b/gedit/osx/Makefile.am
deleted file mode 100755
index 4d734169..00000000
--- a/gedit/osx/Makefile.am
+++ /dev/null
@@ -1,23 +0,0 @@
-INCLUDES = \
- -I$(top_srcdir) \
- -I$(top_builddir) \
- -I$(top_srcdir)/gedit \
- -I$(top_builddir)/gedit \
- $(GEDIT_CFLAGS) \
- $(IGE_MAC_CFLAGS) \
- $(WARN_CFLAGS) \
- $(DISABLE_DEPRECATED_CFLAGS)
-
-noinst_LTLIBRARIES = libosx.la
-
-libosx_la_LDFLAGS = -framework Carbon -framework ApplicationServices -framework Cocoa
-libosx_la_LIBADD = -lobjc
-libosx_la_CFLAGS = -xobjective-c
-
-libosx_la_SOURCES = \
- gedit-osx.c \
- gedit-osx.h \
- gedit-osx-delegate.m \
- gedit-osx-delegate.h
-
--include $(top_srcdir)/git.mk
diff --git a/gedit/osx/gedit-osx-delegate.h b/gedit/osx/gedit-osx-delegate.h
deleted file mode 100755
index 0b4411e8..00000000
--- a/gedit/osx/gedit-osx-delegate.h
+++ /dev/null
@@ -1,16 +0,0 @@
-#ifndef GEDIT_OSX_DELEGATE_H_
-#define GEDIT_OSX_DELEGATE_H_
-
-#import <Foundation/NSAppleEventManager.h>
-
-@interface GeditOSXDelegate : NSObject
-{
-}
-
--(id) init;
--(void) openFiles:(NSAppleEventDescriptor*)event
- withReply:(NSAppleEventDescriptor*)reply;
-
-@end
-
-#endif /* GEDIT_OSX_DELEGATE_H_ */
diff --git a/gedit/osx/gedit-osx-delegate.m b/gedit/osx/gedit-osx-delegate.m
deleted file mode 100755
index 41b0b262..00000000
--- a/gedit/osx/gedit-osx-delegate.m
+++ /dev/null
@@ -1,84 +0,0 @@
-#import "gedit-osx-delegate.h"
-#import <Foundation/NSAppleEventManager.h>
-#import <Foundation/NSAppleEventDescriptor.h>
-#import <Foundation/NSData.h>
-#include <glib.h>
-#include <gedit/gedit-app.h>
-#include <gedit/gedit-commands.h>
-
-@implementation GeditOSXDelegate
--(id)init
-{
- if ((self = [super init]))
- {
- NSAppleEventManager* em = [NSAppleEventManager sharedAppleEventManager];
-
- [em setEventHandler:self
- andSelector:@selector(openFiles:withReply:)
- forEventClass:kCoreEventClass
- andEventID:kAEOpenDocuments];
- }
-
- return self;
-}
-
-static GeditWindow *
-get_window(NSAppleEventDescriptor *event)
-{
- GeditApp *app = gedit_app_get_default ();
- return gedit_app_get_active_window (app);
-}
-
-- (void)openFiles:(NSAppleEventDescriptor*)event
- withReply:(NSAppleEventDescriptor*)reply
-{
- NSAppleEventDescriptor *fileList = [event paramDescriptorForKeyword:keyDirectObject];
- NSInteger i;
- GSList *uris = NULL;
-
- if (!fileList)
- {
- return;
- }
-
- for (i = 1; i <= [fileList numberOfItems]; ++i)
- {
- NSAppleEventDescriptor *fileAliasDesc = [fileList descriptorAtIndex:i];
- NSAppleEventDescriptor *fileURLDesc;
- NSData *fileURLData;
- gchar *url;
-
- if (!fileAliasDesc)
- {
- continue;
- }
-
- fileURLDesc = [fileAliasDesc coerceToDescriptorType:typeFileURL];
-
- if (!fileURLDesc)
- {
- continue;
- }
-
- fileURLData = [fileURLDesc data];
-
- if (!fileURLData)
- {
- continue;
- }
-
- url = g_strndup([fileURLData bytes], [fileURLData length]);
- uris = g_slist_prepend (uris, url);
- }
-
- if (uris != NULL)
- {
- GeditWindow *window = get_window (event);
- gedit_commands_load_uris (window, uris, NULL, 0);
-
- g_slist_foreach (uris, (GFunc)g_free, NULL);
- g_slist_free (uris);
- }
-}
-
-@end \ No newline at end of file
diff --git a/gedit/osx/gedit-osx.c b/gedit/osx/gedit-osx.c
deleted file mode 100755
index e7a18d42..00000000
--- a/gedit/osx/gedit-osx.c
+++ /dev/null
@@ -1,94 +0,0 @@
-#include "gedit-osx.h"
-#include <gdk/gdkquartz.h>
-#include <Carbon/Carbon.h>
-
-#import "gedit-osx-delegate.h"
-
-void
-gedit_osx_set_window_title (GeditWindow *window,
- gchar const *title,
- GeditDocument *document)
-{
- NSWindow *native;
-
- g_return_if_fail (GEDIT_IS_WINDOW (window));
-
- if (GTK_WIDGET (window)->window == NULL)
- {
- return;
- }
-
- native = gdk_quartz_window_get_nswindow (GTK_WIDGET (window)->window);
-
- if (document)
- {
- bool ismodified;
-
- if (gedit_document_is_untitled (document))
- {
- [native setRepresentedURL:nil];
- }
- else
- {
- const gchar *uri = gedit_document_get_uri (document);
- NSURL *nsurl = [NSURL URLWithString:[NSString stringWithUTF8String:uri]];
-
- [native setRepresentedURL:nsurl];
- }
-
- ismodified = !gedit_document_is_untouched (document);
- [native setDocumentEdited:ismodified];
- }
- else
- {
- [native setRepresentedURL:nil];
- [native setDocumentEdited:false];
- }
-
- gtk_window_set_title (GTK_WINDOW (window), title);
-}
-
-gboolean
-gedit_osx_show_url (const gchar *url)
-{
- return [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:[NSString stringWithUTF8String:url]]];
-}
-
-gboolean
-gedit_osx_show_help (const gchar *link_id)
-{
- gchar *link;
- gboolean ret;
-
- if (link_id)
- {
- link = g_strdup_printf ("http://library.mate.org/users/gedit/stable/%s",
- link_id);
- }
- else
- {
- link = g_strdup ("http://library.mate.org/users/gedit/stable/");
- }
-
- ret = gedit_osx_show_url (link);
- g_free (link);
-
- return ret;
-}
-
-static void
-destroy_delegate (GeditOSXDelegate *delegate)
-{
- [delegate dealloc];
-}
-
-void
-gedit_osx_init(GeditApp *app)
-{
- GeditOSXDelegate *delegate = [[GeditOSXDelegate alloc] init];
-
- g_object_set_data_full (G_OBJECT (app),
- "GeditOSXDelegate",
- delegate,
- (GDestroyNotify)destroy_delegate);
-} \ No newline at end of file
diff --git a/gedit/osx/gedit-osx.h b/gedit/osx/gedit-osx.h
deleted file mode 100755
index 82f0120b..00000000
--- a/gedit/osx/gedit-osx.h
+++ /dev/null
@@ -1,17 +0,0 @@
-#ifndef __GEDIT_OSX_H__
-#define __GEDIT_OSX_H__
-
-#include <gtk/gtk.h>
-#include <gedit/gedit-window.h>
-#include <gedit/gedit-app.h>
-
-void gedit_osx_init (GeditApp *app);
-
-void gedit_osx_set_window_title (GeditWindow *window,
- gchar const *title,
- GeditDocument *document);
-
-gboolean gedit_osx_show_url (const gchar *url);
-gboolean gedit_osx_show_help (const gchar *link_id);
-
-#endif /* __GEDIT_OSX_H__ */
diff --git a/gedit/smclient/Makefile.am b/gedit/smclient/Makefile.am
deleted file mode 100755
index 8ec0ef71..00000000
--- a/gedit/smclient/Makefile.am
+++ /dev/null
@@ -1,52 +0,0 @@
-if OS_WIN32
-platform_sources = eggsmclient-win32.c
-platform_logout_test_ldflags = -mwindows
-else
-if OS_OSX
-platform_defines = -xobjective-c
-platform_ldflags = -framework Carbon
-platform_sources = eggsmclient-osx.c
-else
-platform_defines = -DEGG_SM_CLIENT_BACKEND_XSMP
-platform_libs = libeggdesktopfile.la
-platform_ltlibraries = libeggdesktopfile.la
-platform_sources = eggsmclient-xsmp.c
-endif
-endif
-
-INCLUDES = \
- -DG_LOG_DOMAIN=\""EggSMClient"\" \
- $(GEDIT_CFLAGS) \
- $(platform_defines) \
- $(EGG_SMCLIENT_CFLAGS)
-
-noinst_LTLIBRARIES = \
- libeggsmclient.la \
- $(platform_ltlibraries)
-
-libeggsmclient_la_LIBADD = \
- $(EGG_SMCLIENT_LIBS) \
- $(platform_libs)
-
-libeggsmclient_la_LDFLAGS = \
- $(platform_ldflags)
-
-libeggsmclient_la_SOURCES = \
- eggsmclient.c \
- eggsmclient.h \
- eggsmclient-private.h \
- $(platform_sources)
-
-libeggdesktopfile_la_LIBADD = \
- $(EGG_LIBS)
-
-libeggdesktopfile_la_SOURCES = \
- eggdesktopfile.c \
- eggdesktopfile.h
-
-EXTRA_DIST = \
- eggsmclient-osx.c \
- eggsmclient-win32.c \
- eggsmclient-xsmp.c
-
--include $(top_srcdir)/git.mk
diff --git a/gedit/smclient/eggdesktopfile.c b/gedit/smclient/eggdesktopfile.c
deleted file mode 100755
index 5ac79507..00000000
--- a/gedit/smclient/eggdesktopfile.c
+++ /dev/null
@@ -1,1510 +0,0 @@
-/* eggdesktopfile.c - Freedesktop.Org Desktop Files
- * Copyright (C) 2007 Novell, Inc.
- *
- * Based on mate-desktop-item.c
- * Copyright (C) 1999, 2000 Red Hat Inc.
- * Copyright (C) 2001 George Lebl
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; see the file COPYING.LIB. If not,
- * write to the Free Software Foundation, Inc., 59 Temple Place -
- * Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "eggdesktopfile.h"
-
-#include <string.h>
-#include <unistd.h>
-
-#include <glib/gi18n.h>
-#include <gdk/gdkx.h>
-#include <gtk/gtk.h>
-
-struct EggDesktopFile {
- GKeyFile *key_file;
- char *source;
-
- char *name, *icon;
- EggDesktopFileType type;
- char document_code;
-};
-
-/**
- * egg_desktop_file_new:
- * @desktop_file_path: path to a Freedesktop-style Desktop file
- * @error: error pointer
- *
- * Creates a new #EggDesktopFile for @desktop_file.
- *
- * Return value: the new #EggDesktopFile, or %NULL on error.
- **/
-EggDesktopFile *
-egg_desktop_file_new (const char *desktop_file_path, GError **error)
-{
- GKeyFile *key_file;
-
- key_file = g_key_file_new ();
- if (!g_key_file_load_from_file (key_file, desktop_file_path, 0, error))
- {
- g_key_file_free (key_file);
- return NULL;
- }
-
- return egg_desktop_file_new_from_key_file (key_file, desktop_file_path,
- error);
-}
-
-/**
- * egg_desktop_file_new_from_data_dirs:
- * @desktop_file_path: relative path to a Freedesktop-style Desktop file
- * @error: error pointer
- *
- * Looks for @desktop_file_path in the paths returned from
- * g_get_user_data_dir() and g_get_system_data_dirs(), and creates
- * a new #EggDesktopFile from it.
- *
- * Return value: the new #EggDesktopFile, or %NULL on error.
- **/
-EggDesktopFile *
-egg_desktop_file_new_from_data_dirs (const char *desktop_file_path,
- GError **error)
-{
- EggDesktopFile *desktop_file;
- GKeyFile *key_file;
- char *full_path;
-
- key_file = g_key_file_new ();
- if (!g_key_file_load_from_data_dirs (key_file, desktop_file_path,
- &full_path, 0, error))
- {
- g_key_file_free (key_file);
- return NULL;
- }
-
- desktop_file = egg_desktop_file_new_from_key_file (key_file,
- full_path,
- error);
- g_free (full_path);
- return desktop_file;
-}
-
-/**
- * egg_desktop_file_new_from_dirs:
- * @desktop_file_path: relative path to a Freedesktop-style Desktop file
- * @search_dirs: NULL-terminated array of directories to search
- * @error: error pointer
- *
- * Looks for @desktop_file_path in the paths returned from
- * g_get_user_data_dir() and g_get_system_data_dirs(), and creates
- * a new #EggDesktopFile from it.
- *
- * Return value: the new #EggDesktopFile, or %NULL on error.
- **/
-EggDesktopFile *
-egg_desktop_file_new_from_dirs (const char *desktop_file_path,
- const char **search_dirs,
- GError **error)
-{
- EggDesktopFile *desktop_file;
- GKeyFile *key_file;
- char *full_path;
-
- key_file = g_key_file_new ();
- if (!g_key_file_load_from_dirs (key_file, desktop_file_path, search_dirs,
- &full_path, 0, error))
- {
- g_key_file_free (key_file);
- return NULL;
- }
-
- desktop_file = egg_desktop_file_new_from_key_file (key_file,
- full_path,
- error);
- g_free (full_path);
- return desktop_file;
-}
-
-/**
- * egg_desktop_file_new_from_key_file:
- * @key_file: a #GKeyFile representing a desktop file
- * @source: the path or URI that @key_file was loaded from, or %NULL
- * @error: error pointer
- *
- * Creates a new #EggDesktopFile for @key_file. Assumes ownership of
- * @key_file (on success or failure); you should consider @key_file to
- * be freed after calling this function.
- *
- * Return value: the new #EggDesktopFile, or %NULL on error.
- **/
-EggDesktopFile *
-egg_desktop_file_new_from_key_file (GKeyFile *key_file,
- const char *source,
- GError **error)
-{
- EggDesktopFile *desktop_file;
- char *version, *type;
-
- if (!g_key_file_has_group (key_file, EGG_DESKTOP_FILE_GROUP))
- {
- g_set_error (error, EGG_DESKTOP_FILE_ERROR,
- EGG_DESKTOP_FILE_ERROR_INVALID,
- _("File is not a valid .desktop file"));
- g_key_file_free (key_file);
- return NULL;
- }
-
- version = g_key_file_get_value (key_file, EGG_DESKTOP_FILE_GROUP,
- EGG_DESKTOP_FILE_KEY_VERSION,
- NULL);
- if (version)
- {
- double version_num;
- char *end;
-
- version_num = g_ascii_strtod (version, &end);
- if (*end)
- {
- g_warning ("Invalid Version string '%s' in %s",
- version, source ? source : "(unknown)");
- }
- else if (version_num > 1.0)
- {
- g_set_error (error, EGG_DESKTOP_FILE_ERROR,
- EGG_DESKTOP_FILE_ERROR_INVALID,
- _("Unrecognized desktop file Version '%s'"), version);
- g_free (version);
- g_key_file_free (key_file);
- return NULL;
- }
- g_free (version);
- }
-
- desktop_file = g_new0 (EggDesktopFile, 1);
- desktop_file->key_file = key_file;
-
- if (g_path_is_absolute (source))
- desktop_file->source = g_filename_to_uri (source, NULL, NULL);
- else
- desktop_file->source = g_strdup (source);
-
- desktop_file->name = g_key_file_get_string (key_file, EGG_DESKTOP_FILE_GROUP,
- EGG_DESKTOP_FILE_KEY_NAME, error);
- if (!desktop_file->name)
- {
- egg_desktop_file_free (desktop_file);
- return NULL;
- }
-
- type = g_key_file_get_string (key_file, EGG_DESKTOP_FILE_GROUP,
- EGG_DESKTOP_FILE_KEY_TYPE, error);
- if (!type)
- {
- egg_desktop_file_free (desktop_file);
- return NULL;
- }
-
- if (!strcmp (type, "Application"))
- {
- char *exec, *p;
-
- desktop_file->type = EGG_DESKTOP_FILE_TYPE_APPLICATION;
-
- exec = g_key_file_get_string (key_file,
- EGG_DESKTOP_FILE_GROUP,
- EGG_DESKTOP_FILE_KEY_EXEC,
- error);
- if (!exec)
- {
- egg_desktop_file_free (desktop_file);
- g_free (type);
- return NULL;
- }
-
- /* See if it takes paths or URIs or neither */
- for (p = exec; *p; p++)
- {
- if (*p == '%')
- {
- if (p[1] == '\0' || strchr ("FfUu", p[1]))
- {
- desktop_file->document_code = p[1];
- break;
- }
- p++;
- }
- }
-
- g_free (exec);
- }
- else if (!strcmp (type, "Link"))
- {
- char *url;
-
- desktop_file->type = EGG_DESKTOP_FILE_TYPE_LINK;
-
- url = g_key_file_get_string (key_file,
- EGG_DESKTOP_FILE_GROUP,
- EGG_DESKTOP_FILE_KEY_URL,
- error);
- if (!url)
- {
- egg_desktop_file_free (desktop_file);
- g_free (type);
- return NULL;
- }
- g_free (url);
- }
- else if (!strcmp (type, "Directory"))
- desktop_file->type = EGG_DESKTOP_FILE_TYPE_DIRECTORY;
- else
- desktop_file->type = EGG_DESKTOP_FILE_TYPE_UNRECOGNIZED;
-
- g_free (type);
-
- /* Check the Icon key */
- desktop_file->icon = g_key_file_get_string (key_file,
- EGG_DESKTOP_FILE_GROUP,
- EGG_DESKTOP_FILE_KEY_ICON,
- NULL);
- if (desktop_file->icon && !g_path_is_absolute (desktop_file->icon))
- {
- char *ext;
-
- /* Lots of .desktop files still get this wrong */
- ext = strrchr (desktop_file->icon, '.');
- if (ext && (!strcmp (ext, ".png") ||
- !strcmp (ext, ".xpm") ||
- !strcmp (ext, ".svg")))
- {
- g_warning ("Desktop file '%s' has malformed Icon key '%s'"
- "(should not include extension)",
- source ? source : "(unknown)",
- desktop_file->icon);
- *ext = '\0';
- }
- }
-
- return desktop_file;
-}
-
-/**
- * egg_desktop_file_free:
- * @desktop_file: an #EggDesktopFile
- *
- * Frees @desktop_file.
- **/
-void
-egg_desktop_file_free (EggDesktopFile *desktop_file)
-{
- g_key_file_free (desktop_file->key_file);
- g_free (desktop_file->source);
- g_free (desktop_file->name);
- g_free (desktop_file->icon);
- g_free (desktop_file);
-}
-
-/**
- * egg_desktop_file_get_source:
- * @desktop_file: an #EggDesktopFile
- *
- * Gets the URI that @desktop_file was loaded from.
- *
- * Return value: @desktop_file's source URI
- **/
-const char *
-egg_desktop_file_get_source (EggDesktopFile *desktop_file)
-{
- return desktop_file->source;
-}
-
-/**
- * egg_desktop_file_get_desktop_file_type:
- * @desktop_file: an #EggDesktopFile
- *
- * Gets the desktop file type of @desktop_file.
- *
- * Return value: @desktop_file's type
- **/
-EggDesktopFileType
-egg_desktop_file_get_desktop_file_type (EggDesktopFile *desktop_file)
-{
- return desktop_file->type;
-}
-
-/**
- * egg_desktop_file_get_name:
- * @desktop_file: an #EggDesktopFile
- *
- * Gets the (localized) value of @desktop_file's "Name" key.
- *
- * Return value: the application/link name
- **/
-const char *
-egg_desktop_file_get_name (EggDesktopFile *desktop_file)
-{
- return desktop_file->name;
-}
-
-/**
- * egg_desktop_file_get_icon:
- * @desktop_file: an #EggDesktopFile
- *
- * Gets the value of @desktop_file's "Icon" key.
- *
- * If the icon string is a full path (that is, if g_path_is_absolute()
- * returns %TRUE when called on it), it points to a file containing an
- * unthemed icon. If the icon string is not a full path, it is the
- * name of a themed icon, which can be looked up with %GtkIconTheme,
- * or passed directly to a theme-aware widget like %GtkImage or
- * %GtkCellRendererPixbuf.
- *
- * Return value: the icon path or name
- **/
-const char *
-egg_desktop_file_get_icon (EggDesktopFile *desktop_file)
-{
- return desktop_file->icon;
-}
-
-gboolean
-egg_desktop_file_has_key (EggDesktopFile *desktop_file,
- const char *key,
- GError **error)
-{
- return g_key_file_has_key (desktop_file->key_file,
- EGG_DESKTOP_FILE_GROUP, key,
- error);
-}
-
-char *
-egg_desktop_file_get_string (EggDesktopFile *desktop_file,
- const char *key,
- GError **error)
-{
- return g_key_file_get_string (desktop_file->key_file,
- EGG_DESKTOP_FILE_GROUP, key,
- error);
-}
-
-char *
-egg_desktop_file_get_locale_string (EggDesktopFile *desktop_file,
- const char *key,
- const char *locale,
- GError **error)
-{
- return g_key_file_get_locale_string (desktop_file->key_file,
- EGG_DESKTOP_FILE_GROUP, key, locale,
- error);
-}
-
-gboolean
-egg_desktop_file_get_boolean (EggDesktopFile *desktop_file,
- const char *key,
- GError **error)
-{
- return g_key_file_get_boolean (desktop_file->key_file,
- EGG_DESKTOP_FILE_GROUP, key,
- error);
-}
-
-double
-egg_desktop_file_get_numeric (EggDesktopFile *desktop_file,
- const char *key,
- GError **error)
-{
- return g_key_file_get_double (desktop_file->key_file,
- EGG_DESKTOP_FILE_GROUP, key,
- error);
-}
-
-char **
-egg_desktop_file_get_string_list (EggDesktopFile *desktop_file,
- const char *key,
- gsize *length,
- GError **error)
-{
- return g_key_file_get_string_list (desktop_file->key_file,
- EGG_DESKTOP_FILE_GROUP, key, length,
- error);
-}
-
-char **
-egg_desktop_file_get_locale_string_list (EggDesktopFile *desktop_file,
- const char *key,
- const char *locale,
- gsize *length,
- GError **error)
-{
- return g_key_file_get_locale_string_list (desktop_file->key_file,
- EGG_DESKTOP_FILE_GROUP, key,
- locale, length,
- error);
-}
-
-/**
- * egg_desktop_file_can_launch:
- * @desktop_file: an #EggDesktopFile
- * @desktop_environment: the name of the running desktop environment,
- * or %NULL
- *
- * Tests if @desktop_file can/should be launched in the current
- * environment. If @desktop_environment is non-%NULL, @desktop_file's
- * "OnlyShowIn" and "NotShowIn" keys are checked to make sure that
- * this desktop_file is appropriate for the named environment.
- *
- * Furthermore, if @desktop_file has type
- * %EGG_DESKTOP_FILE_TYPE_APPLICATION, its "TryExec" key (if any) is
- * also checked, to make sure the binary it points to exists.
- *
- * egg_desktop_file_can_launch() does NOT check the value of the
- * "Hidden" key.
- *
- * Return value: %TRUE if @desktop_file can be launched
- **/
-gboolean
-egg_desktop_file_can_launch (EggDesktopFile *desktop_file,
- const char *desktop_environment)
-{
- char *try_exec, *found_program;
- char **only_show_in, **not_show_in;
- gboolean found;
- int i;
-
- if (desktop_file->type != EGG_DESKTOP_FILE_TYPE_APPLICATION &&
- desktop_file->type != EGG_DESKTOP_FILE_TYPE_LINK)
- return FALSE;
-
- if (desktop_environment)
- {
- only_show_in = g_key_file_get_string_list (desktop_file->key_file,
- EGG_DESKTOP_FILE_GROUP,
- EGG_DESKTOP_FILE_KEY_ONLY_SHOW_IN,
- NULL, NULL);
- if (only_show_in)
- {
- for (i = 0, found = FALSE; only_show_in[i] && !found; i++)
- {
- if (!strcmp (only_show_in[i], desktop_environment))
- found = TRUE;
- }
-
- g_strfreev (only_show_in);
-
- if (!found)
- return FALSE;
- }
-
- not_show_in = g_key_file_get_string_list (desktop_file->key_file,
- EGG_DESKTOP_FILE_GROUP,
- EGG_DESKTOP_FILE_KEY_NOT_SHOW_IN,
- NULL, NULL);
- if (not_show_in)
- {
- for (i = 0, found = FALSE; not_show_in[i] && !found; i++)
- {
- if (!strcmp (not_show_in[i], desktop_environment))
- found = TRUE;
- }
-
- g_strfreev (not_show_in);
-
- if (found)
- return FALSE;
- }
- }
-
- if (desktop_file->type == EGG_DESKTOP_FILE_TYPE_APPLICATION)
- {
- try_exec = g_key_file_get_string (desktop_file->key_file,
- EGG_DESKTOP_FILE_GROUP,
- EGG_DESKTOP_FILE_KEY_TRY_EXEC,
- NULL);
- if (try_exec)
- {
- found_program = g_find_program_in_path (try_exec);
- g_free (try_exec);
-
- if (!found_program)
- return FALSE;
- g_free (found_program);
- }
- }
-
- return TRUE;
-}
-
-/**
- * egg_desktop_file_accepts_documents:
- * @desktop_file: an #EggDesktopFile
- *
- * Tests if @desktop_file represents an application that can accept
- * documents on the command line.
- *
- * Return value: %TRUE or %FALSE
- **/
-gboolean
-egg_desktop_file_accepts_documents (EggDesktopFile *desktop_file)
-{
- return desktop_file->document_code != 0;
-}
-
-/**
- * egg_desktop_file_accepts_multiple:
- * @desktop_file: an #EggDesktopFile
- *
- * Tests if @desktop_file can accept multiple documents at once.
- *
- * If this returns %FALSE, you can still pass multiple documents to
- * egg_desktop_file_launch(), but that will result in multiple copies
- * of the application being launched. See egg_desktop_file_launch()
- * for more details.
- *
- * Return value: %TRUE or %FALSE
- **/
-gboolean
-egg_desktop_file_accepts_multiple (EggDesktopFile *desktop_file)
-{
- return (desktop_file->document_code == 'F' ||
- desktop_file->document_code == 'U');
-}
-
-/**
- * egg_desktop_file_accepts_uris:
- * @desktop_file: an #EggDesktopFile
- *
- * Tests if @desktop_file can accept (non-"file:") URIs as documents to
- * open.
- *
- * Return value: %TRUE or %FALSE
- **/
-gboolean
-egg_desktop_file_accepts_uris (EggDesktopFile *desktop_file)
-{
- return (desktop_file->document_code == 'U' ||
- desktop_file->document_code == 'u');
-}
-
-static void
-append_quoted_word (GString *str,
- const char *s,
- gboolean in_single_quotes,
- gboolean in_double_quotes)
-{
- const char *p;
-
- if (!in_single_quotes && !in_double_quotes)
- g_string_append_c (str, '\'');
- else if (!in_single_quotes && in_double_quotes)
- g_string_append (str, "\"'");
-
- if (!strchr (s, '\''))
- g_string_append (str, s);
- else
- {
- for (p = s; *p != '\0'; p++)
- {
- if (*p == '\'')
- g_string_append (str, "'\\''");
- else
- g_string_append_c (str, *p);
- }
- }
-
- if (!in_single_quotes && !in_double_quotes)
- g_string_append_c (str, '\'');
- else if (!in_single_quotes && in_double_quotes)
- g_string_append (str, "'\"");
-}
-
-static void
-do_percent_subst (EggDesktopFile *desktop_file,
- char code,
- GString *str,
- GSList **documents,
- gboolean in_single_quotes,
- gboolean in_double_quotes)
-{
- GSList *d;
- char *doc;
-
- switch (code)
- {
- case '%':
- g_string_append_c (str, '%');
- break;
-
- case 'F':
- case 'U':
- for (d = *documents; d; d = d->next)
- {
- doc = d->data;
- g_string_append (str, " ");
- append_quoted_word (str, doc, in_single_quotes, in_double_quotes);
- }
- *documents = NULL;
- break;
-
- case 'f':
- case 'u':
- if (*documents)
- {
- doc = (*documents)->data;
- g_string_append (str, " ");
- append_quoted_word (str, doc, in_single_quotes, in_double_quotes);
- *documents = (*documents)->next;
- }
- break;
-
- case 'i':
- if (desktop_file->icon)
- {
- g_string_append (str, "--icon ");
- append_quoted_word (str, desktop_file->icon,
- in_single_quotes, in_double_quotes);
- }
- break;
-
- case 'c':
- if (desktop_file->name)
- {
- append_quoted_word (str, desktop_file->name,
- in_single_quotes, in_double_quotes);
- }
- break;
-
- case 'k':
- if (desktop_file->source)
- {
- append_quoted_word (str, desktop_file->source,
- in_single_quotes, in_double_quotes);
- }
- break;
-
- case 'D':
- case 'N':
- case 'd':
- case 'n':
- case 'v':
- case 'm':
- /* Deprecated; skip */
- break;
-
- default:
- g_warning ("Unrecognized %%-code '%%%c' in Exec", code);
- break;
- }
-}
-
-static char *
-parse_exec (EggDesktopFile *desktop_file,
- GSList **documents,
- GError **error)
-{
- char *exec, *p, *command;
- gboolean escape, single_quot, double_quot;
- GString *gs;
-
- exec = g_key_file_get_string (desktop_file->key_file,
- EGG_DESKTOP_FILE_GROUP,
- EGG_DESKTOP_FILE_KEY_EXEC,
- error);
- if (!exec)
- return NULL;
-
- /* Build the command */
- gs = g_string_new (NULL);
- escape = single_quot = double_quot = FALSE;
-
- for (p = exec; *p != '\0'; p++)
- {
- if (escape)
- {
- escape = FALSE;
- g_string_append_c (gs, *p);
- }
- else if (*p == '\\')
- {
- if (!single_quot)
- escape = TRUE;
- g_string_append_c (gs, *p);
- }
- else if (*p == '\'')
- {
- g_string_append_c (gs, *p);
- if (!single_quot && !double_quot)
- single_quot = TRUE;
- else if (single_quot)
- single_quot = FALSE;
- }
- else if (*p == '"')
- {
- g_string_append_c (gs, *p);
- if (!single_quot && !double_quot)
- double_quot = TRUE;
- else if (double_quot)
- double_quot = FALSE;
- }
- else if (*p == '%' && p[1])
- {
- do_percent_subst (desktop_file, p[1], gs, documents,
- single_quot, double_quot);
- p++;
- }
- else
- g_string_append_c (gs, *p);
- }
-
- g_free (exec);
- command = g_string_free (gs, FALSE);
-
- /* Prepend "xdg-terminal " if needed (FIXME: use gvfs) */
- if (g_key_file_has_key (desktop_file->key_file,
- EGG_DESKTOP_FILE_GROUP,
- EGG_DESKTOP_FILE_KEY_TERMINAL,
- NULL))
- {
- GError *terminal_error = NULL;
- gboolean use_terminal =
- g_key_file_get_boolean (desktop_file->key_file,
- EGG_DESKTOP_FILE_GROUP,
- EGG_DESKTOP_FILE_KEY_TERMINAL,
- &terminal_error);
- if (terminal_error)
- {
- g_free (command);
- g_propagate_error (error, terminal_error);
- return NULL;
- }
-
- if (use_terminal)
- {
- gs = g_string_new ("xdg-terminal ");
- append_quoted_word (gs, command, FALSE, FALSE);
- g_free (command);
- command = g_string_free (gs, FALSE);
- }
- }
-
- return command;
-}
-
-static GSList *
-translate_document_list (EggDesktopFile *desktop_file, GSList *documents)
-{
- gboolean accepts_uris = egg_desktop_file_accepts_uris (desktop_file);
- GSList *ret, *d;
-
- for (d = documents, ret = NULL; d; d = d->next)
- {
- const char *document = d->data;
- gboolean is_uri = !g_path_is_absolute (document);
- char *translated;
-
- if (accepts_uris)
- {
- if (is_uri)
- translated = g_strdup (document);
- else
- translated = g_filename_to_uri (document, NULL, NULL);
- }
- else
- {
- if (is_uri)
- translated = g_filename_from_uri (document, NULL, NULL);
- else
- translated = g_strdup (document);
- }
-
- if (translated)
- ret = g_slist_prepend (ret, translated);
- }
-
- return g_slist_reverse (ret);
-}
-
-static void
-free_document_list (GSList *documents)
-{
- GSList *d;
-
- for (d = documents; d; d = d->next)
- g_free (d->data);
- g_slist_free (documents);
-}
-
-/**
- * egg_desktop_file_parse_exec:
- * @desktop_file: a #EggDesktopFile
- * @documents: a list of document paths or URIs
- * @error: error pointer
- *
- * Parses @desktop_file's Exec key, inserting @documents into it, and
- * returns the result.
- *
- * If @documents contains non-file: URIs and @desktop_file does not
- * accept URIs, those URIs will be ignored. Likewise, if @documents
- * contains more elements than @desktop_file accepts, the extra
- * documents will be ignored.
- *
- * Return value: the parsed Exec string
- **/
-char *
-egg_desktop_file_parse_exec (EggDesktopFile *desktop_file,
- GSList *documents,
- GError **error)
-{
- GSList *translated, *docs;
- char *command;
-
- docs = translated = translate_document_list (desktop_file, documents);
- command = parse_exec (desktop_file, &docs, error);
- free_document_list (translated);
-
- return command;
-}
-
-static gboolean
-parse_link (EggDesktopFile *desktop_file,
- EggDesktopFile **app_desktop_file,
- GSList **documents,
- GError **error)
-{
- char *url;
- GKeyFile *key_file;
-
- url = g_key_file_get_string (desktop_file->key_file,
- EGG_DESKTOP_FILE_GROUP,
- EGG_DESKTOP_FILE_KEY_URL,
- error);
- if (!url)
- return FALSE;
- *documents = g_slist_prepend (NULL, url);
-
- /* FIXME: use gvfs */
- key_file = g_key_file_new ();
- g_key_file_set_string (key_file, EGG_DESKTOP_FILE_GROUP,
- EGG_DESKTOP_FILE_KEY_NAME,
- "xdg-open");
- g_key_file_set_string (key_file, EGG_DESKTOP_FILE_GROUP,
- EGG_DESKTOP_FILE_KEY_TYPE,
- "Application");
- g_key_file_set_string (key_file, EGG_DESKTOP_FILE_GROUP,
- EGG_DESKTOP_FILE_KEY_EXEC,
- "xdg-open %u");
- *app_desktop_file = egg_desktop_file_new_from_key_file (key_file, NULL, NULL);
- return TRUE;
-}
-
-#if GTK_CHECK_VERSION (2, 12, 0)
-static char *
-start_startup_notification (GdkDisplay *display,
- EggDesktopFile *desktop_file,
- const char *argv0,
- int screen,
- int workspace,
- guint32 launch_time)
-{
- static int sequence = 0;
- char *startup_id;
- char *description, *wmclass;
- char *screen_str, *workspace_str;
-
- if (g_key_file_has_key (desktop_file->key_file,
- EGG_DESKTOP_FILE_GROUP,
- EGG_DESKTOP_FILE_KEY_STARTUP_NOTIFY,
- NULL))
- {
- if (!g_key_file_get_boolean (desktop_file->key_file,
- EGG_DESKTOP_FILE_GROUP,
- EGG_DESKTOP_FILE_KEY_STARTUP_NOTIFY,
- NULL))
- return NULL;
- wmclass = NULL;
- }
- else
- {
- wmclass = g_key_file_get_string (desktop_file->key_file,
- EGG_DESKTOP_FILE_GROUP,
- EGG_DESKTOP_FILE_KEY_STARTUP_WM_CLASS,
- NULL);
- if (!wmclass)
- return NULL;
- }
-
- if (launch_time == (guint32)-1)
- launch_time = gdk_x11_display_get_user_time (display);
- startup_id = g_strdup_printf ("%s-%lu-%s-%s-%d_TIME%lu",
- g_get_prgname (),
- (unsigned long)getpid (),
- g_get_host_name (),
- argv0,
- sequence++,
- (unsigned long)launch_time);
-
- description = g_strdup_printf (_("Starting %s"), desktop_file->name);
- screen_str = g_strdup_printf ("%d", screen);
- workspace_str = workspace == -1 ? NULL : g_strdup_printf ("%d", workspace);
-
- gdk_x11_display_broadcast_startup_message (display, "new",
- "ID", startup_id,
- "NAME", desktop_file->name,
- "SCREEN", screen_str,
- "BIN", argv0,
- "ICON", desktop_file->icon,
- "DESKTOP", workspace_str,
- "DESCRIPTION", description,
- "WMCLASS", wmclass,
- NULL);
-
- g_free (description);
- g_free (wmclass);
- g_free (screen_str);
- g_free (workspace_str);
-
- return startup_id;
-}
-
-static void
-end_startup_notification (GdkDisplay *display,
- const char *startup_id)
-{
- gdk_x11_display_broadcast_startup_message (display, "remove",
- "ID", startup_id,
- NULL);
-}
-
-#define EGG_DESKTOP_FILE_SN_TIMEOUT_LENGTH (30 /* seconds */)
-
-typedef struct {
- GdkDisplay *display;
- char *startup_id;
-} StartupNotificationData;
-
-static gboolean
-startup_notification_timeout (gpointer data)
-{
- StartupNotificationData *sn_data = data;
-
- end_startup_notification (sn_data->display, sn_data->startup_id);
- g_object_unref (sn_data->display);
- g_free (sn_data->startup_id);
- g_free (sn_data);
-
- return FALSE;
-}
-
-static void
-set_startup_notification_timeout (GdkDisplay *display,
- const char *startup_id)
-{
- StartupNotificationData *sn_data;
-
- sn_data = g_new (StartupNotificationData, 1);
- sn_data->display = g_object_ref (display);
- sn_data->startup_id = g_strdup (startup_id);
-
- g_timeout_add_seconds (EGG_DESKTOP_FILE_SN_TIMEOUT_LENGTH,
- startup_notification_timeout, sn_data);
-}
-#endif /* GTK 2.12 */
-
-static GPtrArray *
-array_putenv (GPtrArray *env, char *variable)
-{
- guint i, keylen;
-
- if (!env)
- {
- char **envp;
-
- env = g_ptr_array_new ();
-
- envp = g_listenv ();
- for (i = 0; envp[i]; i++)
- {
- const char *value;
-
- value = g_getenv (envp[i]);
- g_ptr_array_add (env, g_strdup_printf ("%s=%s", envp[i],
- value ? value : ""));
- }
- g_strfreev (envp);
- }
-
- keylen = strcspn (variable, "=");
-
- /* Remove old value of key */
- for (i = 0; i < env->len; i++)
- {
- char *envvar = env->pdata[i];
-
- if (!strncmp (envvar, variable, keylen) && envvar[keylen] == '=')
- {
- g_free (envvar);
- g_ptr_array_remove_index_fast (env, i);
- break;
- }
- }
-
- /* Add new value */
- g_ptr_array_add (env, g_strdup (variable));
-
- return env;
-}
-
-static gboolean
-egg_desktop_file_launchv (EggDesktopFile *desktop_file,
- GSList *documents, va_list args,
- GError **error)
-{
- EggDesktopFileLaunchOption option;
- GSList *translated_documents = NULL, *docs = NULL;
- char *command, **argv;
- int argc, i, screen_num;
- gboolean success, current_success;
- GdkDisplay *display;
- char *startup_id;
-
- GPtrArray *env = NULL;
- char **variables = NULL;
- GdkScreen *screen = NULL;
- int workspace = -1;
- const char *directory = NULL;
- guint32 launch_time = (guint32)-1;
- GSpawnFlags flags = G_SPAWN_SEARCH_PATH;
- GSpawnChildSetupFunc setup_func = NULL;
- gpointer setup_data = NULL;
-
- GPid *ret_pid = NULL;
- int *ret_stdin = NULL, *ret_stdout = NULL, *ret_stderr = NULL;
- char **ret_startup_id = NULL;
-
- if (documents && desktop_file->document_code == 0)
- {
- g_set_error (error, EGG_DESKTOP_FILE_ERROR,
- EGG_DESKTOP_FILE_ERROR_NOT_LAUNCHABLE,
- _("Application does not accept documents on command line"));
- return FALSE;
- }
-
- /* Read the options: technically it's incorrect for the caller to
- * NULL-terminate the list of options (rather than 0-terminating
- * it), but NULL-terminating lets us use G_GNUC_NULL_TERMINATED,
- * it's more consistent with other glib/gtk methods, and it will
- * work as long as sizeof (int) <= sizeof (NULL), and NULL is
- * represented as 0. (Which is true everywhere we care about.)
- */
- while ((option = va_arg (args, EggDesktopFileLaunchOption)))
- {
- switch (option)
- {
- case EGG_DESKTOP_FILE_LAUNCH_CLEARENV:
- if (env)
- g_ptr_array_free (env, TRUE);
- env = g_ptr_array_new ();
- break;
- case EGG_DESKTOP_FILE_LAUNCH_PUTENV:
- variables = va_arg (args, char **);
- for (i = 0; variables[i]; i++)
- env = array_putenv (env, variables[i]);
- break;
-
- case EGG_DESKTOP_FILE_LAUNCH_SCREEN:
- screen = va_arg (args, GdkScreen *);
- break;
- case EGG_DESKTOP_FILE_LAUNCH_WORKSPACE:
- workspace = va_arg (args, int);
- break;
-
- case EGG_DESKTOP_FILE_LAUNCH_DIRECTORY:
- directory = va_arg (args, const char *);
- break;
- case EGG_DESKTOP_FILE_LAUNCH_TIME:
- launch_time = va_arg (args, guint32);
- break;
- case EGG_DESKTOP_FILE_LAUNCH_FLAGS:
- flags |= va_arg (args, GSpawnFlags);
- /* Make sure they didn't set any flags that don't make sense. */
- flags &= ~G_SPAWN_FILE_AND_ARGV_ZERO;
- break;
- case EGG_DESKTOP_FILE_LAUNCH_SETUP_FUNC:
- setup_func = va_arg (args, GSpawnChildSetupFunc);
- setup_data = va_arg (args, gpointer);
- break;
-
- case EGG_DESKTOP_FILE_LAUNCH_RETURN_PID:
- ret_pid = va_arg (args, GPid *);
- break;
- case EGG_DESKTOP_FILE_LAUNCH_RETURN_STDIN_PIPE:
- ret_stdin = va_arg (args, int *);
- break;
- case EGG_DESKTOP_FILE_LAUNCH_RETURN_STDOUT_PIPE:
- ret_stdout = va_arg (args, int *);
- break;
- case EGG_DESKTOP_FILE_LAUNCH_RETURN_STDERR_PIPE:
- ret_stderr = va_arg (args, int *);
- break;
- case EGG_DESKTOP_FILE_LAUNCH_RETURN_STARTUP_ID:
- ret_startup_id = va_arg (args, char **);
- break;
-
- default:
- g_set_error (error, EGG_DESKTOP_FILE_ERROR,
- EGG_DESKTOP_FILE_ERROR_UNRECOGNIZED_OPTION,
- _("Unrecognized launch option: %d"),
- GPOINTER_TO_INT (option));
- success = FALSE;
- goto out;
- }
- }
-
- if (screen)
- {
- char *display_name = gdk_screen_make_display_name (screen);
- char *display_env = g_strdup_printf ("DISPLAY=%s", display_name);
- env = array_putenv (env, display_env);
- g_free (display_name);
- g_free (display_env);
-
- display = gdk_screen_get_display (screen);
- }
- else
- {
- display = gdk_display_get_default ();
- screen = gdk_display_get_default_screen (display);
- }
- screen_num = gdk_screen_get_number (screen);
-
- translated_documents = translate_document_list (desktop_file, documents);
- docs = translated_documents;
-
- success = FALSE;
-
- do
- {
- command = parse_exec (desktop_file, &docs, error);
- if (!command)
- goto out;
-
- if (!g_shell_parse_argv (command, &argc, &argv, error))
- {
- g_free (command);
- goto out;
- }
- g_free (command);
-
-#if GTK_CHECK_VERSION (2, 12, 0)
- startup_id = start_startup_notification (display, desktop_file,
- argv[0], screen_num,
- workspace, launch_time);
- if (startup_id)
- {
- char *startup_id_env = g_strdup_printf ("DESKTOP_STARTUP_ID=%s",
- startup_id);
- env = array_putenv (env, startup_id_env);
- g_free (startup_id_env);
- }
-#else
- startup_id = NULL;
-#endif /* GTK 2.12 */
-
- if (env != NULL)
- g_ptr_array_add (env, NULL);
-
- current_success =
- g_spawn_async_with_pipes (directory,
- argv,
- env ? (char **)(env->pdata) : NULL,
- flags,
- setup_func, setup_data,
- ret_pid,
- ret_stdin, ret_stdout, ret_stderr,
- error);
- g_strfreev (argv);
-
- if (startup_id)
- {
-#if GTK_CHECK_VERSION (2, 12, 0)
- if (current_success)
- {
- set_startup_notification_timeout (display, startup_id);
-
- if (ret_startup_id)
- *ret_startup_id = startup_id;
- else
- g_free (startup_id);
- }
- else
-#endif /* GTK 2.12 */
- g_free (startup_id);
- }
- else if (ret_startup_id)
- *ret_startup_id = NULL;
-
- if (current_success)
- {
- /* If we successfully launch any instances of the app, make
- * sure we return TRUE and don't set @error.
- */
- success = TRUE;
- error = NULL;
-
- /* Also, only set the output params on the first one */
- ret_pid = NULL;
- ret_stdin = ret_stdout = ret_stderr = NULL;
- ret_startup_id = NULL;
- }
- }
- while (docs && current_success);
-
- out:
- if (env)
- {
- g_ptr_array_foreach (env, (GFunc)g_free, NULL);
- g_ptr_array_free (env, TRUE);
- }
- free_document_list (translated_documents);
-
- return success;
-}
-
-/**
- * egg_desktop_file_launch:
- * @desktop_file: an #EggDesktopFile
- * @documents: a list of URIs or paths to documents to open
- * @error: error pointer
- * @...: additional options
- *
- * Launches @desktop_file with the given arguments. Additional options
- * can be specified as follows:
- *
- * %EGG_DESKTOP_FILE_LAUNCH_CLEARENV: (no arguments)
- * clears the environment in the child process
- * %EGG_DESKTOP_FILE_LAUNCH_PUTENV: (char **variables)
- * adds the NAME=VALUE strings in the given %NULL-terminated
- * array to the child process's environment
- * %EGG_DESKTOP_FILE_LAUNCH_SCREEN: (GdkScreen *screen)
- * causes the application to be launched on the given screen
- * %EGG_DESKTOP_FILE_LAUNCH_WORKSPACE: (int workspace)
- * causes the application to be launched on the given workspace
- * %EGG_DESKTOP_FILE_LAUNCH_DIRECTORY: (char *dir)
- * causes the application to be launched in the given directory
- * %EGG_DESKTOP_FILE_LAUNCH_TIME: (guint32 launch_time)
- * sets the "launch time" for the application. If the user
- * interacts with another window after @launch_time but before
- * the launched application creates its first window, the window
- * manager may choose to not give focus to the new application.
- * Passing 0 for @launch_time will explicitly request that the
- * application not receive focus.
- * %EGG_DESKTOP_FILE_LAUNCH_FLAGS (GSpawnFlags flags)
- * Sets additional #GSpawnFlags to use. See g_spawn_async() for
- * more details.
- * %EGG_DESKTOP_FILE_LAUNCH_SETUP_FUNC (GSpawnChildSetupFunc, gpointer)
- * Sets the child setup callback and the data to pass to it.
- * (See g_spawn_async() for more details.)
- *
- * %EGG_DESKTOP_FILE_LAUNCH_RETURN_PID (GPid **pid)
- * On a successful launch, sets *@pid to the PID of the launched
- * application.
- * %EGG_DESKTOP_FILE_LAUNCH_RETURN_STARTUP_ID (char **startup_id)
- * On a successful launch, sets *@startup_id to the Startup
- * Notification "startup id" of the launched application.
- * %EGG_DESKTOP_FILE_LAUNCH_RETURN_STDIN_PIPE (int *fd)
- * On a successful launch, sets *@fd to the file descriptor of
- * a pipe connected to the application's stdin.
- * %EGG_DESKTOP_FILE_LAUNCH_RETURN_STDOUT_PIPE (int *fd)
- * On a successful launch, sets *@fd to the file descriptor of
- * a pipe connected to the application's stdout.
- * %EGG_DESKTOP_FILE_LAUNCH_RETURN_STDERR_PIPE (int *fd)
- * On a successful launch, sets *@fd to the file descriptor of
- * a pipe connected to the application's stderr.
- *
- * The options should be terminated with a single %NULL.
- *
- * If @documents contains multiple documents, but
- * egg_desktop_file_accepts_multiple() returns %FALSE for
- * @desktop_file, then egg_desktop_file_launch() will actually launch
- * multiple instances of the application. In that case, the return
- * value (as well as any values passed via
- * %EGG_DESKTOP_FILE_LAUNCH_RETURN_PID, etc) will only reflect the
- * first instance of the application that was launched (but the
- * %EGG_DESKTOP_FILE_LAUNCH_SETUP_FUNC will be called for each
- * instance).
- *
- * Return value: %TRUE if the application was successfully launched.
- **/
-gboolean
-egg_desktop_file_launch (EggDesktopFile *desktop_file,
- GSList *documents, GError **error,
- ...)
-{
- va_list args;
- gboolean success;
- EggDesktopFile *app_desktop_file;
-
- switch (desktop_file->type)
- {
- case EGG_DESKTOP_FILE_TYPE_APPLICATION:
- va_start (args, error);
- success = egg_desktop_file_launchv (desktop_file, documents,
- args, error);
- va_end (args);
- break;
-
- case EGG_DESKTOP_FILE_TYPE_LINK:
- if (documents)
- {
- g_set_error (error, EGG_DESKTOP_FILE_ERROR,
- EGG_DESKTOP_FILE_ERROR_NOT_LAUNCHABLE,
- _("Can't pass document URIs to a 'Type=Link' desktop entry"));
- return FALSE;
- }
-
- if (!parse_link (desktop_file, &app_desktop_file, &documents, error))
- return FALSE;
-
- va_start (args, error);
- success = egg_desktop_file_launchv (app_desktop_file, documents,
- args, error);
- va_end (args);
-
- egg_desktop_file_free (app_desktop_file);
- free_document_list (documents);
- break;
-
- case EGG_DESKTOP_FILE_TYPE_UNRECOGNIZED:
- case EGG_DESKTOP_FILE_TYPE_DIRECTORY:
- default:
- g_set_error (error, EGG_DESKTOP_FILE_ERROR,
- EGG_DESKTOP_FILE_ERROR_NOT_LAUNCHABLE,
- _("Not a launchable item"));
- success = FALSE;
- break;
- }
-
- return success;
-}
-
-
-GQuark
-egg_desktop_file_error_quark (void)
-{
- return g_quark_from_static_string ("egg-desktop_file-error-quark");
-}
-
-
-G_LOCK_DEFINE_STATIC (egg_desktop_file);
-static EggDesktopFile *egg_desktop_file;
-
-static void
-egg_set_desktop_file_internal (const char *desktop_file_path,
- gboolean set_defaults)
-{
- GError *error = NULL;
-
- G_LOCK (egg_desktop_file);
- if (egg_desktop_file)
- egg_desktop_file_free (egg_desktop_file);
-
- egg_desktop_file = egg_desktop_file_new (desktop_file_path, &error);
- if (error)
- {
- g_warning ("Could not load desktop file '%s': %s",
- desktop_file_path, error->message);
- g_error_free (error);
- }
-
- if (set_defaults && egg_desktop_file != NULL) {
- /* Set localized application name and default window icon */
- if (egg_desktop_file->name)
- g_set_application_name (egg_desktop_file->name);
- if (egg_desktop_file->icon)
- {
- if (g_path_is_absolute (egg_desktop_file->icon))
- gtk_window_set_default_icon_from_file (egg_desktop_file->icon, NULL);
- else
- gtk_window_set_default_icon_name (egg_desktop_file->icon);
- }
- }
-
- G_UNLOCK (egg_desktop_file);
-}
-
-/**
- * egg_set_desktop_file:
- * @desktop_file_path: path to the application's desktop file
- *
- * Creates an #EggDesktopFile for the application from the data at
- * @desktop_file_path. This will also call g_set_application_name()
- * with the localized application name from the desktop file, and
- * gtk_window_set_default_icon_name() or
- * gtk_window_set_default_icon_from_file() with the application's
- * icon. Other code may use additional information from the desktop
- * file.
- * See egg_set_desktop_file_without_defaults() for a variant of this
- * function that does not set the application name and default window
- * icon.
- *
- * Note that for thread safety reasons, this function can only
- * be called once, and is mutually exclusive with calling
- * egg_set_desktop_file_without_defaults().
- **/
-void
-egg_set_desktop_file (const char *desktop_file_path)
-{
- egg_set_desktop_file_internal (desktop_file_path, TRUE);
-}
-
-/**
- * egg_set_desktop_file_without_defaults:
- * @desktop_file_path: path to the application's desktop file
- *
- * Creates an #EggDesktopFile for the application from the data at
- * @desktop_file_path.
- * See egg_set_desktop_file() for a variant of this function that
- * sets the application name and default window icon from the information
- * in the desktop file.
- *
- * Note that for thread safety reasons, this function can only
- * be called once, and is mutually exclusive with calling
- * egg_set_desktop_file().
- **/
-void
-egg_set_desktop_file_without_defaults (const char *desktop_file_path)
-{
- egg_set_desktop_file_internal (desktop_file_path, FALSE);
-}
-
-/**
- * egg_get_desktop_file:
- *
- * Gets the application's #EggDesktopFile, as set by
- * egg_set_desktop_file().
- *
- * Return value: the #EggDesktopFile, or %NULL if it hasn't been set.
- **/
-EggDesktopFile *
-egg_get_desktop_file (void)
-{
- EggDesktopFile *retval;
-
- G_LOCK (egg_desktop_file);
- retval = egg_desktop_file;
- G_UNLOCK (egg_desktop_file);
-
- return retval;
-}
diff --git a/gedit/smclient/eggdesktopfile.h b/gedit/smclient/eggdesktopfile.h
deleted file mode 100755
index 18fe4631..00000000
--- a/gedit/smclient/eggdesktopfile.h
+++ /dev/null
@@ -1,160 +0,0 @@
-/* eggdesktopfile.h - Freedesktop.Org Desktop Files
- * Copyright (C) 2007 Novell, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; see the file COPYING.LIB. If not,
- * write to the Free Software Foundation, Inc., 59 Temple Place -
- * Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#ifndef __EGG_DESKTOP_FILE_H__
-#define __EGG_DESKTOP_FILE_H__
-
-#include <glib.h>
-
-G_BEGIN_DECLS
-
-typedef struct EggDesktopFile EggDesktopFile;
-
-typedef enum {
- EGG_DESKTOP_FILE_TYPE_UNRECOGNIZED,
-
- EGG_DESKTOP_FILE_TYPE_APPLICATION,
- EGG_DESKTOP_FILE_TYPE_LINK,
- EGG_DESKTOP_FILE_TYPE_DIRECTORY
-} EggDesktopFileType;
-
-EggDesktopFile *egg_desktop_file_new (const char *desktop_file_path,
- GError **error);
-
-EggDesktopFile *egg_desktop_file_new_from_data_dirs (const char *desktop_file_path,
- GError **error);
-EggDesktopFile *egg_desktop_file_new_from_dirs (const char *desktop_file_path,
- const char **search_dirs,
- GError **error);
-EggDesktopFile *egg_desktop_file_new_from_key_file (GKeyFile *key_file,
- const char *source,
- GError **error);
-
-void egg_desktop_file_free (EggDesktopFile *desktop_file);
-
-const char *egg_desktop_file_get_source (EggDesktopFile *desktop_file);
-
-EggDesktopFileType egg_desktop_file_get_desktop_file_type (EggDesktopFile *desktop_file);
-
-const char *egg_desktop_file_get_name (EggDesktopFile *desktop_file);
-const char *egg_desktop_file_get_icon (EggDesktopFile *desktop_file);
-
-gboolean egg_desktop_file_can_launch (EggDesktopFile *desktop_file,
- const char *desktop_environment);
-
-gboolean egg_desktop_file_accepts_documents (EggDesktopFile *desktop_file);
-gboolean egg_desktop_file_accepts_multiple (EggDesktopFile *desktop_file);
-gboolean egg_desktop_file_accepts_uris (EggDesktopFile *desktop_file);
-
-char *egg_desktop_file_parse_exec (EggDesktopFile *desktop_file,
- GSList *documents,
- GError **error);
-
-gboolean egg_desktop_file_launch (EggDesktopFile *desktop_file,
- GSList *documents,
- GError **error,
- ...) G_GNUC_NULL_TERMINATED;
-
-typedef enum {
- EGG_DESKTOP_FILE_LAUNCH_CLEARENV = 1,
- EGG_DESKTOP_FILE_LAUNCH_PUTENV,
- EGG_DESKTOP_FILE_LAUNCH_SCREEN,
- EGG_DESKTOP_FILE_LAUNCH_WORKSPACE,
- EGG_DESKTOP_FILE_LAUNCH_DIRECTORY,
- EGG_DESKTOP_FILE_LAUNCH_TIME,
- EGG_DESKTOP_FILE_LAUNCH_FLAGS,
- EGG_DESKTOP_FILE_LAUNCH_SETUP_FUNC,
- EGG_DESKTOP_FILE_LAUNCH_RETURN_PID,
- EGG_DESKTOP_FILE_LAUNCH_RETURN_STDIN_PIPE,
- EGG_DESKTOP_FILE_LAUNCH_RETURN_STDOUT_PIPE,
- EGG_DESKTOP_FILE_LAUNCH_RETURN_STDERR_PIPE,
- EGG_DESKTOP_FILE_LAUNCH_RETURN_STARTUP_ID
-} EggDesktopFileLaunchOption;
-
-/* Standard Keys */
-#define EGG_DESKTOP_FILE_GROUP "Desktop Entry"
-
-#define EGG_DESKTOP_FILE_KEY_TYPE "Type"
-#define EGG_DESKTOP_FILE_KEY_VERSION "Version"
-#define EGG_DESKTOP_FILE_KEY_NAME "Name"
-#define EGG_DESKTOP_FILE_KEY_GENERIC_NAME "GenericName"
-#define EGG_DESKTOP_FILE_KEY_NO_DISPLAY "NoDisplay"
-#define EGG_DESKTOP_FILE_KEY_COMMENT "Comment"
-#define EGG_DESKTOP_FILE_KEY_ICON "Icon"
-#define EGG_DESKTOP_FILE_KEY_HIDDEN "Hidden"
-#define EGG_DESKTOP_FILE_KEY_ONLY_SHOW_IN "OnlyShowIn"
-#define EGG_DESKTOP_FILE_KEY_NOT_SHOW_IN "NotShowIn"
-#define EGG_DESKTOP_FILE_KEY_TRY_EXEC "TryExec"
-#define EGG_DESKTOP_FILE_KEY_EXEC "Exec"
-#define EGG_DESKTOP_FILE_KEY_PATH "Path"
-#define EGG_DESKTOP_FILE_KEY_TERMINAL "Terminal"
-#define EGG_DESKTOP_FILE_KEY_MIME_TYPE "MimeType"
-#define EGG_DESKTOP_FILE_KEY_CATEGORIES "Categories"
-#define EGG_DESKTOP_FILE_KEY_STARTUP_NOTIFY "StartupNotify"
-#define EGG_DESKTOP_FILE_KEY_STARTUP_WM_CLASS "StartupWMClass"
-#define EGG_DESKTOP_FILE_KEY_URL "URL"
-
-/* Accessors */
-gboolean egg_desktop_file_has_key (EggDesktopFile *desktop_file,
- const char *key,
- GError **error);
-char *egg_desktop_file_get_string (EggDesktopFile *desktop_file,
- const char *key,
- GError **error) G_GNUC_MALLOC;
-char *egg_desktop_file_get_locale_string (EggDesktopFile *desktop_file,
- const char *key,
- const char *locale,
- GError **error) G_GNUC_MALLOC;
-gboolean egg_desktop_file_get_boolean (EggDesktopFile *desktop_file,
- const char *key,
- GError **error);
-double egg_desktop_file_get_numeric (EggDesktopFile *desktop_file,
- const char *key,
- GError **error);
-char **egg_desktop_file_get_string_list (EggDesktopFile *desktop_file,
- const char *key,
- gsize *length,
- GError **error) G_GNUC_MALLOC;
-char **egg_desktop_file_get_locale_string_list (EggDesktopFile *desktop_file,
- const char *key,
- const char *locale,
- gsize *length,
- GError **error) G_GNUC_MALLOC;
-
-
-/* Errors */
-#define EGG_DESKTOP_FILE_ERROR egg_desktop_file_error_quark()
-
-GQuark egg_desktop_file_error_quark (void);
-
-typedef enum {
- EGG_DESKTOP_FILE_ERROR_INVALID,
- EGG_DESKTOP_FILE_ERROR_NOT_LAUNCHABLE,
- EGG_DESKTOP_FILE_ERROR_UNRECOGNIZED_OPTION
-} EggDesktopFileError;
-
-/* Global application desktop file */
-void egg_set_desktop_file (const char *desktop_file_path);
-void egg_set_desktop_file_without_defaults (const char *desktop_file_path);
-EggDesktopFile *egg_get_desktop_file (void);
-
-
-G_END_DECLS
-
-#endif /* __EGG_DESKTOP_FILE_H__ */
diff --git a/gedit/smclient/eggsmclient-osx.c b/gedit/smclient/eggsmclient-osx.c
deleted file mode 100755
index 7d3ff4b6..00000000
--- a/gedit/smclient/eggsmclient-osx.c
+++ /dev/null
@@ -1,235 +0,0 @@
-/*
- * Copyright (C) 2007 Novell, Inc.
- * Copyright (C) 2008 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/* EggSMClientOSX
- *
- * For details on the OS X logout process, see:
- * http://developer.apple.com/documentation/MacOSX/Conceptual/BPSystemStartup/Articles/BootProcess.html#//apple_ref/doc/uid/20002130-114618
- *
- * EggSMClientOSX registers for the kAEQuitApplication AppleEvent; the
- * handler we register (quit_requested()) will be invoked from inside
- * the quartz event-handling code (specifically, from inside
- * [NSApplication nextEventMatchingMask]) when an AppleEvent arrives.
- * We use AESuspendTheCurrentEvent() and AEResumeTheCurrentEvent() to
- * allow asynchronous / non-main-loop-reentering processing of the
- * quit request. (These are part of the Carbon framework; it doesn't
- * seem to be possible to handle AppleEvents asynchronously from
- * Cocoa.)
- */
-
-#include "config.h"
-
-#include "eggsmclient-private.h"
-#include <glib.h>
-#include <Carbon/Carbon.h>
-#include <CoreServices/CoreServices.h>
-
-#define EGG_TYPE_SM_CLIENT_OSX (egg_sm_client_osx_get_type ())
-#define EGG_SM_CLIENT_OSX(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EGG_TYPE_SM_CLIENT_OSX, EggSMClientOSX))
-#define EGG_SM_CLIENT_OSX_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EGG_TYPE_SM_CLIENT_OSX, EggSMClientOSXClass))
-#define EGG_IS_SM_CLIENT_OSX(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EGG_TYPE_SM_CLIENT_OSX))
-#define EGG_IS_SM_CLIENT_OSX_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EGG_TYPE_SM_CLIENT_OSX))
-#define EGG_SM_CLIENT_OSX_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EGG_TYPE_SM_CLIENT_OSX, EggSMClientOSXClass))
-
-typedef struct _EggSMClientOSX EggSMClientOSX;
-typedef struct _EggSMClientOSXClass EggSMClientOSXClass;
-
-struct _EggSMClientOSX {
- EggSMClient parent;
-
- AppleEvent quit_event, quit_reply;
- gboolean quit_requested, quitting;
-};
-
-struct _EggSMClientOSXClass
-{
- EggSMClientClass parent_class;
-
-};
-
-static void sm_client_osx_startup (EggSMClient *client,
- const char *client_id);
-static void sm_client_osx_will_quit (EggSMClient *client,
- gboolean will_quit);
-static gboolean sm_client_osx_end_session (EggSMClient *client,
- EggSMClientEndStyle style,
- gboolean request_confirmation);
-
-static pascal OSErr quit_requested (const AppleEvent *, AppleEvent *, long);
-
-G_DEFINE_TYPE (EggSMClientOSX, egg_sm_client_osx, EGG_TYPE_SM_CLIENT)
-
-static void
-egg_sm_client_osx_init (EggSMClientOSX *osx)
-{
- ;
-}
-
-static void
-egg_sm_client_osx_class_init (EggSMClientOSXClass *klass)
-{
- EggSMClientClass *sm_client_class = EGG_SM_CLIENT_CLASS (klass);
-
- sm_client_class->startup = sm_client_osx_startup;
- sm_client_class->will_quit = sm_client_osx_will_quit;
- sm_client_class->end_session = sm_client_osx_end_session;
-}
-
-EggSMClient *
-egg_sm_client_osx_new (void)
-{
- return g_object_new (EGG_TYPE_SM_CLIENT_OSX, NULL);
-}
-
-static void
-sm_client_osx_startup (EggSMClient *client,
- const char *client_id)
-{
- AEInstallEventHandler (kCoreEventClass, kAEQuitApplication,
- NewAEEventHandlerUPP (quit_requested),
- (long)GPOINTER_TO_SIZE (client), false);
-}
-
-static gboolean
-idle_quit_requested (gpointer client)
-{
- egg_sm_client_quit_requested (client);
- return FALSE;
-}
-
-static pascal OSErr
-quit_requested (const AppleEvent *aevt, AppleEvent *reply, long refcon)
-{
- EggSMClient *client = GSIZE_TO_POINTER ((gsize)refcon);
- EggSMClientOSX *osx = GSIZE_TO_POINTER ((gsize)refcon);
-
- g_return_val_if_fail (!osx->quit_requested, userCanceledErr);
-
- /* FIXME AEInteractWithUser? */
-
- osx->quit_requested = TRUE;
- AEDuplicateDesc (aevt, &osx->quit_event);
- AEDuplicateDesc (reply, &osx->quit_reply);
- AESuspendTheCurrentEvent (aevt);
-
- /* Don't emit the "quit_requested" signal immediately, since we're
- * called from a weird point in the guts of gdkeventloop-quartz.c
- */
- g_idle_add (idle_quit_requested, client);
- return noErr;
-}
-
-static pascal OSErr
-quit_requested_resumed (const AppleEvent *aevt, AppleEvent *reply, long refcon)
-{
- EggSMClientOSX *osx = GSIZE_TO_POINTER ((gsize)refcon);
-
- osx->quit_requested = FALSE;
- return osx->quitting ? noErr : userCanceledErr;
-}
-
-static gboolean
-idle_will_quit (gpointer client)
-{
- EggSMClientOSX *osx = (EggSMClientOSX *)client;
-
- /* Resume the event with a new handler that will return a value to
- * the system.
- */
- AEResumeTheCurrentEvent (&osx->quit_event, &osx->quit_reply,
- NewAEEventHandlerUPP (quit_requested_resumed),
- (long)GPOINTER_TO_SIZE (client));
- AEDisposeDesc (&osx->quit_event);
- AEDisposeDesc (&osx->quit_reply);
-
- if (osx->quitting)
- egg_sm_client_quit (client);
- return FALSE;
-}
-
-static void
-sm_client_osx_will_quit (EggSMClient *client,
- gboolean will_quit)
-{
- EggSMClientOSX *osx = (EggSMClientOSX *)client;
-
- g_return_if_fail (osx->quit_requested);
-
- osx->quitting = will_quit;
-
- /* Finish in an idle handler since the caller might have called
- * egg_sm_client_will_quit() from inside the "quit_requested" signal
- * handler, but may not expect the "quit" signal to arrive during
- * the _will_quit() call.
- */
- g_idle_add (idle_will_quit, client);
-}
-
-static gboolean
-sm_client_osx_end_session (EggSMClient *client,
- EggSMClientEndStyle style,
- gboolean request_confirmation)
-{
- static const ProcessSerialNumber loginwindow_psn = { 0, kSystemProcess };
- AppleEvent event = { typeNull, NULL }, reply = { typeNull, NULL };
- AEAddressDesc target;
- AEEventID id;
- OSErr err;
-
- switch (style)
- {
- case EGG_SM_CLIENT_END_SESSION_DEFAULT:
- case EGG_SM_CLIENT_LOGOUT:
- id = request_confirmation ? kAELogOut : kAEReallyLogOut;
- break;
- case EGG_SM_CLIENT_REBOOT:
- id = request_confirmation ? kAEShowRestartDialog : kAERestart;
- break;
- case EGG_SM_CLIENT_SHUTDOWN:
- id = request_confirmation ? kAEShowShutdownDialog : kAEShutDown;
- break;
- }
-
- err = AECreateDesc (typeProcessSerialNumber, &loginwindow_psn,
- sizeof (loginwindow_psn), &target);
- if (err != noErr)
- {
- g_warning ("Could not create descriptor for loginwindow: %d", err);
- return FALSE;
- }
-
- err = AECreateAppleEvent (kCoreEventClass, id, &target,
- kAutoGenerateReturnID, kAnyTransactionID,
- &event);
- AEDisposeDesc (&target);
- if (err != noErr)
- {
- g_warning ("Could not create logout AppleEvent: %d", err);
- return FALSE;
- }
-
- err = AESend (&event, &reply, kAENoReply, kAENormalPriority,
- kAEDefaultTimeout, NULL, NULL);
- AEDisposeDesc (&event);
- if (err == noErr)
- AEDisposeDesc (&reply);
-
- return err == noErr;
-}
diff --git a/gedit/smclient/eggsmclient-private.h b/gedit/smclient/eggsmclient-private.h
deleted file mode 100755
index ccb10bfc..00000000
--- a/gedit/smclient/eggsmclient-private.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/* eggsmclient-private.h
- * Copyright (C) 2007 Novell, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#ifndef __EGG_SM_CLIENT_PRIVATE_H__
-#define __EGG_SM_CLIENT_PRIVATE_H__
-
-#include <gdkconfig.h>
-#include "eggsmclient.h"
-
-G_BEGIN_DECLS
-
-GKeyFile *egg_sm_client_save_state (EggSMClient *client);
-void egg_sm_client_quit_requested (EggSMClient *client);
-void egg_sm_client_quit_cancelled (EggSMClient *client);
-void egg_sm_client_quit (EggSMClient *client);
-
-#if defined (GDK_WINDOWING_X11)
-# ifdef EGG_SM_CLIENT_BACKEND_XSMP
-GType egg_sm_client_xsmp_get_type (void);
-EggSMClient *egg_sm_client_xsmp_new (void);
-# endif
-# ifdef EGG_SM_CLIENT_BACKEND_DBUS
-GType egg_sm_client_dbus_get_type (void);
-EggSMClient *egg_sm_client_dbus_new (void);
-# endif
-#elif defined (GDK_WINDOWING_WIN32)
-GType egg_sm_client_win32_get_type (void);
-EggSMClient *egg_sm_client_win32_new (void);
-#elif defined (GDK_WINDOWING_QUARTZ)
-GType egg_sm_client_osx_get_type (void);
-EggSMClient *egg_sm_client_osx_new (void);
-#endif
-
-G_END_DECLS
-
-
-#endif /* __EGG_SM_CLIENT_PRIVATE_H__ */
diff --git a/gedit/smclient/eggsmclient-win32.c b/gedit/smclient/eggsmclient-win32.c
deleted file mode 100755
index 91a25715..00000000
--- a/gedit/smclient/eggsmclient-win32.c
+++ /dev/null
@@ -1,353 +0,0 @@
-/*
- * Copyright (C) 2007 Novell, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/* EggSMClientWin32
- *
- * For details on the Windows XP logout process, see:
- * http://msdn.microsoft.com/en-us/library/aa376876.aspx.
- *
- * Vista adds some new APIs which EggSMClient does not make use of; see
- * http://msdn.microsoft.com/en-us/library/ms700677(VS.85).aspx
- *
- * When shutting down, Windows sends every top-level window a
- * WM_QUERYENDSESSION event, which the application must respond to
- * synchronously, saying whether or not it will quit. To avoid main
- * loop re-entrancy problems (and to avoid having to muck about too
- * much with the guts of the gdk-win32 main loop), we watch for this
- * event in a separate thread, which then signals the main thread and
- * waits for the main thread to handle the event. Since we don't want
- * to require g_thread_init() to be called, we do this all using
- * Windows-specific thread methods.
- *
- * After the application handles the WM_QUERYENDSESSION event,
- * Windows then sends it a WM_ENDSESSION event with a TRUE or FALSE
- * parameter indicating whether the session is or is not actually
- * going to end now. We handle this from the other thread as well.
- *
- * As mentioned above, Vista introduces several additional new APIs
- * that don't fit into the (current) EggSMClient API. Windows also has
- * an entirely separate shutdown-notification scheme for non-GUI apps,
- * which we also don't handle here.
- */
-
-#include "config.h"
-
-#include "eggsmclient-private.h"
-#include <gdk/gdk.h>
-
-#define WIN32_LEAN_AND_MEAN
-#define UNICODE
-#include <windows.h>
-#include <process.h>
-
-#define EGG_TYPE_SM_CLIENT_WIN32 (egg_sm_client_win32_get_type ())
-#define EGG_SM_CLIENT_WIN32(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EGG_TYPE_SM_CLIENT_WIN32, EggSMClientWin32))
-#define EGG_SM_CLIENT_WIN32_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EGG_TYPE_SM_CLIENT_WIN32, EggSMClientWin32Class))
-#define EGG_IS_SM_CLIENT_WIN32(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EGG_TYPE_SM_CLIENT_WIN32))
-#define EGG_IS_SM_CLIENT_WIN32_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EGG_TYPE_SM_CLIENT_WIN32))
-#define EGG_SM_CLIENT_WIN32_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EGG_TYPE_SM_CLIENT_WIN32, EggSMClientWin32Class))
-
-typedef struct _EggSMClientWin32 EggSMClientWin32;
-typedef struct _EggSMClientWin32Class EggSMClientWin32Class;
-
-struct _EggSMClientWin32 {
- EggSMClient parent;
-
- HANDLE message_event, response_event;
-
- volatile GSourceFunc event;
- volatile gboolean will_quit;
-};
-
-struct _EggSMClientWin32Class
-{
- EggSMClientClass parent_class;
-
-};
-
-static void sm_client_win32_startup (EggSMClient *client,
- const char *client_id);
-static void sm_client_win32_will_quit (EggSMClient *client,
- gboolean will_quit);
-static gboolean sm_client_win32_end_session (EggSMClient *client,
- EggSMClientEndStyle style,
- gboolean request_confirmation);
-
-static GSource *g_win32_handle_source_add (HANDLE handle, GSourceFunc callback,
- gpointer user_data);
-static gboolean got_message (gpointer user_data);
-static void sm_client_thread (gpointer data);
-
-G_DEFINE_TYPE (EggSMClientWin32, egg_sm_client_win32, EGG_TYPE_SM_CLIENT)
-
-static void
-egg_sm_client_win32_init (EggSMClientWin32 *win32)
-{
- ;
-}
-
-static void
-egg_sm_client_win32_class_init (EggSMClientWin32Class *klass)
-{
- EggSMClientClass *sm_client_class = EGG_SM_CLIENT_CLASS (klass);
-
- sm_client_class->startup = sm_client_win32_startup;
- sm_client_class->will_quit = sm_client_win32_will_quit;
- sm_client_class->end_session = sm_client_win32_end_session;
-}
-
-EggSMClient *
-egg_sm_client_win32_new (void)
-{
- return g_object_new (EGG_TYPE_SM_CLIENT_WIN32, NULL);
-}
-
-static void
-sm_client_win32_startup (EggSMClient *client,
- const char *client_id)
-{
- EggSMClientWin32 *win32 = (EggSMClientWin32 *)client;
-
- win32->message_event = CreateEvent (NULL, FALSE, FALSE, NULL);
- win32->response_event = CreateEvent (NULL, FALSE, FALSE, NULL);
- g_win32_handle_source_add (win32->message_event, got_message, win32);
- _beginthread (sm_client_thread, 0, client);
-}
-
-static void
-sm_client_win32_will_quit (EggSMClient *client,
- gboolean will_quit)
-{
- EggSMClientWin32 *win32 = (EggSMClientWin32 *)client;
-
- win32->will_quit = will_quit;
- SetEvent (win32->response_event);
-}
-
-static gboolean
-sm_client_win32_end_session (EggSMClient *client,
- EggSMClientEndStyle style,
- gboolean request_confirmation)
-{
- UINT uFlags = EWX_LOGOFF;
-
- switch (style)
- {
- case EGG_SM_CLIENT_END_SESSION_DEFAULT:
- case EGG_SM_CLIENT_LOGOUT:
- uFlags = EWX_LOGOFF;
- break;
- case EGG_SM_CLIENT_REBOOT:
- uFlags = EWX_REBOOT;
- break;
- case EGG_SM_CLIENT_SHUTDOWN:
- uFlags = EWX_POWEROFF;
- break;
- }
-
- /* There's no way to make ExitWindowsEx() show a logout dialog, so
- * we ignore @request_confirmation.
- */
-
-#ifdef SHTDN_REASON_FLAG_PLANNED
- ExitWindowsEx (uFlags, SHTDN_REASON_FLAG_PLANNED);
-#else
- ExitWindowsEx (uFlags, 0);
-#endif
-
- return TRUE;
-}
-
-
-/* callbacks from logout-listener thread */
-
-static gboolean
-emit_quit_requested (gpointer smclient)
-{
- gdk_threads_enter ();
- egg_sm_client_quit_requested (smclient);
- gdk_threads_leave ();
-
- return FALSE;
-}
-
-static gboolean
-emit_quit (gpointer smclient)
-{
- EggSMClientWin32 *win32 = smclient;
-
- gdk_threads_enter ();
- egg_sm_client_quit (smclient);
- gdk_threads_leave ();
-
- SetEvent (win32->response_event);
- return FALSE;
-}
-
-static gboolean
-emit_quit_cancelled (gpointer smclient)
-{
- EggSMClientWin32 *win32 = smclient;
-
- gdk_threads_enter ();
- egg_sm_client_quit_cancelled (smclient);
- gdk_threads_leave ();
-
- SetEvent (win32->response_event);
- return FALSE;
-}
-
-static gboolean
-got_message (gpointer smclient)
-{
- EggSMClientWin32 *win32 = smclient;
-
- win32->event (win32);
- return TRUE;
-}
-
-/* Windows HANDLE GSource */
-
-typedef struct {
- GSource source;
- GPollFD pollfd;
-} GWin32HandleSource;
-
-static gboolean
-g_win32_handle_source_prepare (GSource *source, gint *timeout)
-{
- *timeout = -1;
- return FALSE;
-}
-
-static gboolean
-g_win32_handle_source_check (GSource *source)
-{
- GWin32HandleSource *hsource = (GWin32HandleSource *)source;
-
- return hsource->pollfd.revents;
-}
-
-static gboolean
-g_win32_handle_source_dispatch (GSource *source, GSourceFunc callback, gpointer user_data)
-{
- return (*callback) (user_data);
-}
-
-static void
-g_win32_handle_source_finalize (GSource *source)
-{
- ;
-}
-
-GSourceFuncs g_win32_handle_source_funcs = {
- g_win32_handle_source_prepare,
- g_win32_handle_source_check,
- g_win32_handle_source_dispatch,
- g_win32_handle_source_finalize
-};
-
-static GSource *
-g_win32_handle_source_add (HANDLE handle, GSourceFunc callback, gpointer user_data)
-{
- GWin32HandleSource *hsource;
- GSource *source;
-
- source = g_source_new (&g_win32_handle_source_funcs, sizeof (GWin32HandleSource));
- hsource = (GWin32HandleSource *)source;
- hsource->pollfd.fd = (int)handle;
- hsource->pollfd.events = G_IO_IN;
- hsource->pollfd.revents = 0;
- g_source_add_poll (source, &hsource->pollfd);
-
- g_source_set_callback (source, callback, user_data, NULL);
- g_source_attach (source, NULL);
- return source;
-}
-
-/* logout-listener thread */
-
-LRESULT CALLBACK
-sm_client_win32_window_procedure (HWND hwnd,
- UINT message,
- WPARAM wParam,
- LPARAM lParam)
-{
- EggSMClientWin32 *win32 =
- (EggSMClientWin32 *)GetWindowLongPtr (hwnd, GWLP_USERDATA);
-
- switch (message)
- {
- case WM_QUERYENDSESSION:
- win32->event = emit_quit_requested;
- SetEvent (win32->message_event);
-
- WaitForSingleObject (win32->response_event, INFINITE);
- return win32->will_quit;
-
- case WM_ENDSESSION:
- if (wParam)
- {
- /* The session is ending */
- win32->event = emit_quit;
- }
- else
- {
- /* Nope, the session *isn't* ending */
- win32->event = emit_quit_cancelled;
- }
-
- SetEvent (win32->message_event);
- WaitForSingleObject (win32->response_event, INFINITE);
-
- return 0;
-
- default:
- return DefWindowProc (hwnd, message, wParam, lParam);
- }
-}
-
-static void
-sm_client_thread (gpointer smclient)
-{
- HINSTANCE instance;
- WNDCLASSEXW wcl;
- ATOM klass;
- HWND window;
- MSG msg;
-
- instance = GetModuleHandle (NULL);
-
- memset (&wcl, 0, sizeof (WNDCLASSEX));
- wcl.cbSize = sizeof (WNDCLASSEX);
- wcl.lpfnWndProc = sm_client_win32_window_procedure;
- wcl.hInstance = instance;
- wcl.lpszClassName = L"EggSmClientWindow";
- klass = RegisterClassEx (&wcl);
-
- window = CreateWindowEx (0, MAKEINTRESOURCE (klass),
- L"EggSmClientWindow", 0,
- 10, 10, 50, 50, GetDesktopWindow (),
- NULL, instance, NULL);
- SetWindowLongPtr (window, GWLP_USERDATA, (LONG_PTR)smclient);
-
- /* main loop */
- while (GetMessage (&msg, NULL, 0, 0))
- DispatchMessage (&msg);
-}
diff --git a/gedit/smclient/eggsmclient-xsmp.c b/gedit/smclient/eggsmclient-xsmp.c
deleted file mode 100755
index a6d3f11f..00000000
--- a/gedit/smclient/eggsmclient-xsmp.c
+++ /dev/null
@@ -1,1370 +0,0 @@
-/*
- * Copyright (C) 2007 Novell, Inc.
- *
- * Inspired by various other pieces of code including GsmClient (C)
- * 2001 Havoc Pennington, MateClient (C) 1998 Carsten Schaar, and twm
- * session code (C) 1998 The Open Group.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#include "config.h"
-
-#include "eggsmclient.h"
-#include "eggsmclient-private.h"
-
-#include "eggdesktopfile.h"
-
-#include <errno.h>
-#include <fcntl.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <X11/SM/SMlib.h>
-
-#include <gdk/gdk.h>
-
-#define EGG_TYPE_SM_CLIENT_XSMP (egg_sm_client_xsmp_get_type ())
-#define EGG_SM_CLIENT_XSMP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EGG_TYPE_SM_CLIENT_XSMP, EggSMClientXSMP))
-#define EGG_SM_CLIENT_XSMP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EGG_TYPE_SM_CLIENT_XSMP, EggSMClientXSMPClass))
-#define EGG_IS_SM_CLIENT_XSMP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EGG_TYPE_SM_CLIENT_XSMP))
-#define EGG_IS_SM_CLIENT_XSMP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EGG_TYPE_SM_CLIENT_XSMP))
-#define EGG_SM_CLIENT_XSMP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EGG_TYPE_SM_CLIENT_XSMP, EggSMClientXSMPClass))
-
-typedef struct _EggSMClientXSMP EggSMClientXSMP;
-typedef struct _EggSMClientXSMPClass EggSMClientXSMPClass;
-
-/* These mostly correspond to the similarly-named states in section
- * 9.1 of the XSMP spec. Some of the states there aren't represented
- * here, because we don't need them. SHUTDOWN_CANCELLED is slightly
- * different from the spec; we use it when the client is IDLE after a
- * ShutdownCancelled message, but the application is still interacting
- * and doesn't know the shutdown has been cancelled yet.
- */
-typedef enum
-{
- XSMP_STATE_IDLE,
- XSMP_STATE_SAVE_YOURSELF,
- XSMP_STATE_INTERACT_REQUEST,
- XSMP_STATE_INTERACT,
- XSMP_STATE_SAVE_YOURSELF_DONE,
- XSMP_STATE_SHUTDOWN_CANCELLED,
- XSMP_STATE_CONNECTION_CLOSED
-} EggSMClientXSMPState;
-
-static const char *state_names[] = {
- "idle",
- "save-yourself",
- "interact-request",
- "interact",
- "save-yourself-done",
- "shutdown-cancelled",
- "connection-closed"
-};
-
-#define EGG_SM_CLIENT_XSMP_STATE(xsmp) (state_names[(xsmp)->state])
-
-struct _EggSMClientXSMP
-{
- EggSMClient parent;
-
- SmcConn connection;
- char *client_id;
-
- EggSMClientXSMPState state;
- char **restart_command;
- gboolean set_restart_command;
- int restart_style;
-
- guint idle;
-
- /* Current SaveYourself state */
- guint expecting_initial_save_yourself : 1;
- guint need_save_state : 1;
- guint need_quit_requested : 1;
- guint interact_errors : 1;
- guint shutting_down : 1;
-
- /* Todo list */
- guint waiting_to_set_initial_properties : 1;
- guint waiting_to_emit_quit : 1;
- guint waiting_to_emit_quit_cancelled : 1;
- guint waiting_to_save_myself : 1;
-
-};
-
-struct _EggSMClientXSMPClass
-{
- EggSMClientClass parent_class;
-
-};
-
-static void sm_client_xsmp_startup (EggSMClient *client,
- const char *client_id);
-static void sm_client_xsmp_set_restart_command (EggSMClient *client,
- int argc,
- const char **argv);
-static void sm_client_xsmp_will_quit (EggSMClient *client,
- gboolean will_quit);
-static gboolean sm_client_xsmp_end_session (EggSMClient *client,
- EggSMClientEndStyle style,
- gboolean request_confirmation);
-
-static void xsmp_save_yourself (SmcConn smc_conn,
- SmPointer client_data,
- int save_style,
- Bool shutdown,
- int interact_style,
- Bool fast);
-static void xsmp_die (SmcConn smc_conn,
- SmPointer client_data);
-static void xsmp_save_complete (SmcConn smc_conn,
- SmPointer client_data);
-static void xsmp_shutdown_cancelled (SmcConn smc_conn,
- SmPointer client_data);
-static void xsmp_interact (SmcConn smc_conn,
- SmPointer client_data);
-
-static SmProp *array_prop (const char *name,
- ...);
-static SmProp *ptrarray_prop (const char *name,
- GPtrArray *values);
-static SmProp *string_prop (const char *name,
- const char *value);
-static SmProp *card8_prop (const char *name,
- unsigned char value);
-
-static void set_properties (EggSMClientXSMP *xsmp, ...);
-static void delete_properties (EggSMClientXSMP *xsmp, ...);
-
-static GPtrArray *generate_command (char **restart_command,
- const char *client_id,
- const char *state_file);
-
-static void save_state (EggSMClientXSMP *xsmp);
-static void do_save_yourself (EggSMClientXSMP *xsmp);
-static void update_pending_events (EggSMClientXSMP *xsmp);
-
-static void ice_init (void);
-static gboolean process_ice_messages (IceConn ice_conn);
-static void smc_error_handler (SmcConn smc_conn,
- Bool swap,
- int offending_minor_opcode,
- unsigned long offending_sequence,
- int error_class,
- int severity,
- SmPointer values);
-
-G_DEFINE_TYPE (EggSMClientXSMP, egg_sm_client_xsmp, EGG_TYPE_SM_CLIENT)
-
-static void
-egg_sm_client_xsmp_init (EggSMClientXSMP *xsmp)
-{
- xsmp->state = XSMP_STATE_CONNECTION_CLOSED;
- xsmp->connection = NULL;
- xsmp->restart_style = SmRestartIfRunning;
-}
-
-static void
-egg_sm_client_xsmp_class_init (EggSMClientXSMPClass *klass)
-{
- EggSMClientClass *sm_client_class = EGG_SM_CLIENT_CLASS (klass);
-
- sm_client_class->startup = sm_client_xsmp_startup;
- sm_client_class->set_restart_command = sm_client_xsmp_set_restart_command;
- sm_client_class->will_quit = sm_client_xsmp_will_quit;
- sm_client_class->end_session = sm_client_xsmp_end_session;
-}
-
-EggSMClient *
-egg_sm_client_xsmp_new (void)
-{
- if (!g_getenv ("SESSION_MANAGER"))
- return NULL;
-
- return g_object_new (EGG_TYPE_SM_CLIENT_XSMP, NULL);
-}
-
-static gboolean
-sm_client_xsmp_set_initial_properties (gpointer user_data)
-{
- EggSMClientXSMP *xsmp = user_data;
- EggDesktopFile *desktop_file;
- GPtrArray *clone, *restart;
- char pid_str[64];
-
- if (xsmp->idle)
- {
- g_source_remove (xsmp->idle);
- xsmp->idle = 0;
- }
- xsmp->waiting_to_set_initial_properties = FALSE;
-
- if (egg_sm_client_get_mode () == EGG_SM_CLIENT_MODE_NO_RESTART)
- xsmp->restart_style = SmRestartNever;
-
- /* Parse info out of desktop file */
- desktop_file = egg_get_desktop_file ();
- if (desktop_file)
- {
- GError *err = NULL;
- char *cmdline, **argv;
- int argc;
-
- if (xsmp->restart_style == SmRestartIfRunning)
- {
- if (egg_desktop_file_get_boolean (desktop_file,
- "X-MATE-AutoRestart", NULL))
- xsmp->restart_style = SmRestartImmediately;
- }
-
- if (!xsmp->set_restart_command)
- {
- cmdline = egg_desktop_file_parse_exec (desktop_file, NULL, &err);
- if (cmdline && g_shell_parse_argv (cmdline, &argc, &argv, &err))
- {
- egg_sm_client_set_restart_command (EGG_SM_CLIENT (xsmp),
- argc, (const char **)argv);
- g_strfreev (argv);
- }
- else
- {
- g_warning ("Could not parse Exec line in desktop file: %s",
- err->message);
- g_error_free (err);
- }
- g_free (cmdline);
- }
- }
-
- if (!xsmp->set_restart_command)
- xsmp->restart_command = g_strsplit (g_get_prgname (), " ", -1);
-
- clone = generate_command (xsmp->restart_command, NULL, NULL);
- restart = generate_command (xsmp->restart_command, xsmp->client_id, NULL);
-
- g_debug ("Setting initial properties");
-
- /* Program, CloneCommand, RestartCommand, and UserID are required.
- * ProcessID isn't required, but the SM may be able to do something
- * useful with it.
- */
- g_snprintf (pid_str, sizeof (pid_str), "%lu", (gulong) getpid ());
- set_properties (xsmp,
- string_prop (SmProgram, g_get_prgname ()),
- ptrarray_prop (SmCloneCommand, clone),
- ptrarray_prop (SmRestartCommand, restart),
- string_prop (SmUserID, g_get_user_name ()),
- string_prop (SmProcessID, pid_str),
- card8_prop (SmRestartStyleHint, xsmp->restart_style),
- NULL);
- g_ptr_array_free (clone, TRUE);
- g_ptr_array_free (restart, TRUE);
-
- if (desktop_file)
- {
- set_properties (xsmp,
- string_prop ("_GSM_DesktopFile", egg_desktop_file_get_source (desktop_file)),
- NULL);
- }
-
- update_pending_events (xsmp);
- return FALSE;
-}
-
-/* This gets called from two different places: xsmp_die() (when the
- * server asks us to disconnect) and process_ice_messages() (when the
- * server disconnects unexpectedly).
- */
-static void
-sm_client_xsmp_disconnect (EggSMClientXSMP *xsmp)
-{
- SmcConn connection;
-
- if (!xsmp->connection)
- return;
-
- g_debug ("Disconnecting");
-
- connection = xsmp->connection;
- xsmp->connection = NULL;
- SmcCloseConnection (connection, 0, NULL);
- xsmp->state = XSMP_STATE_CONNECTION_CLOSED;
-
- xsmp->waiting_to_save_myself = FALSE;
- update_pending_events (xsmp);
-}
-
-static void
-sm_client_xsmp_startup (EggSMClient *client,
- const char *client_id)
-{
- EggSMClientXSMP *xsmp = (EggSMClientXSMP *)client;
- SmcCallbacks callbacks;
- char *ret_client_id;
- char error_string_ret[256];
-
- xsmp->client_id = g_strdup (client_id);
-
- ice_init ();
- SmcSetErrorHandler (smc_error_handler);
-
- callbacks.save_yourself.callback = xsmp_save_yourself;
- callbacks.die.callback = xsmp_die;
- callbacks.save_complete.callback = xsmp_save_complete;
- callbacks.shutdown_cancelled.callback = xsmp_shutdown_cancelled;
-
- callbacks.save_yourself.client_data = xsmp;
- callbacks.die.client_data = xsmp;
- callbacks.save_complete.client_data = xsmp;
- callbacks.shutdown_cancelled.client_data = xsmp;
-
- client_id = NULL;
- error_string_ret[0] = '\0';
- xsmp->connection =
- SmcOpenConnection (NULL, xsmp, SmProtoMajor, SmProtoMinor,
- SmcSaveYourselfProcMask | SmcDieProcMask |
- SmcSaveCompleteProcMask |
- SmcShutdownCancelledProcMask,
- &callbacks,
- xsmp->client_id, &ret_client_id,
- sizeof (error_string_ret), error_string_ret);
-
- if (!xsmp->connection)
- {
- g_warning ("Failed to connect to the session manager: %s\n",
- error_string_ret[0] ?
- error_string_ret : "no error message given");
- xsmp->state = XSMP_STATE_CONNECTION_CLOSED;
- return;
- }
-
- /* We expect a pointless initial SaveYourself if either (a) we
- * didn't have an initial client ID, or (b) we DID have an initial
- * client ID, but the server rejected it and gave us a new one.
- */
- if (!xsmp->client_id ||
- (ret_client_id && strcmp (xsmp->client_id, ret_client_id) != 0))
- xsmp->expecting_initial_save_yourself = TRUE;
-
- if (ret_client_id)
- {
- g_free (xsmp->client_id);
- xsmp->client_id = g_strdup (ret_client_id);
- free (ret_client_id);
-
- gdk_threads_enter ();
- gdk_set_sm_client_id (xsmp->client_id);
- gdk_threads_leave ();
-
- g_debug ("Got client ID \"%s\"", xsmp->client_id);
- }
-
- xsmp->state = XSMP_STATE_IDLE;
-
- /* Do not set the initial properties until we reach the main loop,
- * so that the application has a chance to call
- * egg_set_desktop_file(). (This may also help the session manager
- * have a better idea of when the application is fully up and
- * running.)
- */
- xsmp->waiting_to_set_initial_properties = TRUE;
- xsmp->idle = g_idle_add (sm_client_xsmp_set_initial_properties, client);
-}
-
-static void
-sm_client_xsmp_set_restart_command (EggSMClient *client,
- int argc,
- const char **argv)
-{
- EggSMClientXSMP *xsmp = (EggSMClientXSMP *)client;
- int i;
-
- g_strfreev (xsmp->restart_command);
-
- xsmp->restart_command = g_new (char *, argc + 1);
- for (i = 0; i < argc; i++)
- xsmp->restart_command[i] = g_strdup (argv[i]);
- xsmp->restart_command[i] = NULL;
-
- xsmp->set_restart_command = TRUE;
-}
-
-static void
-sm_client_xsmp_will_quit (EggSMClient *client,
- gboolean will_quit)
-{
- EggSMClientXSMP *xsmp = (EggSMClientXSMP *)client;
-
- if (xsmp->state == XSMP_STATE_CONNECTION_CLOSED)
- {
- /* The session manager has already exited! Schedule a quit
- * signal.
- */
- xsmp->waiting_to_emit_quit = TRUE;
- update_pending_events (xsmp);
- return;
- }
- else if (xsmp->state == XSMP_STATE_SHUTDOWN_CANCELLED)
- {
- /* We received a ShutdownCancelled message while the application
- * was interacting; Schedule a quit_cancelled signal.
- */
- xsmp->waiting_to_emit_quit_cancelled = TRUE;
- update_pending_events (xsmp);
- return;
- }
-
- g_return_if_fail (xsmp->state == XSMP_STATE_INTERACT);
-
- g_debug ("Sending InteractDone(%s)", will_quit ? "False" : "True");
- SmcInteractDone (xsmp->connection, !will_quit);
-
- if (will_quit && xsmp->need_save_state)
- save_state (xsmp);
-
- g_debug ("Sending SaveYourselfDone(%s)", will_quit ? "True" : "False");
- SmcSaveYourselfDone (xsmp->connection, will_quit);
- xsmp->state = XSMP_STATE_SAVE_YOURSELF_DONE;
-}
-
-static gboolean
-sm_client_xsmp_end_session (EggSMClient *client,
- EggSMClientEndStyle style,
- gboolean request_confirmation)
-{
- EggSMClientXSMP *xsmp = (EggSMClientXSMP *)client;
- int save_type;
-
- /* To end the session via XSMP, we have to send a
- * SaveYourselfRequest. We aren't allowed to do that if anything
- * else is going on, but we don't want to expose this fact to the
- * application. So we do our best to patch things up here...
- *
- * In the worst case, this method might block for some length of
- * time in process_ice_messages, but the only time that code path is
- * honestly likely to get hit is if the application tries to end the
- * session as the very first thing it does, in which case it
- * probably won't actually block anyway. It's not worth gunking up
- * the API to try to deal nicely with the other 0.01% of cases where
- * this happens.
- */
-
- while (xsmp->state != XSMP_STATE_IDLE ||
- xsmp->expecting_initial_save_yourself)
- {
- /* If we're already shutting down, we don't need to do anything. */
- if (xsmp->shutting_down)
- return TRUE;
-
- switch (xsmp->state)
- {
- case XSMP_STATE_CONNECTION_CLOSED:
- return FALSE;
-
- case XSMP_STATE_SAVE_YOURSELF:
- /* Trying to log out from the save_state callback? Whatever.
- * Abort the save_state.
- */
- SmcSaveYourselfDone (xsmp->connection, FALSE);
- xsmp->state = XSMP_STATE_SAVE_YOURSELF_DONE;
- break;
-
- case XSMP_STATE_INTERACT_REQUEST:
- case XSMP_STATE_INTERACT:
- case XSMP_STATE_SHUTDOWN_CANCELLED:
- /* Already in a shutdown-related state, just ignore
- * the new shutdown request...
- */
- return TRUE;
-
- case XSMP_STATE_IDLE:
- if (xsmp->waiting_to_set_initial_properties)
- sm_client_xsmp_set_initial_properties (xsmp);
-
- if (!xsmp->expecting_initial_save_yourself)
- break;
- /* else fall through */
-
- case XSMP_STATE_SAVE_YOURSELF_DONE:
- /* We need to wait for some response from the server.*/
- process_ice_messages (SmcGetIceConnection (xsmp->connection));
- break;
-
- default:
- /* Hm... shouldn't happen */
- return FALSE;
- }
- }
-
- /* xfce4-session will do the wrong thing if we pass SmSaveGlobal and
- * the user chooses to save the session. But mate-session will do
- * the wrong thing if we pass SmSaveBoth and the user chooses NOT to
- * save the session... Sigh.
- */
- if (!strcmp (SmcVendor (xsmp->connection), "xfce4-session"))
- save_type = SmSaveBoth;
- else
- save_type = SmSaveGlobal;
-
- g_debug ("Sending SaveYourselfRequest(SmSaveGlobal, Shutdown, SmInteractStyleAny, %sFast)", request_confirmation ? "!" : "");
- SmcRequestSaveYourself (xsmp->connection,
- save_type,
- True, /* shutdown */
- SmInteractStyleAny,
- !request_confirmation, /* fast */
- True /* global */);
- return TRUE;
-}
-
-static gboolean
-idle_do_pending_events (gpointer data)
-{
- EggSMClientXSMP *xsmp = data;
- EggSMClient *client = data;
-
- gdk_threads_enter ();
-
- xsmp->idle = 0;
-
- if (xsmp->waiting_to_emit_quit)
- {
- xsmp->waiting_to_emit_quit = FALSE;
- egg_sm_client_quit (client);
- goto out;
- }
-
- if (xsmp->waiting_to_emit_quit_cancelled)
- {
- xsmp->waiting_to_emit_quit_cancelled = FALSE;
- egg_sm_client_quit_cancelled (client);
- xsmp->state = XSMP_STATE_IDLE;
- }
-
- if (xsmp->waiting_to_save_myself)
- {
- xsmp->waiting_to_save_myself = FALSE;
- do_save_yourself (xsmp);
- }
-
- out:
- gdk_threads_leave ();
- return FALSE;
-}
-
-static void
-update_pending_events (EggSMClientXSMP *xsmp)
-{
- gboolean want_idle =
- xsmp->waiting_to_emit_quit ||
- xsmp->waiting_to_emit_quit_cancelled ||
- xsmp->waiting_to_save_myself;
-
- if (want_idle)
- {
- if (xsmp->idle == 0)
- xsmp->idle = g_idle_add (idle_do_pending_events, xsmp);
- }
- else
- {
- if (xsmp->idle != 0)
- g_source_remove (xsmp->idle);
- xsmp->idle = 0;
- }
-}
-
-static void
-fix_broken_state (EggSMClientXSMP *xsmp, const char *message,
- gboolean send_interact_done,
- gboolean send_save_yourself_done)
-{
- g_warning ("Received XSMP %s message in state %s: client or server error",
- message, EGG_SM_CLIENT_XSMP_STATE (xsmp));
-
- /* Forget any pending SaveYourself plans we had */
- xsmp->waiting_to_save_myself = FALSE;
- update_pending_events (xsmp);
-
- if (send_interact_done)
- SmcInteractDone (xsmp->connection, False);
- if (send_save_yourself_done)
- SmcSaveYourselfDone (xsmp->connection, True);
-
- xsmp->state = send_save_yourself_done ? XSMP_STATE_SAVE_YOURSELF_DONE : XSMP_STATE_IDLE;
-}
-
-/* SM callbacks */
-
-static void
-xsmp_save_yourself (SmcConn smc_conn,
- SmPointer client_data,
- int save_type,
- Bool shutdown,
- int interact_style,
- Bool fast)
-{
- EggSMClientXSMP *xsmp = client_data;
- gboolean wants_quit_requested;
-
- g_debug ("Received SaveYourself(%s, %s, %s, %s) in state %s",
- save_type == SmSaveLocal ? "SmSaveLocal" :
- save_type == SmSaveGlobal ? "SmSaveGlobal" : "SmSaveBoth",
- shutdown ? "Shutdown" : "!Shutdown",
- interact_style == SmInteractStyleAny ? "SmInteractStyleAny" :
- interact_style == SmInteractStyleErrors ? "SmInteractStyleErrors" :
- "SmInteractStyleNone", fast ? "Fast" : "!Fast",
- EGG_SM_CLIENT_XSMP_STATE (xsmp));
-
- if (xsmp->state != XSMP_STATE_IDLE &&
- xsmp->state != XSMP_STATE_SHUTDOWN_CANCELLED)
- {
- fix_broken_state (xsmp, "SaveYourself", FALSE, TRUE);
- return;
- }
-
- if (xsmp->waiting_to_set_initial_properties)
- sm_client_xsmp_set_initial_properties (xsmp);
-
- /* If this is the initial SaveYourself, ignore it; we've already set
- * properties and there's no reason to actually save state too.
- */
- if (xsmp->expecting_initial_save_yourself)
- {
- xsmp->expecting_initial_save_yourself = FALSE;
-
- if (save_type == SmSaveLocal &&
- interact_style == SmInteractStyleNone &&
- !shutdown && !fast)
- {
- g_debug ("Sending SaveYourselfDone(True) for initial SaveYourself");
- SmcSaveYourselfDone (xsmp->connection, True);
- /* As explained in the comment at the end of
- * do_save_yourself(), SAVE_YOURSELF_DONE is the correct
- * state here, not IDLE.
- */
- xsmp->state = XSMP_STATE_SAVE_YOURSELF_DONE;
- return;
- }
- else
- g_warning ("First SaveYourself was not the expected one!");
- }
-
- /* Even ignoring the "fast" flag completely, there are still 18
- * different combinations of save_type, shutdown and interact_style.
- * We interpret them as follows:
- *
- * Type Shutdown Interact Interpretation
- * G F A/E/N do nothing (1)
- * G T N do nothing (1)*
- * G T A/E quit_requested (2)
- * L/B F A/E/N save_state (3)
- * L/B T N save_state (3)*
- * L/B T A/E quit_requested, then save_state (4)
- *
- * 1. Do nothing, because the SM asked us to do something
- * uninteresting (save open files, but then don't quit
- * afterward) or rude (save open files without asking the user
- * for confirmation).
- *
- * 2. Request interaction and then emit ::quit_requested. This
- * perhaps isn't quite correct for the SmInteractStyleErrors
- * case, but we don't care.
- *
- * 3. Emit ::save_state. The SmSaveBoth SaveYourselfs in these
- * rows essentially get demoted to SmSaveLocal, because their
- * Global halves correspond to "do nothing".
- *
- * 4. Request interaction, emit ::quit_requested, and then emit
- * ::save_state after interacting. This is the SmSaveBoth
- * equivalent of #2, but we also promote SmSaveLocal shutdown
- * SaveYourselfs to SmSaveBoth here, because we want to give
- * the user a chance to save open files before quitting.
- *
- * (* It would be nice if we could do something useful when the
- * session manager sends a SaveYourself with shutdown True and
- * SmInteractStyleNone. But we can't, so we just pretend it didn't
- * even tell us it was shutting down. The docs for ::quit mention
- * that it might not always be preceded by ::quit_requested.)
- */
-
- /* As an optimization, we don't actually request interaction and
- * emit ::quit_requested if the application isn't listening to the
- * signal.
- */
- wants_quit_requested = g_signal_has_handler_pending (xsmp, g_signal_lookup ("quit_requested", EGG_TYPE_SM_CLIENT), 0, FALSE);
-
- xsmp->need_save_state = (save_type != SmSaveGlobal);
- xsmp->need_quit_requested = (shutdown && wants_quit_requested &&
- interact_style != SmInteractStyleNone);
- xsmp->interact_errors = (interact_style == SmInteractStyleErrors);
-
- xsmp->shutting_down = shutdown;
-
- do_save_yourself (xsmp);
-}
-
-static void
-do_save_yourself (EggSMClientXSMP *xsmp)
-{
- if (xsmp->state == XSMP_STATE_SHUTDOWN_CANCELLED)
- {
- /* The SM cancelled a previous SaveYourself, but we haven't yet
- * had a chance to tell the application, so we can't start
- * processing this SaveYourself yet.
- */
- xsmp->waiting_to_save_myself = TRUE;
- update_pending_events (xsmp);
- return;
- }
-
- if (xsmp->need_quit_requested)
- {
- xsmp->state = XSMP_STATE_INTERACT_REQUEST;
-
- g_debug ("Sending InteractRequest(%s)",
- xsmp->interact_errors ? "Error" : "Normal");
- SmcInteractRequest (xsmp->connection,
- xsmp->interact_errors ? SmDialogError : SmDialogNormal,
- xsmp_interact,
- xsmp);
- return;
- }
-
- if (xsmp->need_save_state)
- {
- save_state (xsmp);
-
- /* Though unlikely, the client could have been disconnected
- * while the application was saving its state.
- */
- if (!xsmp->connection)
- return;
- }
-
- g_debug ("Sending SaveYourselfDone(True)");
- SmcSaveYourselfDone (xsmp->connection, True);
-
- /* The client state diagram in the XSMP spec says that after a
- * non-shutdown SaveYourself, we go directly back to "idle". But
- * everything else in both the XSMP spec and the libSM docs
- * disagrees.
- */
- xsmp->state = XSMP_STATE_SAVE_YOURSELF_DONE;
-}
-
-static void
-save_state (EggSMClientXSMP *xsmp)
-{
- GKeyFile *state_file;
- char *state_file_path, *data;
- EggDesktopFile *desktop_file;
- GPtrArray *restart;
- int offset, fd;
-
- /* We set xsmp->state before emitting save_state, but our caller is
- * responsible for setting it back afterward.
- */
- xsmp->state = XSMP_STATE_SAVE_YOURSELF;
-
- state_file = egg_sm_client_save_state ((EggSMClient *)xsmp);
- if (!state_file)
- {
- restart = generate_command (xsmp->restart_command, xsmp->client_id, NULL);
- set_properties (xsmp,
- ptrarray_prop (SmRestartCommand, restart),
- NULL);
- g_ptr_array_free (restart, TRUE);
- delete_properties (xsmp, SmDiscardCommand, NULL);
- return;
- }
-
- desktop_file = egg_get_desktop_file ();
- if (desktop_file)
- {
- GKeyFile *merged_file;
- char *desktop_file_path;
-
- merged_file = g_key_file_new ();
- desktop_file_path =
- g_filename_from_uri (egg_desktop_file_get_source (desktop_file),
- NULL, NULL);
- if (desktop_file_path &&
- g_key_file_load_from_file (merged_file, desktop_file_path,
- G_KEY_FILE_KEEP_COMMENTS |
- G_KEY_FILE_KEEP_TRANSLATIONS, NULL))
- {
- guint g, k, i;
- char **groups, **keys, *value, *exec;
-
- groups = g_key_file_get_groups (state_file, NULL);
- for (g = 0; groups[g]; g++)
- {
- keys = g_key_file_get_keys (state_file, groups[g], NULL, NULL);
- for (k = 0; keys[k]; k++)
- {
- value = g_key_file_get_value (state_file, groups[g],
- keys[k], NULL);
- if (value)
- {
- g_key_file_set_value (merged_file, groups[g],
- keys[k], value);
- g_free (value);
- }
- }
- g_strfreev (keys);
- }
- g_strfreev (groups);
-
- g_key_file_free (state_file);
- state_file = merged_file;
-
- /* Update Exec key using "--sm-client-state-file %k" */
- restart = generate_command (xsmp->restart_command,
- NULL, "%k");
- for (i = 0; i < restart->len; i++)
- restart->pdata[i] = g_shell_quote (restart->pdata[i]);
- g_ptr_array_add (restart, NULL);
- exec = g_strjoinv (" ", (char **)restart->pdata);
- g_strfreev ((char **)restart->pdata);
- g_ptr_array_free (restart, FALSE);
-
- g_key_file_set_string (state_file, EGG_DESKTOP_FILE_GROUP,
- EGG_DESKTOP_FILE_KEY_EXEC,
- exec);
- g_free (exec);
- }
- else
- desktop_file = NULL;
-
- g_free (desktop_file_path);
- }
-
- /* Now write state_file to disk. (We can't use mktemp(), because
- * that requires the filename to end with "XXXXXX", and we want
- * it to end with ".desktop".)
- */
-
- data = g_key_file_to_data (state_file, NULL, NULL);
- g_key_file_free (state_file);
-
- offset = 0;
- while (1)
- {
- state_file_path = g_strdup_printf ("%s%csession-state%c%s-%ld.%s",
- g_get_user_config_dir (),
- G_DIR_SEPARATOR, G_DIR_SEPARATOR,
- g_get_prgname (),
- (long)time (NULL) + offset,
- desktop_file ? "desktop" : "state");
-
- fd = open (state_file_path, O_WRONLY | O_CREAT | O_EXCL, 0644);
- if (fd == -1)
- {
- if (errno == EEXIST)
- {
- offset++;
- g_free (state_file_path);
- continue;
- }
- else if (errno == ENOTDIR || errno == ENOENT)
- {
- char *sep = strrchr (state_file_path, G_DIR_SEPARATOR);
-
- *sep = '\0';
- if (g_mkdir_with_parents (state_file_path, 0755) != 0)
- {
- g_warning ("Could not create directory '%s'",
- state_file_path);
- g_free (state_file_path);
- state_file_path = NULL;
- break;
- }
-
- continue;
- }
-
- g_warning ("Could not create file '%s': %s",
- state_file_path, g_strerror (errno));
- g_free (state_file_path);
- state_file_path = NULL;
- break;
- }
-
- close (fd);
- g_file_set_contents (state_file_path, data, -1, NULL);
- break;
- }
- g_free (data);
-
- restart = generate_command (xsmp->restart_command, xsmp->client_id,
- state_file_path);
- set_properties (xsmp,
- ptrarray_prop (SmRestartCommand, restart),
- NULL);
- g_ptr_array_free (restart, TRUE);
-
- if (state_file_path)
- {
- set_properties (xsmp,
- array_prop (SmDiscardCommand,
- "/bin/rm", "-rf", state_file_path,
- NULL),
- NULL);
- g_free (state_file_path);
- }
-}
-
-static void
-xsmp_interact (SmcConn smc_conn,
- SmPointer client_data)
-{
- EggSMClientXSMP *xsmp = client_data;
- EggSMClient *client = client_data;
-
- g_debug ("Received Interact message in state %s",
- EGG_SM_CLIENT_XSMP_STATE (xsmp));
-
- if (xsmp->state != XSMP_STATE_INTERACT_REQUEST)
- {
- fix_broken_state (xsmp, "Interact", TRUE, TRUE);
- return;
- }
-
- xsmp->state = XSMP_STATE_INTERACT;
- egg_sm_client_quit_requested (client);
-}
-
-static void
-xsmp_die (SmcConn smc_conn,
- SmPointer client_data)
-{
- EggSMClientXSMP *xsmp = client_data;
- EggSMClient *client = client_data;
-
- g_debug ("Received Die message in state %s",
- EGG_SM_CLIENT_XSMP_STATE (xsmp));
-
- sm_client_xsmp_disconnect (xsmp);
- egg_sm_client_quit (client);
-}
-
-static void
-xsmp_save_complete (SmcConn smc_conn,
- SmPointer client_data)
-{
- EggSMClientXSMP *xsmp = client_data;
-
- g_debug ("Received SaveComplete message in state %s",
- EGG_SM_CLIENT_XSMP_STATE (xsmp));
-
- if (xsmp->state == XSMP_STATE_SAVE_YOURSELF_DONE)
- xsmp->state = XSMP_STATE_IDLE;
- else
- fix_broken_state (xsmp, "SaveComplete", FALSE, FALSE);
-}
-
-static void
-xsmp_shutdown_cancelled (SmcConn smc_conn,
- SmPointer client_data)
-{
- EggSMClientXSMP *xsmp = client_data;
- EggSMClient *client = client_data;
-
- g_debug ("Received ShutdownCancelled message in state %s",
- EGG_SM_CLIENT_XSMP_STATE (xsmp));
-
- xsmp->shutting_down = FALSE;
-
- if (xsmp->state == XSMP_STATE_SAVE_YOURSELF_DONE)
- {
- /* We've finished interacting and now the SM has agreed to
- * cancel the shutdown.
- */
- xsmp->state = XSMP_STATE_IDLE;
- egg_sm_client_quit_cancelled (client);
- }
- else if (xsmp->state == XSMP_STATE_SHUTDOWN_CANCELLED)
- {
- /* Hm... ok, so we got a shutdown SaveYourself, which got
- * cancelled, but the application was still interacting, so we
- * didn't tell it yet, and then *another* SaveYourself arrived,
- * which we must still be waiting to tell the app about, except
- * that now that SaveYourself has been cancelled too! Dizzy yet?
- */
- xsmp->waiting_to_save_myself = FALSE;
- update_pending_events (xsmp);
- }
- else
- {
- g_debug ("Sending SaveYourselfDone(False)");
- SmcSaveYourselfDone (xsmp->connection, False);
-
- if (xsmp->state == XSMP_STATE_INTERACT)
- {
- /* The application is currently interacting, so we can't
- * tell it about the cancellation yet; we will wait until
- * after it calls egg_sm_client_will_quit().
- */
- xsmp->state = XSMP_STATE_SHUTDOWN_CANCELLED;
- }
- else
- {
- /* The shutdown was cancelled before the application got a
- * chance to interact.
- */
- xsmp->state = XSMP_STATE_IDLE;
- }
- }
-}
-
-/* Utilities */
-
-/* Create a restart/clone/Exec command based on @restart_command.
- * If @client_id is non-%NULL, add "--sm-client-id @client_id".
- * If @state_file is non-%NULL, add "--sm-client-state-file @state_file".
- *
- * None of the input strings are g_strdup()ed; the caller must keep
- * them around until it is done with the returned GPtrArray, and must
- * then free the array, but not its contents.
- */
-static GPtrArray *
-generate_command (char **restart_command, const char *client_id,
- const char *state_file)
-{
- GPtrArray *cmd;
- int i;
-
- cmd = g_ptr_array_new ();
- g_ptr_array_add (cmd, restart_command[0]);
-
- if (client_id)
- {
- g_ptr_array_add (cmd, (char *)"--sm-client-id");
- g_ptr_array_add (cmd, (char *)client_id);
- }
-
- if (state_file)
- {
- g_ptr_array_add (cmd, (char *)"--sm-client-state-file");
- g_ptr_array_add (cmd, (char *)state_file);
- }
-
- for (i = 1; restart_command[i]; i++)
- g_ptr_array_add (cmd, restart_command[i]);
-
- return cmd;
-}
-
-/* Takes a NULL-terminated list of SmProp * values, created by
- * array_prop, ptrarray_prop, string_prop, card8_prop, sets them, and
- * frees them.
- */
-static void
-set_properties (EggSMClientXSMP *xsmp, ...)
-{
- GPtrArray *props;
- SmProp *prop;
- va_list ap;
- guint i;
-
- props = g_ptr_array_new ();
-
- va_start (ap, xsmp);
- while ((prop = va_arg (ap, SmProp *)))
- g_ptr_array_add (props, prop);
- va_end (ap);
-
- if (xsmp->connection)
- {
- SmcSetProperties (xsmp->connection, props->len,
- (SmProp **)props->pdata);
- }
-
- for (i = 0; i < props->len; i++)
- {
- prop = props->pdata[i];
- g_free (prop->vals);
- g_free (prop);
- }
- g_ptr_array_free (props, TRUE);
-}
-
-/* Takes a NULL-terminated list of property names and deletes them. */
-static void
-delete_properties (EggSMClientXSMP *xsmp, ...)
-{
- GPtrArray *props;
- char *prop;
- va_list ap;
-
- if (!xsmp->connection)
- return;
-
- props = g_ptr_array_new ();
-
- va_start (ap, xsmp);
- while ((prop = va_arg (ap, char *)))
- g_ptr_array_add (props, prop);
- va_end (ap);
-
- SmcDeleteProperties (xsmp->connection, props->len,
- (char **)props->pdata);
-
- g_ptr_array_free (props, TRUE);
-}
-
-/* Takes an array of strings and creates a LISTofARRAY8 property. The
- * strings are neither dupped nor freed; they need to remain valid
- * until you're done with the SmProp.
- */
-static SmProp *
-array_prop (const char *name, ...)
-{
- SmProp *prop;
- SmPropValue pv;
- GArray *vals;
- char *value;
- va_list ap;
-
- prop = g_new (SmProp, 1);
- prop->name = (char *)name;
- prop->type = (char *)SmLISTofARRAY8;
-
- vals = g_array_new (FALSE, FALSE, sizeof (SmPropValue));
-
- va_start (ap, name);
- while ((value = va_arg (ap, char *)))
- {
- pv.length = strlen (value);
- pv.value = value;
- g_array_append_val (vals, pv);
- }
-
- prop->num_vals = vals->len;
- prop->vals = (SmPropValue *)vals->data;
-
- g_array_free (vals, FALSE);
-
- return prop;
-}
-
-/* Takes a GPtrArray of strings and creates a LISTofARRAY8 property.
- * The array contents are neither dupped nor freed; they need to
- * remain valid until you're done with the SmProp.
- */
-static SmProp *
-ptrarray_prop (const char *name, GPtrArray *values)
-{
- SmProp *prop;
- SmPropValue pv;
- GArray *vals;
- guint i;
-
- prop = g_new (SmProp, 1);
- prop->name = (char *)name;
- prop->type = (char *)SmLISTofARRAY8;
-
- vals = g_array_new (FALSE, FALSE, sizeof (SmPropValue));
-
- for (i = 0; i < values->len; i++)
- {
- pv.length = strlen (values->pdata[i]);
- pv.value = values->pdata[i];
- g_array_append_val (vals, pv);
- }
-
- prop->num_vals = vals->len;
- prop->vals = (SmPropValue *)vals->data;
-
- g_array_free (vals, FALSE);
-
- return prop;
-}
-
-/* Takes a string and creates an ARRAY8 property. The string is
- * neither dupped nor freed; it needs to remain valid until you're
- * done with the SmProp.
- */
-static SmProp *
-string_prop (const char *name, const char *value)
-{
- SmProp *prop;
-
- prop = g_new (SmProp, 1);
- prop->name = (char *)name;
- prop->type = (char *)SmARRAY8;
-
- prop->num_vals = 1;
- prop->vals = g_new (SmPropValue, 1);
-
- prop->vals[0].length = strlen (value);
- prop->vals[0].value = (char *)value;
-
- return prop;
-}
-
-/* Takes a char and creates a CARD8 property. */
-static SmProp *
-card8_prop (const char *name, unsigned char value)
-{
- SmProp *prop;
- char *card8val;
-
- /* To avoid having to allocate and free prop->vals[0], we cheat and
- * make vals a 2-element-long array and then use the second element
- * to store value.
- */
-
- prop = g_new (SmProp, 1);
- prop->name = (char *)name;
- prop->type = (char *)SmCARD8;
-
- prop->num_vals = 1;
- prop->vals = g_new (SmPropValue, 2);
- card8val = (char *)(&prop->vals[1]);
- card8val[0] = value;
-
- prop->vals[0].length = 1;
- prop->vals[0].value = card8val;
-
- return prop;
-}
-
-/* ICE code. This makes no effort to play nice with anyone else trying
- * to use libICE. Fortunately, no one uses libICE for anything other
- * than SM. (DCOP uses ICE, but it has its own private copy of
- * libICE.)
- *
- * When this moves to gtk, it will need to be cleverer, to avoid
- * tripping over old apps that use MateClient or that use libSM
- * directly.
- */
-
-#include <X11/ICE/ICElib.h>
-#include <fcntl.h>
-
-static void ice_error_handler (IceConn ice_conn,
- Bool swap,
- int offending_minor_opcode,
- unsigned long offending_sequence,
- int error_class,
- int severity,
- IcePointer values);
-static void ice_io_error_handler (IceConn ice_conn);
-static void ice_connection_watch (IceConn ice_conn,
- IcePointer client_data,
- Bool opening,
- IcePointer *watch_data);
-
-static void
-ice_init (void)
-{
- IceSetIOErrorHandler (ice_io_error_handler);
- IceSetErrorHandler (ice_error_handler);
- IceAddConnectionWatch (ice_connection_watch, NULL);
-}
-
-static gboolean
-process_ice_messages (IceConn ice_conn)
-{
- IceProcessMessagesStatus status;
-
- gdk_threads_enter ();
- status = IceProcessMessages (ice_conn, NULL, NULL);
- gdk_threads_leave ();
-
- switch (status)
- {
- case IceProcessMessagesSuccess:
- return TRUE;
-
- case IceProcessMessagesIOError:
- sm_client_xsmp_disconnect (IceGetConnectionContext (ice_conn));
- return FALSE;
-
- case IceProcessMessagesConnectionClosed:
- return FALSE;
-
- default:
- g_assert_not_reached ();
- }
-}
-
-static gboolean
-ice_iochannel_watch (GIOChannel *channel,
- GIOCondition condition,
- gpointer client_data)
-{
- return process_ice_messages (client_data);
-}
-
-static void
-ice_connection_watch (IceConn ice_conn,
- IcePointer client_data,
- Bool opening,
- IcePointer *watch_data)
-{
- guint watch_id;
-
- if (opening)
- {
- GIOChannel *channel;
- int fd = IceConnectionNumber (ice_conn);
-
- fcntl (fd, F_SETFD, fcntl (fd, F_GETFD, 0) | FD_CLOEXEC);
- channel = g_io_channel_unix_new (fd);
- watch_id = g_io_add_watch (channel, G_IO_IN | G_IO_ERR,
- ice_iochannel_watch, ice_conn);
- g_io_channel_unref (channel);
-
- *watch_data = GUINT_TO_POINTER (watch_id);
- }
- else
- {
- watch_id = GPOINTER_TO_UINT (*watch_data);
- g_source_remove (watch_id);
- }
-}
-
-static void
-ice_error_handler (IceConn ice_conn,
- Bool swap,
- int offending_minor_opcode,
- unsigned long offending_sequence,
- int error_class,
- int severity,
- IcePointer values)
-{
- /* Do nothing */
-}
-
-static void
-ice_io_error_handler (IceConn ice_conn)
-{
- /* Do nothing */
-}
-
-static void
-smc_error_handler (SmcConn smc_conn,
- Bool swap,
- int offending_minor_opcode,
- unsigned long offending_sequence,
- int error_class,
- int severity,
- SmPointer values)
-{
- /* Do nothing */
-}
diff --git a/gedit/smclient/eggsmclient.c b/gedit/smclient/eggsmclient.c
deleted file mode 100755
index 4b65f283..00000000
--- a/gedit/smclient/eggsmclient.c
+++ /dev/null
@@ -1,589 +0,0 @@
-/*
- * Copyright (C) 2007 Novell, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#include "config.h"
-
-#include <string.h>
-#include <glib/gi18n.h>
-
-#include "eggsmclient.h"
-#include "eggsmclient-private.h"
-
-static void egg_sm_client_debug_handler (const char *log_domain,
- GLogLevelFlags log_level,
- const char *message,
- gpointer user_data);
-
-enum {
- SAVE_STATE,
- QUIT_REQUESTED,
- QUIT_CANCELLED,
- QUIT,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL];
-
-struct _EggSMClientPrivate {
- GKeyFile *state_file;
-};
-
-#define EGG_SM_CLIENT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), EGG_TYPE_SM_CLIENT, EggSMClientPrivate))
-
-G_DEFINE_TYPE (EggSMClient, egg_sm_client, G_TYPE_OBJECT)
-
-static EggSMClient *global_client;
-static EggSMClientMode global_client_mode = EGG_SM_CLIENT_MODE_NORMAL;
-
-static void
-egg_sm_client_init (EggSMClient *client)
-{
- ;
-}
-
-static void
-egg_sm_client_class_init (EggSMClientClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- g_type_class_add_private (klass, sizeof (EggSMClientPrivate));
-
- /**
- * EggSMClient::save_state:
- * @client: the client
- * @state_file: a #GKeyFile to save state information into
- *
- * Emitted when the session manager has requested that the
- * application save information about its current state. The
- * application should save its state into @state_file, and then the
- * session manager may then restart the application in a future
- * session and tell it to initialize itself from that state.
- *
- * You should not save any data into @state_file's "start group"
- * (ie, the %NULL group). Instead, applications should save their
- * data into groups with names that start with the application name,
- * and libraries that connect to this signal should save their data
- * into groups with names that start with the library name.
- *
- * Alternatively, rather than (or in addition to) using @state_file,
- * the application can save its state by calling
- * egg_sm_client_set_restart_command() during the processing of this
- * signal (eg, to include a list of files to open).
- **/
- signals[SAVE_STATE] =
- g_signal_new ("save_state",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (EggSMClientClass, save_state),
- NULL, NULL,
- g_cclosure_marshal_VOID__POINTER,
- G_TYPE_NONE,
- 1, G_TYPE_POINTER);
-
- /**
- * EggSMClient::quit_requested:
- * @client: the client
- *
- * Emitted when the session manager requests that the application
- * exit (generally because the user is logging out). The application
- * should decide whether or not it is willing to quit (perhaps after
- * asking the user what to do with documents that have unsaved
- * changes) and then call egg_sm_client_will_quit(), passing %TRUE
- * or %FALSE to give its answer to the session manager. (It does not
- * need to give an answer before returning from the signal handler;
- * it can interact with the user asynchronously and then give its
- * answer later on.) If the application does not connect to this
- * signal, then #EggSMClient will automatically return %TRUE on its
- * behalf.
- *
- * The application should not save its session state as part of
- * handling this signal; if the user has requested that the session
- * be saved when logging out, then ::save_state will be emitted
- * separately.
- *
- * If the application agrees to quit, it should then wait for either
- * the ::quit_cancelled or ::quit signals to be emitted.
- **/
- signals[QUIT_REQUESTED] =
- g_signal_new ("quit_requested",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (EggSMClientClass, quit_requested),
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE,
- 0);
-
- /**
- * EggSMClient::quit_cancelled:
- * @client: the client
- *
- * Emitted when the session manager decides to cancel a logout after
- * the application has already agreed to quit. After receiving this
- * signal, the application can go back to what it was doing before
- * receiving the ::quit_requested signal.
- **/
- signals[QUIT_CANCELLED] =
- g_signal_new ("quit_cancelled",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (EggSMClientClass, quit_cancelled),
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE,
- 0);
-
- /**
- * EggSMClient::quit:
- * @client: the client
- *
- * Emitted when the session manager wants the application to quit
- * (generally because the user is logging out). The application
- * should exit as soon as possible after receiving this signal; if
- * it does not, the session manager may choose to forcibly kill it.
- *
- * Normally a GUI application would only be sent a ::quit if it
- * agreed to quit in response to a ::quit_requested signal. However,
- * this is not guaranteed; in some situations the session manager
- * may decide to end the session without giving applications a
- * chance to object.
- **/
- signals[QUIT] =
- g_signal_new ("quit",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (EggSMClientClass, quit),
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE,
- 0);
-}
-
-static gboolean sm_client_disable = FALSE;
-static char *sm_client_state_file = NULL;
-static char *sm_client_id = NULL;
-static char *sm_config_prefix = NULL;
-
-static gboolean
-sm_client_post_parse_func (GOptionContext *context,
- GOptionGroup *group,
- gpointer data,
- GError **error)
-{
- EggSMClient *client = egg_sm_client_get ();
-
- if (sm_client_id == NULL)
- {
- const gchar *desktop_autostart_id;
-
- desktop_autostart_id = g_getenv ("DESKTOP_AUTOSTART_ID");
-
- if (desktop_autostart_id != NULL)
- sm_client_id = g_strdup (desktop_autostart_id);
- }
-
- /* Unset DESKTOP_AUTOSTART_ID in order to avoid child processes to
- * use the same client id. */
- g_unsetenv ("DESKTOP_AUTOSTART_ID");
-
- if (EGG_SM_CLIENT_GET_CLASS (client)->startup)
- EGG_SM_CLIENT_GET_CLASS (client)->startup (client, sm_client_id);
- return TRUE;
-}
-
-/**
- * egg_sm_client_get_option_group:
- *
- * Creates a %GOptionGroup containing the session-management-related
- * options. You should add this group to the application's
- * %GOptionContext if you want to use #EggSMClient.
- *
- * Return value: the %GOptionGroup
- **/
-GOptionGroup *
-egg_sm_client_get_option_group (void)
-{
- const GOptionEntry entries[] = {
- { "sm-client-disable", 0, 0,
- G_OPTION_ARG_NONE, &sm_client_disable,
- N_("Disable connection to session manager"), NULL },
- { "sm-client-state-file", 0, 0,
- G_OPTION_ARG_FILENAME, &sm_client_state_file,
- N_("Specify file containing saved configuration"), N_("FILE") },
- { "sm-client-id", 0, 0,
- G_OPTION_ARG_STRING, &sm_client_id,
- N_("Specify session management ID"), N_("ID") },
- /* MateClient compatibility option */
- { "sm-disable", 0, G_OPTION_FLAG_HIDDEN,
- G_OPTION_ARG_NONE, &sm_client_disable,
- NULL, NULL },
- /* MateClient compatibility option. This is a dummy option that only
- * exists so that sessions saved by apps with MateClient can be restored
- * later when they've switched to EggSMClient. See bug #575308.
- */
- { "sm-config-prefix", 0, G_OPTION_FLAG_HIDDEN,
- G_OPTION_ARG_STRING, &sm_config_prefix,
- NULL, NULL },
- { NULL }
- };
- GOptionGroup *group;
-
- /* Use our own debug handler for the "EggSMClient" domain. */
- g_log_set_handler (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG,
- egg_sm_client_debug_handler, NULL);
-
- group = g_option_group_new ("sm-client",
- _("Session management options:"),
- _("Show session management options"),
- NULL, NULL);
- g_option_group_add_entries (group, entries);
- g_option_group_set_parse_hooks (group, NULL, sm_client_post_parse_func);
-
- return group;
-}
-
-/**
- * egg_sm_client_set_mode:
- * @mode: an #EggSMClient mode
- *
- * Sets the "mode" of #EggSMClient as follows:
- *
- * %EGG_SM_CLIENT_MODE_DISABLED: Session management is completely
- * disabled. The application will not even connect to the session
- * manager. (egg_sm_client_get() will still return an #EggSMClient,
- * but it will just be a dummy object.)
- *
- * %EGG_SM_CLIENT_MODE_NO_RESTART: The application will connect to
- * the session manager (and thus will receive notification when the
- * user is logging out, etc), but will request to not be
- * automatically restarted with saved state in future sessions.
- *
- * %EGG_SM_CLIENT_MODE_NORMAL: The default. #EggSMCLient will
- * function normally.
- *
- * This must be called before the application's main loop begins.
- **/
-void
-egg_sm_client_set_mode (EggSMClientMode mode)
-{
- global_client_mode = mode;
-}
-
-/**
- * egg_sm_client_get_mode:
- *
- * Gets the global #EggSMClientMode. See egg_sm_client_set_mode()
- * for details.
- *
- * Return value: the global #EggSMClientMode
- **/
-EggSMClientMode
-egg_sm_client_get_mode (void)
-{
- return global_client_mode;
-}
-
-/**
- * egg_sm_client_get:
- *
- * Returns the master #EggSMClient for the application.
- *
- * On platforms that support saved sessions (ie, POSIX/X11), the
- * application will only request to be restarted by the session
- * manager if you call egg_set_desktop_file() to set an application
- * desktop file. In particular, if the desktop file contains the key
- * "X
- *
- * Return value: the master #EggSMClient.
- **/
-EggSMClient *
-egg_sm_client_get (void)
-{
- if (!global_client)
- {
- if (global_client_mode != EGG_SM_CLIENT_MODE_DISABLED &&
- !sm_client_disable)
- {
-#if defined (GDK_WINDOWING_WIN32)
- global_client = egg_sm_client_win32_new ();
-#elif defined (GDK_WINDOWING_QUARTZ)
- global_client = egg_sm_client_osx_new ();
-#else
- /* If both D-Bus and XSMP are compiled in, try XSMP first
- * (since it supports state saving) and fall back to D-Bus
- * if XSMP isn't available.
- */
-# ifdef EGG_SM_CLIENT_BACKEND_XSMP
- global_client = egg_sm_client_xsmp_new ();
-# endif
-# ifdef EGG_SM_CLIENT_BACKEND_DBUS
- if (!global_client)
- global_client = egg_sm_client_dbus_new ();
-# endif
-#endif
- }
-
- /* Fallback: create a dummy client, so that callers don't have
- * to worry about a %NULL return value.
- */
- if (!global_client)
- global_client = g_object_new (EGG_TYPE_SM_CLIENT, NULL);
- }
-
- return global_client;
-}
-
-/**
- * egg_sm_client_is_resumed:
- * @client: the client
- *
- * Checks whether or not the current session has been resumed from
- * a previous saved session. If so, the application should call
- * egg_sm_client_get_state_file() and restore its state from the
- * returned #GKeyFile.
- *
- * Return value: %TRUE if the session has been resumed
- **/
-gboolean
-egg_sm_client_is_resumed (EggSMClient *client)
-{
- g_return_val_if_fail (client == global_client, FALSE);
-
- return sm_client_state_file != NULL;
-}
-
-/**
- * egg_sm_client_get_state_file:
- * @client: the client
- *
- * If the application was resumed by the session manager, this will
- * return the #GKeyFile containing its state from the previous
- * session.
- *
- * Note that other libraries and #EggSMClient itself may also store
- * state in the key file, so if you call egg_sm_client_get_groups(),
- * on it, the return value will likely include groups that you did not
- * put there yourself. (It is also not guaranteed that the first
- * group created by the application will still be the "start group"
- * when it is resumed.)
- *
- * Return value: the #GKeyFile containing the application's earlier
- * state, or %NULL on error. You should not free this key file; it
- * is owned by @client.
- **/
-GKeyFile *
-egg_sm_client_get_state_file (EggSMClient *client)
-{
- EggSMClientPrivate *priv = EGG_SM_CLIENT_GET_PRIVATE (client);
- char *state_file_path;
- GError *err = NULL;
-
- g_return_val_if_fail (client == global_client, NULL);
-
- if (!sm_client_state_file)
- return NULL;
- if (priv->state_file)
- return priv->state_file;
-
- if (!strncmp (sm_client_state_file, "file://", 7))
- state_file_path = g_filename_from_uri (sm_client_state_file, NULL, NULL);
- else
- state_file_path = g_strdup (sm_client_state_file);
-
- priv->state_file = g_key_file_new ();
- if (!g_key_file_load_from_file (priv->state_file, state_file_path, 0, &err))
- {
- g_warning ("Could not load SM state file '%s': %s",
- sm_client_state_file, err->message);
- g_clear_error (&err);
- g_key_file_free (priv->state_file);
- priv->state_file = NULL;
- }
-
- g_free (state_file_path);
- return priv->state_file;
-}
-
-/**
- * egg_sm_client_set_restart_command:
- * @client: the client
- * @argc: the length of @argv
- * @argv: argument vector
- *
- * Sets the command used to restart @client if it does not have a
- * .desktop file that can be used to find its restart command.
- *
- * This can also be used when handling the ::save_state signal, to
- * save the current state via an updated command line. (Eg, providing
- * a list of filenames to open when the application is resumed.)
- **/
-void
-egg_sm_client_set_restart_command (EggSMClient *client,
- int argc,
- const char **argv)
-{
- g_return_if_fail (EGG_IS_SM_CLIENT (client));
-
- if (EGG_SM_CLIENT_GET_CLASS (client)->set_restart_command)
- EGG_SM_CLIENT_GET_CLASS (client)->set_restart_command (client, argc, argv);
-}
-
-/**
- * egg_sm_client_will_quit:
- * @client: the client
- * @will_quit: whether or not the application is willing to quit
- *
- * This MUST be called in response to the ::quit_requested signal, to
- * indicate whether or not the application is willing to quit. The
- * application may call it either directly from the signal handler, or
- * at some later point (eg, after asynchronously interacting with the
- * user).
- *
- * If the application does not connect to ::quit_requested,
- * #EggSMClient will call this method on its behalf (passing %TRUE
- * for @will_quit).
- *
- * After calling this method, the application should wait to receive
- * either ::quit_cancelled or ::quit.
- **/
-void
-egg_sm_client_will_quit (EggSMClient *client,
- gboolean will_quit)
-{
- g_return_if_fail (EGG_IS_SM_CLIENT (client));
-
- if (EGG_SM_CLIENT_GET_CLASS (client)->will_quit)
- EGG_SM_CLIENT_GET_CLASS (client)->will_quit (client, will_quit);
-}
-
-/**
- * egg_sm_client_end_session:
- * @style: a hint at how to end the session
- * @request_confirmation: whether or not the user should get a chance
- * to confirm the action
- *
- * Requests that the session manager end the current session. @style
- * indicates how the session should be ended, and
- * @request_confirmation indicates whether or not the user should be
- * given a chance to confirm the logout/reboot/shutdown. Both of these
- * flags are merely hints though; the session manager may choose to
- * ignore them.
- *
- * Return value: %TRUE if the request was sent; %FALSE if it could not
- * be (eg, because it could not connect to the session manager).
- **/
-gboolean
-egg_sm_client_end_session (EggSMClientEndStyle style,
- gboolean request_confirmation)
-{
- EggSMClient *client = egg_sm_client_get ();
-
- g_return_val_if_fail (EGG_IS_SM_CLIENT (client), FALSE);
-
- if (EGG_SM_CLIENT_GET_CLASS (client)->end_session)
- {
- return EGG_SM_CLIENT_GET_CLASS (client)->end_session (client, style,
- request_confirmation);
- }
- else
- return FALSE;
-}
-
-/* Signal-emitting callbacks from platform-specific code */
-
-GKeyFile *
-egg_sm_client_save_state (EggSMClient *client)
-{
- GKeyFile *state_file;
- char *group;
-
- g_return_val_if_fail (client == global_client, NULL);
-
- state_file = g_key_file_new ();
-
- g_debug ("Emitting save_state");
- g_signal_emit (client, signals[SAVE_STATE], 0, state_file);
- g_debug ("Done emitting save_state");
-
- group = g_key_file_get_start_group (state_file);
- if (group)
- {
- g_free (group);
- return state_file;
- }
- else
- {
- g_key_file_free (state_file);
- return NULL;
- }
-}
-
-void
-egg_sm_client_quit_requested (EggSMClient *client)
-{
- g_return_if_fail (client == global_client);
-
- if (!g_signal_has_handler_pending (client, signals[QUIT_REQUESTED], 0, FALSE))
- {
- g_debug ("Not emitting quit_requested because no one is listening");
- egg_sm_client_will_quit (client, TRUE);
- return;
- }
-
- g_debug ("Emitting quit_requested");
- g_signal_emit (client, signals[QUIT_REQUESTED], 0);
- g_debug ("Done emitting quit_requested");
-}
-
-void
-egg_sm_client_quit_cancelled (EggSMClient *client)
-{
- g_return_if_fail (client == global_client);
-
- g_debug ("Emitting quit_cancelled");
- g_signal_emit (client, signals[QUIT_CANCELLED], 0);
- g_debug ("Done emitting quit_cancelled");
-}
-
-void
-egg_sm_client_quit (EggSMClient *client)
-{
- g_return_if_fail (client == global_client);
-
- g_debug ("Emitting quit");
- g_signal_emit (client, signals[QUIT], 0);
- g_debug ("Done emitting quit");
-
- /* FIXME: should we just call gtk_main_quit() here? */
-}
-
-static void
-egg_sm_client_debug_handler (const char *log_domain,
- GLogLevelFlags log_level,
- const char *message,
- gpointer user_data)
-{
- static int debug = -1;
-
- if (debug < 0)
- debug = (g_getenv ("EGG_SM_CLIENT_DEBUG") != NULL);
-
- if (debug)
- g_log_default_handler (log_domain, log_level, message, NULL);
-}
diff --git a/gedit/smclient/eggsmclient.h b/gedit/smclient/eggsmclient.h
deleted file mode 100755
index e620b754..00000000
--- a/gedit/smclient/eggsmclient.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/* eggsmclient.h
- * Copyright (C) 2007 Novell, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#ifndef __EGG_SM_CLIENT_H__
-#define __EGG_SM_CLIENT_H__
-
-#include <glib-object.h>
-
-G_BEGIN_DECLS
-
-#define EGG_TYPE_SM_CLIENT (egg_sm_client_get_type ())
-#define EGG_SM_CLIENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EGG_TYPE_SM_CLIENT, EggSMClient))
-#define EGG_SM_CLIENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EGG_TYPE_SM_CLIENT, EggSMClientClass))
-#define EGG_IS_SM_CLIENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EGG_TYPE_SM_CLIENT))
-#define EGG_IS_SM_CLIENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EGG_TYPE_SM_CLIENT))
-#define EGG_SM_CLIENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EGG_TYPE_SM_CLIENT, EggSMClientClass))
-
-typedef struct _EggSMClient EggSMClient;
-typedef struct _EggSMClientClass EggSMClientClass;
-typedef struct _EggSMClientPrivate EggSMClientPrivate;
-
-typedef enum {
- EGG_SM_CLIENT_END_SESSION_DEFAULT,
- EGG_SM_CLIENT_LOGOUT,
- EGG_SM_CLIENT_REBOOT,
- EGG_SM_CLIENT_SHUTDOWN
-} EggSMClientEndStyle;
-
-typedef enum {
- EGG_SM_CLIENT_MODE_DISABLED,
- EGG_SM_CLIENT_MODE_NO_RESTART,
- EGG_SM_CLIENT_MODE_NORMAL
-} EggSMClientMode;
-
-struct _EggSMClient
-{
- GObject parent;
-
-};
-
-struct _EggSMClientClass
-{
- GObjectClass parent_class;
-
- /* signals */
- void (*save_state) (EggSMClient *client,
- GKeyFile *state_file);
-
- void (*quit_requested) (EggSMClient *client);
- void (*quit_cancelled) (EggSMClient *client);
- void (*quit) (EggSMClient *client);
-
- /* virtual methods */
- void (*startup) (EggSMClient *client,
- const char *client_id);
- void (*set_restart_command) (EggSMClient *client,
- int argc,
- const char **argv);
- void (*will_quit) (EggSMClient *client,
- gboolean will_quit);
- gboolean (*end_session) (EggSMClient *client,
- EggSMClientEndStyle style,
- gboolean request_confirmation);
-
- /* Padding for future expansion */
- void (*_egg_reserved1) (void);
- void (*_egg_reserved2) (void);
- void (*_egg_reserved3) (void);
- void (*_egg_reserved4) (void);
-};
-
-GType egg_sm_client_get_type (void) G_GNUC_CONST;
-
-GOptionGroup *egg_sm_client_get_option_group (void);
-
-/* Initialization */
-void egg_sm_client_set_mode (EggSMClientMode mode);
-EggSMClientMode egg_sm_client_get_mode (void);
-EggSMClient *egg_sm_client_get (void);
-
-/* Resuming a saved session */
-gboolean egg_sm_client_is_resumed (EggSMClient *client);
-GKeyFile *egg_sm_client_get_state_file (EggSMClient *client);
-
-/* Alternate means of saving state */
-void egg_sm_client_set_restart_command (EggSMClient *client,
- int argc,
- const char **argv);
-
-/* Handling "quit_requested" signal */
-void egg_sm_client_will_quit (EggSMClient *client,
- gboolean will_quit);
-
-/* Initiate a logout/reboot/shutdown */
-gboolean egg_sm_client_end_session (EggSMClientEndStyle style,
- gboolean request_confirmation);
-
-G_END_DECLS
-
-
-#endif /* __EGG_SM_CLIENT_H__ */