From 749b9be98a2033cb4aae34eb8c421b13b44c9e28 Mon Sep 17 00:00:00 2001 From: Bilal Elmoussaoui Date: Tue, 12 Apr 2022 14:24:15 +0200 Subject: [PATCH] core: Drop the default close dialog implementation If the MetaPlugin doesn't implement it, we don't show anything. Part-of: --- po/POTFILES.in | 1 - src/compositor/meta-plugin-manager.c | 3 +- src/core/delete.c | 2 + src/core/meta-close-dialog-default-private.h | 37 --- src/core/meta-close-dialog-default.c | 280 ------------------- src/meson.build | 2 - 6 files changed, 3 insertions(+), 322 deletions(-) delete mode 100644 src/core/meta-close-dialog-default-private.h delete mode 100644 src/core/meta-close-dialog-default.c diff --git a/po/POTFILES.in b/po/POTFILES.in index f51e98dd0..2df2675d8 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -17,7 +17,6 @@ src/compositor/meta-background.c src/core/bell.c src/core/display.c src/core/keybindings.c -src/core/meta-close-dialog-default.c src/core/meta-context-main.c src/core/meta-pad-action-mapper.c src/core/mutter.c diff --git a/src/compositor/meta-plugin-manager.c b/src/compositor/meta-plugin-manager.c index 94d62c212..bec5cd455 100644 --- a/src/compositor/meta-plugin-manager.c +++ b/src/compositor/meta-plugin-manager.c @@ -29,7 +29,6 @@ #include "backends/x11/meta-clutter-backend-x11.h" #include "compositor/compositor-private.h" #include "compositor/meta-module.h" -#include "core/meta-close-dialog-default-private.h" #include "core/meta-inhibit-shortcuts-dialog-default-private.h" #include "core/window-private.h" #include "meta/meta-x11-errors.h" @@ -396,7 +395,7 @@ meta_plugin_manager_create_close_dialog (MetaPluginManager *plugin_mgr, if (klass->create_close_dialog) return klass->create_close_dialog (plugin, window); - return meta_close_dialog_default_new (window); + return NULL; } MetaInhibitShortcutsDialog * diff --git a/src/core/delete.c b/src/core/delete.c index 81537dfe5..ceaa8d6ee 100644 --- a/src/core/delete.c +++ b/src/core/delete.c @@ -56,6 +56,8 @@ meta_window_ensure_close_dialog (MetaWindow *window) display = window->display; window->close_dialog = meta_compositor_create_close_dialog (display->compositor, window); + if (!window->close_dialog) + return; g_signal_connect (window->close_dialog, "response", G_CALLBACK (close_dialog_response_cb), window); } diff --git a/src/core/meta-close-dialog-default-private.h b/src/core/meta-close-dialog-default-private.h deleted file mode 100644 index f149d3686..000000000 --- a/src/core/meta-close-dialog-default-private.h +++ /dev/null @@ -1,37 +0,0 @@ -/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ - -/* - * Copyright (C) 2016 Red Hat - * - * 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, see . - * - * Author: Carlos Garnacho - */ - -#ifndef META_CLOSE_DIALOG_DEFAULT_H -#define META_CLOSE_DIALOG_DEFAULT_H - -#include - -#include "meta/meta-plugin.h" - -#define META_TYPE_CLOSE_DIALOG_DEFAULT (meta_close_dialog_default_get_type ()) -G_DECLARE_FINAL_TYPE (MetaCloseDialogDefault, - meta_close_dialog_default, - META, CLOSE_DIALOG_DEFAULT, - GObject) - -MetaCloseDialog * meta_close_dialog_default_new (MetaWindow *window); - -#endif /* META_CLOSE_DIALOG_DEFAULT_H */ diff --git a/src/core/meta-close-dialog-default.c b/src/core/meta-close-dialog-default.c deleted file mode 100644 index fb48e859b..000000000 --- a/src/core/meta-close-dialog-default.c +++ /dev/null @@ -1,280 +0,0 @@ -/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ - -/* - * Copyright (C) 2001, 2002 Havoc Pennington - * Copyright (C) 2004 Elijah Newren - * Copyright (C) 2016 Red Hat - * - * 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, see . - * - * Author: Carlos Garnacho - */ - -#define _XOPEN_SOURCE /* for kill() */ - -#include "config.h" - -#include "core/meta-close-dialog-default-private.h" -#include "meta/meta-close-dialog.h" - -#include -#include -#include - -#include "core/util-private.h" -#include "core/window-private.h" -#include "x11/meta-x11-display-private.h" - -typedef struct _MetaCloseDialogDefaultPrivate MetaCloseDialogDefaultPrivate; - -struct _MetaCloseDialogDefault -{ - GObject parent_instance; - MetaWindow *window; - int dialog_pid; - guint child_watch_id; -}; - -enum -{ - PROP_0, - PROP_WINDOW, - N_PROPS -}; - -GParamSpec *pspecs[N_PROPS] = { NULL }; - -static void meta_close_dialog_iface_init (MetaCloseDialogInterface *iface); - -G_DEFINE_TYPE_WITH_CODE (MetaCloseDialogDefault, meta_close_dialog_default, - G_TYPE_OBJECT, - G_IMPLEMENT_INTERFACE (META_TYPE_CLOSE_DIALOG, - meta_close_dialog_iface_init)) - -static void -dialog_exited (GPid pid, - int status, - gpointer user_data) -{ - MetaCloseDialogDefault *dialog = user_data; - - dialog->dialog_pid = -1; - - /* exit status of 0 means the user pressed "Force Quit" */ - if (WIFEXITED (status) && WEXITSTATUS (status) == 0) - g_signal_emit_by_name (dialog, "response", META_CLOSE_DIALOG_RESPONSE_FORCE_CLOSE); -} - -static void -present_existing_delete_dialog (MetaCloseDialogDefault *dialog) -{ - MetaWindow *window; - GSList *windows; - GSList *tmp; - - window = dialog->window; - - if (dialog->dialog_pid < 0) - return; - - meta_topic (META_DEBUG_PING, - "Presenting existing ping dialog for %s", - window->desc); - - /* Activate transient for window that belongs to - * mutter-dialog - */ - windows = meta_display_list_windows (window->display, META_LIST_DEFAULT); - tmp = windows; - - while (tmp != NULL) - { - MetaWindow *w = tmp->data; - - if (w->transient_for == window && w->res_class && - g_ascii_strcasecmp (w->res_class, "mutter-dialog") == 0) - { - meta_window_activate (w, CLUTTER_CURRENT_TIME); - break; - } - - tmp = tmp->next; - } - - g_slist_free (windows); -} - -static void -meta_close_dialog_default_show (MetaCloseDialog *dialog) -{ - MetaCloseDialogDefault *dialog_default = META_CLOSE_DIALOG_DEFAULT (dialog); - MetaWindow *window = dialog_default->window; - gchar *window_title, *window_content, *tmp; - GPid dialog_pid; - - if (dialog_default->dialog_pid >= 0) - { - present_existing_delete_dialog (dialog_default); - return; - } - - /* This is to get a better string if the title isn't representable - * in the locale encoding; actual conversion to UTF-8 is done inside - * meta_show_dialog */ - if (window->title && window->title[0]) - { - tmp = g_locale_from_utf8 (window->title, -1, NULL, NULL, NULL); - if (tmp == NULL) - window_title = NULL; - else - window_title = window->title; - g_free (tmp); - } - else - { - window_title = NULL; - } - - if (window_title) - /* Translators: %s is a window title */ - tmp = g_strdup_printf (_("ā€œ%sā€ is not responding."), window_title); - else - tmp = g_strdup (_("Application is not responding.")); - - window_content = g_strdup_printf ( - "%s\n\n%s", - tmp, - _("You may choose to wait a short while for it to " - "continue or force the application to quit entirely.")); - - dialog_pid = - meta_show_dialog ("--question", - window_content, NULL, NULL, - _("_Force Quit"), _("_Wait"), - "face-sad-symbolic", window->xwindow, - NULL, NULL); - - g_free (window_content); - g_free (tmp); - - dialog_default->dialog_pid = dialog_pid; - g_child_watch_add (dialog_pid, dialog_exited, dialog); -} - -static void -meta_close_dialog_default_hide (MetaCloseDialog *dialog) -{ - MetaCloseDialogDefault *dialog_default; - - dialog_default = META_CLOSE_DIALOG_DEFAULT (dialog); - - g_clear_handle_id (&dialog_default->child_watch_id, g_source_remove); - - if (dialog_default->dialog_pid > -1) - { - kill (dialog_default->dialog_pid, SIGTERM); - dialog_default->dialog_pid = -1; - } -} - -static void -meta_close_dialog_iface_init (MetaCloseDialogInterface *iface) -{ - iface->show = meta_close_dialog_default_show; - iface->hide = meta_close_dialog_default_hide; -} - -static void -meta_close_dialog_default_finalize (GObject *object) -{ - MetaCloseDialogDefault *dialog; - - dialog = META_CLOSE_DIALOG_DEFAULT (object); - - g_clear_handle_id (&dialog->child_watch_id, g_source_remove); - - if (dialog->dialog_pid > -1) - { - kill (dialog->dialog_pid, SIGKILL); - dialog->dialog_pid = -1; - } - - G_OBJECT_CLASS (meta_close_dialog_default_parent_class)->finalize (object); -} - -static void -meta_close_dialog_default_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - MetaCloseDialogDefault *dialog; - - dialog = META_CLOSE_DIALOG_DEFAULT (object); - - switch (prop_id) - { - case PROP_WINDOW: - dialog->window = g_value_get_object (value); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - } -} - -static void -meta_close_dialog_default_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - MetaCloseDialogDefault *dialog; - - dialog = META_CLOSE_DIALOG_DEFAULT (object); - - switch (prop_id) - { - case PROP_WINDOW: - g_value_set_object (value, dialog->window); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - } -} - -static void -meta_close_dialog_default_class_init (MetaCloseDialogDefaultClass *klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS (klass); - - object_class->finalize = meta_close_dialog_default_finalize; - object_class->set_property = meta_close_dialog_default_set_property; - object_class->get_property = meta_close_dialog_default_get_property; - - g_object_class_override_property (object_class, PROP_WINDOW, "window"); -} - -static void -meta_close_dialog_default_init (MetaCloseDialogDefault *dialog) -{ - dialog->dialog_pid = -1; -} - -MetaCloseDialog * -meta_close_dialog_default_new (MetaWindow *window) -{ - return g_object_new (META_TYPE_CLOSE_DIALOG_DEFAULT, - "window", window, - NULL); -} diff --git a/src/meson.build b/src/meson.build index 13a69c1a6..767b298c2 100644 --- a/src/meson.build +++ b/src/meson.build @@ -381,8 +381,6 @@ mutter_sources = [ 'core/meta-clipboard-manager.c', 'core/meta-clipboard-manager.h', 'core/meta-close-dialog.c', - 'core/meta-close-dialog-default.c', - 'core/meta-close-dialog-default-private.h', 'core/meta-context-main.c', 'core/meta-context-main.h', 'core/meta-context-private.h',