This commit is contained in:
rongyouli 2023-08-29 18:27:24 +08:00
parent 8a92ceb3a8
commit f994ef342b
7 changed files with 154 additions and 167 deletions

9
debian/changelog vendored
View File

@ -1,3 +1,12 @@
mate-terminal (1.24.0-ok4.1) yangtze; urgency=medium
* BUG号:#I5JPQD点击菜单栏后最小化菜单栏并未消失窗口拖动后也有此问题
* 任务号:无
* 其他改动说明:无
* 其他改动影响域:无
-- rongyouli <rongyouli@kylinos.cn> Tue, 29 Aug 2023 18:24:04 +0800
mate-terminal (1.24.0-ok4) yangtze; urgency=medium mate-terminal (1.24.0-ok4) yangtze; urgency=medium
* BUG号:131248 【wayland】【终端】fn+f11进行全屏后再次fn+f11取消全屏不能恢复原来大小; * BUG号:131248 【wayland】【终端】fn+f11进行全屏后再次fn+f11取消全屏不能恢复原来大小;

View File

@ -534,7 +534,7 @@ init_color_scheme_menu (GtkWidget *widget)
GtkCellRenderer *renderer; GtkCellRenderer *renderer;
GtkTreeIter iter; GtkTreeIter iter;
GtkListStore *store; GtkListStore *store;
int i; gsize i;
store = gtk_list_store_new (1, G_TYPE_STRING); store = gtk_list_store_new (1, G_TYPE_STRING);
for (i = 0; i < G_N_ELEMENTS (color_schemes); ++i) for (i = 0; i < G_N_ELEMENTS (color_schemes); ++i)
@ -654,6 +654,64 @@ terminal_profile_editor_focus_widget (GtkWidget *editor,
gtk_widget_grab_focus (widget); gtk_widget_grab_focus (widget);
} }
static gboolean
on_profile_editor_notebook_scroll_event (GtkWidget *widget,
GdkEventScroll *event)
{
GtkNotebook *notebook = GTK_NOTEBOOK (widget);
GtkWidget *child, *event_widget, *action_widget;
child = gtk_notebook_get_nth_page (notebook, gtk_notebook_get_current_page (notebook));
if (child == NULL)
return FALSE;
event_widget = gtk_get_event_widget ((GdkEvent*) event);
/* Ignore scroll events from the content of the page */
if (event_widget == NULL || event_widget == child || gtk_widget_is_ancestor (event_widget, child))
return FALSE;
/* And also from the action widgets */
action_widget = gtk_notebook_get_action_widget (notebook, GTK_PACK_START);
if (event_widget == action_widget || (action_widget != NULL && gtk_widget_is_ancestor (event_widget, action_widget)))
return FALSE;
action_widget = gtk_notebook_get_action_widget (notebook, GTK_PACK_END);
if (event_widget == action_widget || (action_widget != NULL && gtk_widget_is_ancestor (event_widget, action_widget)))
return FALSE;
switch (event->direction) {
case GDK_SCROLL_RIGHT:
case GDK_SCROLL_DOWN:
gtk_notebook_next_page (notebook);
break;
case GDK_SCROLL_LEFT:
case GDK_SCROLL_UP:
gtk_notebook_prev_page (notebook);
break;
case GDK_SCROLL_SMOOTH:
switch (gtk_notebook_get_tab_pos (notebook)) {
case GTK_POS_LEFT:
case GTK_POS_RIGHT:
if (event->delta_y > 0)
gtk_notebook_next_page (notebook);
else if (event->delta_y < 0)
gtk_notebook_prev_page (notebook);
break;
case GTK_POS_TOP:
case GTK_POS_BOTTOM:
if (event->delta_x > 0)
gtk_notebook_next_page (notebook);
else if (event->delta_x < 0)
gtk_notebook_prev_page (notebook);
break;
}
break;
}
return TRUE;
}
/** /**
* terminal_profile_edit: * terminal_profile_edit:
* @profile: a #TerminalProfile * @profile: a #TerminalProfile
@ -849,6 +907,13 @@ terminal_profile_edit (TerminalProfile *profile,
terminal_profile_editor_focus_widget (editor, widget_name); terminal_profile_editor_focus_widget (editor, widget_name);
w = GTK_WIDGET (gtk_builder_get_object (builder, "profile-editor-notebook"));
gtk_widget_add_events (w, GDK_SCROLL_MASK);
g_signal_connect (w,
"scroll-event",
G_CALLBACK (on_profile_editor_notebook_scroll_event),
NULL);
gtk_window_set_transient_for (GTK_WINDOW (editor), gtk_window_set_transient_for (GTK_WINDOW (editor),
GTK_WINDOW (transient_parent)); GTK_WINDOW (transient_parent));
gtk_window_present (GTK_WINDOW (editor)); gtk_window_present (GTK_WINDOW (editor));

View File

@ -41,8 +41,10 @@
#include <stdlib.h> #include <stdlib.h>
#include <time.h> #include <time.h>
#ifdef HAVE_SMCLIENT
#include "eggsmclient.h" #include "eggsmclient.h"
#include "eggdesktopfile.h" #include "eggdesktopfile.h"
#endif /* HAVE_SMCLIENT */
#define FALLBACK_PROFILE_ID "default" #define FALLBACK_PROFILE_ID "default"
@ -1376,6 +1378,7 @@ terminal_app_manage_profiles (TerminalApp *app,
gtk_window_present (GTK_WINDOW (app->manage_profiles_dialog)); gtk_window_present (GTK_WINDOW (app->manage_profiles_dialog));
} }
#ifdef HAVE_SMCLIENT
static void static void
terminal_app_save_state_cb (EggSMClient *client, terminal_app_save_state_cb (EggSMClient *client,
GKeyFile *key_file, GKeyFile *key_file,
@ -1390,6 +1393,7 @@ terminal_app_client_quit_cb (EggSMClient *client,
{ {
g_signal_emit (app, signals[QUIT], 0); g_signal_emit (app, signals[QUIT], 0);
} }
#endif /* HAVE_SMCLIENT */
/* Class implementation */ /* Class implementation */
@ -1470,6 +1474,7 @@ terminal_app_init (TerminalApp *app)
terminal_accels_init (); terminal_accels_init ();
#ifdef HAVE_SMCLIENT
EggSMClient *sm_client; EggSMClient *sm_client;
char *desktop_file; char *desktop_file;
@ -1485,6 +1490,7 @@ terminal_app_init (TerminalApp *app)
G_CALLBACK (terminal_app_save_state_cb), app); G_CALLBACK (terminal_app_save_state_cb), app);
g_signal_connect (sm_client, "quit", g_signal_connect (sm_client, "quit",
G_CALLBACK (terminal_app_client_quit_cb), app); G_CALLBACK (terminal_app_client_quit_cb), app);
#endif /* HAVE_SMCLIENT */
} }
static void static void
@ -1492,11 +1498,13 @@ terminal_app_finalize (GObject *object)
{ {
TerminalApp *app = TERMINAL_APP (object); TerminalApp *app = TERMINAL_APP (object);
#ifdef HAVE_SMCLIENT
EggSMClient *sm_client; EggSMClient *sm_client;
sm_client = egg_sm_client_get (); sm_client = egg_sm_client_get ();
g_signal_handlers_disconnect_matched (sm_client, G_SIGNAL_MATCH_DATA, g_signal_handlers_disconnect_matched (sm_client, G_SIGNAL_MATCH_DATA,
0, 0, NULL, NULL, app); 0, 0, NULL, NULL, app);
#endif /* HAVE_SMCLIENT */
g_signal_handlers_disconnect_by_func (settings_global, g_signal_handlers_disconnect_by_func (settings_global,
G_CALLBACK(terminal_app_profile_list_notify_cb), G_CALLBACK(terminal_app_profile_list_notify_cb),
@ -1741,6 +1749,7 @@ terminal_app_handle_options (TerminalApp *app,
/* fall-through on success */ /* fall-through on success */
} }
#ifdef HAVE_SMCLIENT
EggSMClient *sm_client; EggSMClient *sm_client;
sm_client = egg_sm_client_get (); sm_client = egg_sm_client_get ();
@ -1754,6 +1763,7 @@ terminal_app_handle_options (TerminalApp *app,
!terminal_options_merge_config (options, key_file, SOURCE_SESSION, error)) !terminal_options_merge_config (options, key_file, SOURCE_SESSION, error))
return FALSE; return FALSE;
} }
#endif /* HAVE_SMCLIENT */
/* Make sure we open at least one window */ /* Make sure we open at least one window */
terminal_options_ensure_window (options); terminal_options_ensure_window (options);

