From 032d69ae89332e79977b9c4b6322fddfb8627aba Mon Sep 17 00:00:00 2001 From: Michael Terry Date: Sun, 14 Apr 2013 17:17:14 +0900 Subject: [PATCH] Update paste sensitivity whenever clipboard changes - fixes #17 (originally reported and fixed here: https://bugzilla.gnome.org/show_bug.cgi?id=600876) --- src/terminal-window.c | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/src/terminal-window.c b/src/terminal-window.c index b33e33c..92276a5 100644 --- a/src/terminal-window.c +++ b/src/terminal-window.c @@ -1033,10 +1033,8 @@ update_edit_menu_cb (GtkClipboard *clipboard, } static void -edit_menu_activate_callback (GtkMenuItem *menuitem, - gpointer user_data) +update_edit_menu(TerminalWindow *window) { - TerminalWindow *window = (TerminalWindow *) user_data; GtkClipboard *clipboard; clipboard = gtk_widget_get_clipboard (GTK_WIDGET (window), GDK_SELECTION_CLIPBOARD); @@ -2087,6 +2085,7 @@ terminal_window_init (TerminalWindow *window) GError *error; GtkWindowGroup *window_group; GtkAccelGroup *accel_group; + GtkClipboard *clipboard; priv = window->priv = G_TYPE_INSTANCE_GET_PRIVATE (window, TERMINAL_TYPE_WINDOW, TerminalWindowPrivate); @@ -2160,16 +2159,10 @@ terminal_window_init (TerminalWindow *window) gtk_ui_manager_insert_action_group (manager, action_group, 0); g_object_unref (action_group); - action = gtk_action_group_get_action (action_group, "Edit"); - g_signal_connect (action, "activate", - G_CALLBACK (edit_menu_activate_callback), window); - - /* Set this action invisible so the Edit menu doesn't flash the first - * time it's shown and there's no text/uri-list on the clipboard. - */ - action = gtk_action_group_get_action (priv->action_group, "EditPasteURIPaths"); - gtk_action_set_visible (action, FALSE); - + clipboard = gtk_widget_get_clipboard (GTK_WIDGET (window), GDK_SELECTION_CLIPBOARD); + g_signal_connect_swapped (clipboard, "owner-change", + G_CALLBACK (update_edit_menu), window); + update_edit_menu (window); /* Idem for this action, since the window is not fullscreen. */ action = gtk_action_group_get_action (priv->action_group, "PopupLeaveFullscreen"); gtk_action_set_visible (action, FALSE); @@ -2260,6 +2253,7 @@ terminal_window_dispose (GObject *object) TerminalWindowPrivate *priv = window->priv; TerminalApp *app; GdkScreen *screen; + GtkClipboard *clipboard; remove_popup_info (window); @@ -2283,6 +2277,10 @@ terminal_window_dispose (GObject *object) g_signal_handlers_disconnect_by_func (app, G_CALLBACK (terminal_window_encoding_list_changed_cb), window); + clipboard = gtk_widget_get_clipboard (GTK_WIDGET (window), GDK_SELECTION_CLIPBOARD); + g_signal_handlers_disconnect_by_func (clipboard, + G_CALLBACK (update_edit_menu), + window); screen = gtk_widget_get_screen (GTK_WIDGET (object)); if (screen) -- cgit v1.2.1 From 97b740eb097cb1111288270f176a737e8bb49cac Mon Sep 17 00:00:00 2001 From: Stephen Krauth Date: Sat, 27 Apr 2013 16:09:59 -0400 Subject: Add previous/next profile keyboard shortcuts, menu items --- src/org.mate.terminal.gschema.xml.in | 10 ++++++ src/terminal-accels.c | 12 +++++++ src/terminal-window.c | 69 +++++++++++++++++++++++++++++++++++- src/terminal.xml | 7 +++- 4 files changed, 96 insertions(+), 2 deletions(-) diff --git a/src/org.mate.terminal.gschema.xml.in b/src/org.mate.terminal.gschema.xml.in index 4d7beae..4eb877d 100644 --- a/src/org.mate.terminal.gschema.xml.in +++ b/src/org.mate.terminal.gschema.xml.in @@ -345,6 +345,16 @@ Keyboard shortcut to switch to the next tab Keyboard shortcut key to switch to the next tab. Expressed as a string in the same format used for GTK+ resource files. If you set the option to the special string "disabled", then there will be no keyboard shortcut for this action. + + '<Alt>Page_Up' + Keyboard shortcut to switch to the previous profile + Keyboard shortcut key to switch to the previous profile. Expressed as a string in the same format used for GTK+ resource files. If you set the option to the special string "disabled", then there will be no keyboard shortcut for this action. + + + '<Alt>Page_Down' + Keyboard shortcut to switch to the next profile + Keyboard shortcut key to switch to the next profile. Expressed as a string in the same format used for GTK+ resource files. If you set the option to the special string "disabled", then there will be no keyboard shortcut for this action. + '<Ctrl><Shift>Page_Up' Accelerator to move the current tab to the left. diff --git a/src/terminal-accels.c b/src/terminal-accels.c index 44b003b..4516be6 100644 --- a/src/terminal-accels.c +++ b/src/terminal-accels.c @@ -59,6 +59,8 @@ #define ACCEL_PATH_FULL_SCREEN ACCEL_PATH_ROOT "ViewFullscreen" #define ACCEL_PATH_RESET ACCEL_PATH_ROOT "TerminalReset" #define ACCEL_PATH_RESET_AND_CLEAR ACCEL_PATH_ROOT "TerminalResetClear" +#define ACCEL_PATH_PREV_PROFILE ACCEL_PATH_ROOT "ProfilePrevious" +#define ACCEL_PATH_NEXT_PROFILE ACCEL_PATH_ROOT "ProfileNext" #define ACCEL_PATH_PREV_TAB ACCEL_PATH_ROOT "TabsPrevious" #define ACCEL_PATH_NEXT_TAB ACCEL_PATH_ROOT "TabsNext" #define ACCEL_PATH_SET_TERMINAL_TITLE ACCEL_PATH_ROOT "TerminalSetTitle" @@ -82,8 +84,10 @@ #define KEY_NEW_PROFILE "new-profile" #define KEY_NEW_TAB "new-tab" #define KEY_NEW_WINDOW "new-window" +#define KEY_NEXT_PROFILE "next-profile" #define KEY_NEXT_TAB "next-tab" #define KEY_PASTE "paste" +#define KEY_PREV_PROFILE "prev-profile" #define KEY_PREV_TAB "prev-tab" #define KEY_RESET_AND_CLEAR "reset-and-clear" #define KEY_RESET "reset" @@ -210,6 +214,14 @@ static KeyEntry terminal_entries[] = N_("Reset and Clear"), KEY_RESET_AND_CLEAR, ACCEL_PATH_RESET_AND_CLEAR, 0, 0, NULL, FALSE, TRUE }, + { + N_("Switch to Previous Profile"), + KEY_PREV_PROFILE, ACCEL_PATH_PREV_PROFILE, GDK_MOD1_MASK, GDK_Page_Up, NULL, FALSE, TRUE + }, + { + N_("Switch to Next Profile"), + KEY_NEXT_PROFILE, ACCEL_PATH_NEXT_PROFILE, GDK_MOD1_MASK, GDK_Page_Down, NULL, FALSE, TRUE + }, }; static KeyEntry tabs_entries[] = diff --git a/src/terminal-window.c b/src/terminal-window.c index 92276a5..f8ad3c3 100644 --- a/src/terminal-window.c +++ b/src/terminal-window.c @@ -98,7 +98,7 @@ struct _TerminalWindowPrivate #define SET_ENCODING_UI_PATH "/menubar/Terminal/TerminalSetEncoding/EncodingsPH" #define SET_ENCODING_ACTION_NAME_PREFIX "TerminalSetEncoding" -#define PROFILES_UI_PATH "/menubar/Terminal/TerminalProfiles" +#define PROFILES_UI_PATH "/menubar/Terminal/TerminalProfiles/ProfilesPH" #define PROFILES_POPUP_UI_PATH "/Popup/PopupTerminalProfiles/ProfilesPH" #define SIZE_TO_UI_PATH "/menubar/Terminal/TerminalSizeToPH" @@ -197,6 +197,8 @@ static void search_find_prev_callback (GtkAction *action, TerminalWindow *window); static void search_clear_highlight_callback (GtkAction *action, TerminalWindow *window); +static void terminal_next_or_previous_profile_cb (GtkAction *action, + TerminalWindow *window); static void terminal_set_title_callback (GtkAction *action, TerminalWindow *window); static void terminal_add_encoding_callback (GtkAction *action, @@ -1922,6 +1924,16 @@ terminal_window_init (TerminalWindow *window) /* Terminal menu */ { "TerminalProfiles", NULL, N_("Change _Profile") }, + { + "ProfilePrevious", NULL, N_("_Previous Profile"), "Page_Up", + NULL, + G_CALLBACK (terminal_next_or_previous_profile_cb) + }, + { + "ProfileNext", NULL, N_("_Next Profile"), "Page_Down", + NULL, + G_CALLBACK (terminal_next_or_previous_profile_cb) + }, { "TerminalSetTitle", NULL, N_("_Set Titleā€¦"), NULL, NULL, @@ -3776,6 +3788,61 @@ search_clear_highlight_callback (GtkAction *action, vte_terminal_search_set_gregex (VTE_TERMINAL (window->priv->active_screen), NULL); } +static void +terminal_next_or_previous_profile_cb (GtkAction *action, + TerminalWindow *window) +{ + TerminalWindowPrivate *priv = window->priv; + TerminalProfile *active_profile, *new_profile; + GList *profiles, *p; + + const char *name; + guint backwards = 0; + + name = gtk_action_get_name (action); + if (strcmp (name, "ProfilePrevious") == 0) + { + backwards = 1; + } + + profiles = terminal_app_get_profile_list (terminal_app_get ()); + if (profiles == NULL) + return; + + if (priv->active_screen) + active_profile = terminal_screen_get_profile (priv->active_screen); + else + return; + + for (p = profiles; p != NULL; p = p->next) + { + TerminalProfile *profile = (TerminalProfile *) p->data; + if (profile == active_profile) + { + if (backwards) { + p = p->prev; + if (p == NULL) + p = g_list_last (profiles); + new_profile = p->data; + break; + } + else + { + p = p->next; + if (p == NULL) + p = g_list_first (profiles); + new_profile = p->data; + break; + } + } + } + + if (new_profile) + terminal_screen_set_profile (priv->active_screen, new_profile); + + g_list_free (profiles); +} + static void terminal_set_title_dialog_response_cb (GtkWidget *dialog, int response, diff --git a/src/terminal.xml b/src/terminal.xml index 3c9cbed..263dce4 100644 --- a/src/terminal.xml +++ b/src/terminal.xml @@ -48,7 +48,12 @@ --> - + + + + + + -- cgit v1.2.1 From a7478138029e077b04bbcf63fb9dbe7ced890b25 Mon Sep 17 00:00:00 2001 From: Alexander von Gluck IV Date: Tue, 24 Sep 2013 18:01:21 -0500 Subject: ay_to_strv: Prevent dereferencing a NULL pointer. * clang static analysis shows that ay_to_strv is called with argc set to NULL. This can cause ay_to_strv to dereference the pointer in a failure situation. --- src/terminal.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/terminal.c b/src/terminal.c index 7434229..82af964 100644 --- a/src/terminal.c +++ b/src/terminal.c @@ -82,7 +82,8 @@ ay_to_strv (GVariant *variant, data = g_variant_get_fixed_array (variant, &data_len, sizeof (char)); if (data_len == 0 || data_len > G_MAXSSIZE) { - *argc = 0; + if (argc != NULL) + *argc = 0; return NULL; } -- cgit v1.2.1 From b26b432e3e867e7f3620b304fccf5c28a7ec989d Mon Sep 17 00:00:00 2001 From: Martin Wimpress Date: Wed, 13 Nov 2013 11:59:05 +0000 Subject: Remove distro folder. --- distro/archlinux/PKGBUILD | 31 ------------------------------- distro/archlinux/mate-terminal.install | 17 ----------------- 2 files changed, 48 deletions(-) delete mode 100644 distro/archlinux/PKGBUILD delete mode 100644 distro/archlinux/mate-terminal.install diff --git a/distro/archlinux/PKGBUILD b/distro/archlinux/PKGBUILD deleted file mode 100644 index f1ec35a..0000000 --- a/distro/archlinux/PKGBUILD +++ /dev/null @@ -1,31 +0,0 @@ -pkgname=mate-terminal -pkgver=1.1.0 -pkgrel=1 -pkgdesc="The MATE Terminal Emulator" -arch=('i686' 'x86_64') -license=('GPL') -depends=('mate-conf' 'vte' 'libmate' 'libsm') -makedepends=('pkgconfig' 'mate-doc-utils' 'intltool') -options=('!emptydirs' '!libtool') -install=mate-terminal.install -url="http://matsusoft.com.ar/projects" -groups=('mate-extras') -source=() -sha256sums=() - -build() { - cd "${srcdir}/../../../" - ./autogen.sh --prefix=/usr --sysconfdir=/etc --disable-static \ - --localstatedir=/var --disable-scrollkeeper --with-gnu-ld || return 1 - make || return 1 -} - -package() { - cd "${srcdir}/../../../" - - make MATECONF_DISABLE_MAKEFILE_SCHEMA_INSTALL=1 DESTDIR="${pkgdir}" install || return 1 - - install -m755 -d "${pkgdir}/usr/share/mateconf/schemas" - mateconf-merge-schema "${pkgdir}/usr/share/mateconf/schemas/${pkgname}.schemas" --domain ${pkgname} ${pkgdir}/etc/mateconf/schemas/*.schemas || return 1 - rm -f ${pkgdir}/etc/mateconf/schemas/*.schemas -} diff --git a/distro/archlinux/mate-terminal.install b/distro/archlinux/mate-terminal.install deleted file mode 100644 index 60f573a..0000000 --- a/distro/archlinux/mate-terminal.install +++ /dev/null @@ -1,17 +0,0 @@ -pkgname=mate-terminal - -post_install() { - usr/sbin/mateconfpkg --install ${pkgname} -} - -pre_upgrade() { - pre_remove $1 -} - -post_upgrade() { - post_install $1 -} - -pre_remove() { - usr/sbin/mateconfpkg --uninstall ${pkgname} -} -- cgit v1.2.1