View File

@ -248,7 +248,7 @@ terminal_encoding_is_valid (TerminalEncoding *encoding)
" input \"%s\"\n", " input \"%s\"\n",
ascii_sample); ascii_sample);
_terminal_debug_print (TERMINAL_DEBUG_ENCODINGS, _terminal_debug_print (TERMINAL_DEBUG_ENCODINGS,
" output \"%s\" bytes read %u written %u\n", " output \"%s\" bytes read %" G_GSIZE_FORMAT " written %" G_GSIZE_FORMAT "\n",
converted ? converted : "(null)", bytes_read, bytes_written); converted ? converted : "(null)", bytes_read, bytes_written);
if (error) if (error)
_terminal_debug_print (TERMINAL_DEBUG_ENCODINGS, _terminal_debug_print (TERMINAL_DEBUG_ENCODINGS,

View File

@ -1167,6 +1167,7 @@ terminal_screen_set_font (TerminalScreen *screen)
TerminalScreenPrivate *priv = screen->priv; TerminalScreenPrivate *priv = screen->priv;
TerminalProfile *profile; TerminalProfile *profile;
PangoFontDescription *desc; PangoFontDescription *desc;
int size;
profile = priv->profile; profile = priv->profile;
@ -1176,14 +1177,11 @@ terminal_screen_set_font (TerminalScreen *screen)
g_object_get (profile, TERMINAL_PROFILE_FONT, &desc, NULL); g_object_get (profile, TERMINAL_PROFILE_FONT, &desc, NULL);
g_assert (desc); g_assert (desc);
size = pango_font_description_get_size (desc);
if (pango_font_description_get_size_is_absolute (desc)) if (pango_font_description_get_size_is_absolute (desc))
pango_font_description_set_absolute_size (desc, pango_font_description_set_absolute_size (desc, priv->font_scale * size);
priv->font_scale *
pango_font_description_get_size (desc));
else else
pango_font_description_set_size (desc, pango_font_description_set_size (desc, (int)(priv->font_scale * size));
priv->font_scale *
pango_font_description_get_size (desc));
vte_terminal_set_font (VTE_TERMINAL (screen), desc); vte_terminal_set_font (VTE_TERMINAL (screen), desc);
@ -1445,7 +1443,11 @@ get_child_environment (TerminalScreen *screen,
g_hash_table_replace (env_table, g_strdup ("TERM"), g_strdup ("xterm-256color")); /* FIXME configurable later? */ g_hash_table_replace (env_table, g_strdup ("TERM"), g_strdup ("xterm-256color")); /* FIXME configurable later? */
/* FIXME: moving the tab between windows, or the window between displays will make the next two invalid... */ /* FIXME: moving the tab between windows, or the window between displays will make the next two invalid... */
g_hash_table_replace (env_table, g_strdup ("WINDOWID"), g_strdup_printf ("%ld", GDK_WINDOW_XID (gtk_widget_get_window (window)))); #ifdef GDK_WINDOWING_X11
if (GDK_IS_X11_DISPLAY (display)) {
g_hash_table_replace (env_table, g_strdup ("WINDOWID"), g_strdup_printf ("%ld", GDK_WINDOW_XID (gtk_widget_get_window (window))));
}
#endif
g_hash_table_replace (env_table, g_strdup ("DISPLAY"), g_strdup (gdk_display_get_name (display))); g_hash_table_replace (env_table, g_strdup ("DISPLAY"), g_strdup (gdk_display_get_name (display)));
g_settings_schema_source_list_schemas (g_settings_schema_source_get_default (), TRUE, &list_schemas, NULL); g_settings_schema_source_list_schemas (g_settings_schema_source_get_default (), TRUE, &list_schemas, NULL);
@ -1532,8 +1534,6 @@ static void handle_error_child (TerminalScreen *screen,
info_bar, FALSE, FALSE, 0); info_bar, FALSE, FALSE, 0);
gtk_info_bar_set_default_response (GTK_INFO_BAR (info_bar), GTK_RESPONSE_CANCEL); gtk_info_bar_set_default_response (GTK_INFO_BAR (info_bar), GTK_RESPONSE_CANCEL);
gtk_widget_show (info_bar); gtk_widget_show (info_bar);
g_error_free (err);
} }
static void term_spawn_callback (GtkWidget *terminal, static void term_spawn_callback (GtkWidget *terminal,
@ -1546,7 +1546,6 @@ static void term_spawn_callback (GtkWidget *terminal,
if (error) if (error)
{ {
handle_error_child (screen, error); handle_error_child (screen, error);
g_error_free (error);
} }
else else
{ {

View File

@ -1482,9 +1482,6 @@ popup_clipboard_targets_received_cb (GtkClipboard *clipboard,
GtkAction *action; GtkAction *action;
gboolean can_paste, can_paste_uris, show_link, show_email_link, show_call_link, show_input_method_menu; gboolean can_paste, can_paste_uris, show_link, show_email_link, show_call_link, show_input_method_menu;
int n_pages; int n_pages;
GdkEvent *event;
GdkSeat *seat;
GdkDevice *device;
if (!gtk_widget_get_realized (GTK_WIDGET (screen))) if (!gtk_widget_get_realized (GTK_WIDGET (screen)))
{ {
@ -1557,17 +1554,13 @@ popup_clipboard_targets_received_cb (GtkClipboard *clipboard,
if (!gtk_menu_get_attach_widget (GTK_MENU (popup_menu))) if (!gtk_menu_get_attach_widget (GTK_MENU (popup_menu)))
gtk_menu_attach_to_widget (GTK_MENU (popup_menu),GTK_WIDGET (screen),NULL); gtk_menu_attach_to_widget (GTK_MENU (popup_menu),GTK_WIDGET (screen),NULL);
event = gtk_get_current_event (); gtk_menu_popup (GTK_MENU (popup_menu),
NULL, NULL,
seat = gdk_display_get_default_seat (gdk_display_get_default()); NULL, NULL,
info->button,
device = gdk_seat_get_pointer (seat); info->timestamp);
gtk_style_context_add_class(gtk_widget_get_style_context (popup_menu),
gdk_event_set_device (event, device); GTK_STYLE_CLASS_CONTEXT_MENU);
gtk_menu_popup_at_pointer (GTK_MENU (popup_menu), (const GdkEvent*) event);
gdk_event_free (event);
} }
static void static void
@ -3587,6 +3580,7 @@ static gboolean
confirm_close_window_or_tab (TerminalWindow *window, confirm_close_window_or_tab (TerminalWindow *window,
TerminalScreen *screen) TerminalScreen *screen)
{ {
GtkBuilder *builder;
TerminalWindowPrivate *priv = window->priv; TerminalWindowPrivate *priv = window->priv;
GtkWidget *dialog; GtkWidget *dialog;
gboolean do_confirm; gboolean do_confirm;
@ -3636,30 +3630,34 @@ confirm_close_window_or_tab (TerminalWindow *window,
if (has_processes) if (has_processes)
{ {
if (n_tabs > 1) if (n_tabs > 1)
confirm_msg = _("There are still processes running in some terminals in this window. " confirm_msg = _("There are still processes running in some terminals in this window.\n"
"Closing the window will kill all of them."); "Closing the window will kill all of them.");
else else
confirm_msg = _("There is still a process running in this terminal. " confirm_msg = _("There is still a process running in this terminal.\n"
"Closing the terminal will kill it."); "Closing the terminal will kill it.");
} else if (n_tabs > 1) } else if (n_tabs > 1)
confirm_msg = _("There are multiple tabs open in this window."); confirm_msg = _("There are multiple tabs open in this window.");
else else
return FALSE; return FALSE;
dialog = priv->confirm_close_dialog = // dialog = priv->confirm_close_dialog =
gtk_message_dialog_new (GTK_WINDOW (window), // gtk_message_dialog_new (GTK_WINDOW (window),
GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, // GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_WARNING, // GTK_MESSAGE_WARNING,
GTK_BUTTONS_CANCEL, // GTK_BUTTONS_CANCEL,
"%s", n_tabs > 1 ? _("Close this window?") : _("Close this terminal?")); // "%s", n_tabs > 1 ? _("Close this window?") : _("Close this terminal?"));
gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), builder = gtk_builder_new_from_resource (TERMINAL_RESOURCES_PATH_PREFIX G_DIR_SEPARATOR_S "ui/confirm-close-dialog.ui");
"%s", confirm_msg); priv->confirm_close_dialog = dialog = GTK_WIDGET (gtk_builder_get_object (builder, "confirm_close_dialog"));
if (n_tabs > 1) {
gtk_window_set_title (GTK_WINDOW (dialog), ""); gtk_label_set_text (GTK_LABEL (gtk_builder_get_object (builder, "question_text")), _("Close this window?"));
gtk_button_set_label (GTK_BUTTON (gtk_builder_get_object (builder, "button_close")), _("C_lose Window"));
gtk_dialog_add_button (GTK_DIALOG (dialog), n_tabs > 1 ? _("C_lose Window") : _("C_lose Terminal"), GTK_RESPONSE_ACCEPT); } else {
gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT); gtk_label_set_text (GTK_LABEL (gtk_builder_get_object (builder, "question_text")), _("Close this terminal?"));
gtk_button_set_label (GTK_BUTTON (gtk_builder_get_object (builder, "button_close")), _("C_lose Terminal"));
}
gtk_label_set_text (GTK_LABEL (gtk_builder_get_object (builder, "description_text")), confirm_msg);
g_object_unref (builder);
g_object_set_data (G_OBJECT (dialog), "close-screen", screen); g_object_set_data (G_OBJECT (dialog), "close-screen", screen);
@ -3668,6 +3666,8 @@ confirm_close_window_or_tab (TerminalWindow *window,
g_signal_connect (dialog, "response", g_signal_connect (dialog, "response",
G_CALLBACK (confirm_close_response_cb), window); G_CALLBACK (confirm_close_response_cb), window);
gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (window));
gtk_window_set_title (GTK_WINDOW (dialog), "");
gtk_window_present (GTK_WINDOW (dialog)); gtk_window_present (GTK_WINDOW (dialog));
return TRUE; return TRUE;
@ -4255,53 +4255,29 @@ static void
terminal_set_title_callback (GtkAction *action, terminal_set_title_callback (GtkAction *action,
TerminalWindow *window) TerminalWindow *window)
{ {
GtkBuilder *builder;
TerminalWindowPrivate *priv = window->priv; TerminalWindowPrivate *priv = window->priv;
GtkWidget *dialog, *message_area, *hbox, *label, *entry; GtkWidget *dialog, *entry;
if (priv->active_screen == NULL) if (priv->active_screen == NULL)
return; return;
/* FIXME: hook the screen up so this dialogue closes if the terminal screen closes */ builder = gtk_builder_new_from_resource (TERMINAL_RESOURCES_PATH_PREFIX G_DIR_SEPARATOR_S "ui/set-title-dialog.ui");
dialog = GTK_WIDGET (gtk_builder_get_object (builder, "dialog"));
entry = GTK_WIDGET (gtk_builder_get_object (builder, "title_entry"));
g_object_unref (builder);
dialog = gtk_message_dialog_new (GTK_WINDOW (window), gtk_widget_grab_focus (entry);
GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, gtk_entry_set_text (GTK_ENTRY (entry), terminal_screen_get_raw_title (priv->active_screen));
GTK_MESSAGE_OTHER, gtk_editable_select_region (GTK_EDITABLE (entry), 0, -1);
GTK_BUTTONS_OK_CANCEL, g_object_set_data (G_OBJECT (dialog), "title-entry", entry);
"%s", "");
gtk_window_set_title (GTK_WINDOW (dialog), _("Set Title"));
gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE);
gtk_window_set_role (GTK_WINDOW (dialog), "mate-terminal-change-title");
gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK);
/* Alternative button order was set automatically by GtkMessageDialog */
g_signal_connect (dialog, "response", g_signal_connect (dialog, "response",
G_CALLBACK (terminal_set_title_dialog_response_cb), priv->active_screen); G_CALLBACK (terminal_set_title_dialog_response_cb), priv->active_screen);
g_signal_connect (dialog, "delete-event", g_signal_connect (dialog, "delete-event",
G_CALLBACK (terminal_util_dialog_response_on_delete), NULL); G_CALLBACK (terminal_util_dialog_response_on_delete), NULL);
message_area = gtk_message_dialog_get_message_area (GTK_MESSAGE_DIALOG (dialog)); gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (window));
gtk_container_foreach (GTK_CONTAINER (message_area), (GtkCallback) gtk_widget_hide, NULL);
hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12);
gtk_box_pack_start (GTK_BOX (message_area), hbox, FALSE, FALSE, 0);
label = gtk_label_new_with_mnemonic (_("_Title:"));
gtk_label_set_xalign (GTK_LABEL (label), 0.0);
gtk_label_set_yalign (GTK_LABEL (label), 0.5);
gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
entry = gtk_entry_new ();
gtk_entry_set_width_chars (GTK_ENTRY (entry), 32);
gtk_entry_set_activates_default (GTK_ENTRY (entry), TRUE);
gtk_label_set_mnemonic_widget (GTK_LABEL (label), entry);
gtk_box_pack_start (GTK_BOX (hbox), entry, TRUE, TRUE, 0);
gtk_widget_show_all (hbox);
gtk_widget_grab_focus (entry);
gtk_entry_set_text (GTK_ENTRY (entry), terminal_screen_get_raw_title (priv->active_screen));
gtk_editable_select_region (GTK_EDITABLE (entry), 0, -1);
g_object_set_data (G_OBJECT (dialog), "title-entry", entry);
gtk_window_present (GTK_WINDOW (dialog)); gtk_window_present (GTK_WINDOW (dialog));
} }
@ -4442,6 +4418,7 @@ help_about_callback (GtkAction *action,
GKeyFile *key_file; GKeyFile *key_file;
GError *error = NULL; GError *error = NULL;
char **authors, **contributors, **artists, **documenters, **array_strv; char **authors, **contributors, **artists, **documenters, **array_strv;
gchar *comments = NULL;
gsize data_len, n_authors = 0, n_contributors = 0, n_artists = 0, n_documenters = 0 , i; gsize data_len, n_authors = 0, n_contributors = 0, n_artists = 0, n_documenters = 0 , i;
GPtrArray *array; GPtrArray *array;
@ -4488,6 +4465,9 @@ help_about_callback (GtkAction *action,
licence_text = terminal_util_get_licence_text (); licence_text = terminal_util_get_licence_text ();
comments = g_strdup_printf (_("MATE Terminal is a terminal emulator for the MATE Desktop Environment.\nPowered by Virtual TErminal %d.%d.%d"),
vte_get_major_version (), vte_get_minor_version (), vte_get_micro_version ());
gtk_show_about_dialog (GTK_WINDOW (window), gtk_show_about_dialog (GTK_WINDOW (window),
"program-name", _("MATE Terminal"), "program-name", _("MATE Terminal"),
"version", VERSION, "version", VERSION,
@ -4497,8 +4477,8 @@ help_about_callback (GtkAction *action,
"Copyright \xc2\xa9 2006 Guilherme de S. Pastore\n" "Copyright \xc2\xa9 2006 Guilherme de S. Pastore\n"
"Copyright \xc2\xa9 20072010 Christian Persch\n" "Copyright \xc2\xa9 20072010 Christian Persch\n"
"Copyright \xc2\xa9 2011 Perberos\n" "Copyright \xc2\xa9 2011 Perberos\n"
"Copyright \xc2\xa9 2012-2020 MATE developers"), "Copyright \xc2\xa9 2012-2021 MATE developers"),
"comments", _("A terminal emulator for the MATE desktop"), "comments", comments,
"authors", array_strv, "authors", array_strv,
"artists", artists, "artists", artists,
"documenters", documenters, "documenters", documenters,
@ -4506,9 +4486,10 @@ help_about_callback (GtkAction *action,
"wrap-license", TRUE, "wrap-license", TRUE,
"translator-credits", _("translator-credits"), "translator-credits", _("translator-credits"),
"logo-icon-name", MATE_TERMINAL_ICON_NAME, "logo-icon-name", MATE_TERMINAL_ICON_NAME,
"website", "https://mate-desktop.org", "website", PACKAGE_URL,
NULL); NULL);
g_free (comments);
g_strfreev (array_strv); g_strfreev (array_strv);
g_strfreev (artists); g_strfreev (artists);
g_strfreev (documenters); g_strfreev (documenters);

View File

@ -34,7 +34,9 @@
#include <gdk/gdk.h> #include <gdk/gdk.h>
#include <gdk/gdkx.h> #include <gdk/gdkx.h>
#ifdef HAVE_SMCLIENT
#include "eggsmclient.h" #include "eggsmclient.h"
#endif /* HAVE_SMCLIENT */
#include "terminal-accels.h" #include "terminal-accels.h"
#include "terminal-app.h" #include "terminal-app.h"
@ -406,79 +408,6 @@ name_lost_cb (GDBusConnection *connection,
gtk_main_quit (); gtk_main_quit ();
} }
/* Settings storage works as follows:
* /apps/mate-terminal/global/
* /apps/mate-terminal/profiles/Foo/
*
* It's somewhat tricky to manage the profiles/ dir since we need to track
* the list of profiles, but GSettings doesn't have a concept of notifying that
* a directory has appeared or disappeared.
*
* Session state is stored entirely in the RestartCommand command line.
*
* The number one rule: all stored information is EITHER per-session,
* per-profile, or set from a command line option. THERE CAN BE NO
* OVERLAP. The UI and implementation totally break if you overlap
* these categories. See mate-terminal 1.x for why.
*
* Don't use this code as an example of how to use GSettings - it's hugely
* overcomplicated due to the profiles stuff. Most apps should not
* have to do scary things of this nature, and should not have
* a profiles feature.
*
*/
/* Copied from libcaja/caja-program-choosing.c; Needed in case
* we have no DESKTOP_STARTUP_ID (with its accompanying timestamp).
*/
static Time
slowly_and_stupidly_obtain_timestamp (Display *xdisplay)
{
Window xwindow;
XEvent event;
{
XSetWindowAttributes attrs;
Atom atom_name;
Atom atom_type;
const char *name;
attrs.override_redirect = True;
attrs.event_mask = PropertyChangeMask | StructureNotifyMask;
xwindow =
XCreateWindow (xdisplay,
RootWindow (xdisplay, 0),
-100, -100, 1, 1,
0,
CopyFromParent,
CopyFromParent,
(Visual *)CopyFromParent,
CWOverrideRedirect | CWEventMask,
&attrs);
atom_name = XInternAtom (xdisplay, "WM_NAME", TRUE);
g_assert (atom_name != None);
atom_type = XInternAtom (xdisplay, "STRING", TRUE);
g_assert (atom_type != None);
name = "Fake Window";
XChangeProperty (xdisplay,
xwindow, atom_name,
atom_type,
8, PropModeReplace, (unsigned char *)name, strlen (name));
}
XWindowEvent (xdisplay,
xwindow,
PropertyChangeMask,
&event);
XDestroyWindow(xdisplay, xwindow);
return event.xproperty.time;
}
static char * static char *
get_factory_name_for_display (const char *display_name) get_factory_name_for_display (const char *display_name)
{ {
@ -529,8 +458,7 @@ main (int argc, char **argv)
int i; int i;
char **argv_copy; char **argv_copy;
int argc_copy; int argc_copy;
const char *startup_id, *display_name, *home_dir; const char *startup_id, *home_dir;
GdkDisplay *display;
TerminalOptions *options; TerminalOptions *options;
GError *error = NULL; GError *error = NULL;
char *working_directory; char *working_directory;
@ -555,8 +483,6 @@ main (int argc, char **argv)
working_directory = g_get_current_dir (); working_directory = g_get_current_dir ();
gdk_set_allowed_backends ("x11");
/* Now change directory to $HOME so we don't prevent unmounting, e.g. if the /* Now change directory to $HOME so we don't prevent unmounting, e.g. if the
* factory is started by caja-open-terminal. See bug #565328. * factory is started by caja-open-terminal. See bug #565328.
* On failure back to /. * On failure back to /.
@ -574,8 +500,10 @@ main (int argc, char **argv)
FALSE, FALSE,
&argc, &argv, &argc, &argv,
&error, &error,
#ifdef HAVE_SMCLIENT
gtk_get_option_group (TRUE), gtk_get_option_group (TRUE),
egg_sm_client_get_option_group (), egg_sm_client_get_option_group (),
#endif /* HAVE_SMCLIENT */
NULL); NULL);
g_free (working_directory); g_free (working_directory);
@ -596,20 +524,15 @@ main (int argc, char **argv)
g_unsetenv ("GIO_LAUNCHED_DESKTOP_FILE_PID"); g_unsetenv ("GIO_LAUNCHED_DESKTOP_FILE_PID");
g_unsetenv ("GIO_LAUNCHED_DESKTOP_FILE"); g_unsetenv ("GIO_LAUNCHED_DESKTOP_FILE");
display = gdk_display_get_default ();
display_name = gdk_display_get_name (display);
options->display_name = g_strdup (display_name);
if (options->startup_id == NULL) if (options->startup_id == NULL)
{ {
/* Create a fake one containing a timestamp that we can use */ options->startup_id = g_strdup_printf ("_TIME%lu", g_get_monotonic_time () / 1000);
Time timestamp;
timestamp = slowly_and_stupidly_obtain_timestamp (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()));
options->startup_id = g_strdup_printf ("_TIME%lu", timestamp);
} }
gdk_init (&argc, &argv);
const char *display_name = gdk_display_get_name (gdk_display_get_default ());
options->display_name = g_strdup (display_name);
if (options->use_factory) if (options->use_factory)
{ {
OwnData *data; OwnData *data;
@ -644,7 +567,7 @@ main (int argc, char **argv)
} }
else else
{ {
gtk_init(&argc, &argv);
terminal_app_handle_options (terminal_app_get (), options, TRUE /* allow resume */, &error); terminal_app_handle_options (terminal_app_get (), options, TRUE /* allow resume */, &error);
terminal_options_free (options); terminal_options_free (options);