1
#include "gtk-window-decorator.h"
4
get_client_machine (Window xwindow)
7
gulong nitems, bytes_after;
12
atom = XInternAtom (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), "WM_CLIENT_MACHINE", FALSE);
14
gdk_error_trap_push ();
16
result = XGetWindowProperty (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()),
19
FALSE, XA_STRING, &type, &format, &nitems,
22
gdk_error_trap_pop ();
24
if (result != Success)
27
if (type != XA_STRING)
33
retval = g_strdup ((gchar *) str);
41
kill_window (WnckWindow *win)
45
app = wnck_window_get_application (win);
48
gchar buf[257], *client_machine;
51
pid = wnck_application_get_pid (app);
52
client_machine = get_client_machine (wnck_application_get_xid (app));
54
if (client_machine && pid > 0)
56
if (gethostname (buf, sizeof (buf) - 1) == 0)
58
if (strcmp (buf, client_machine) == 0)
64
g_free (client_machine);
67
gdk_error_trap_push ();
68
XKillClient (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), wnck_window_get_xid (win));
69
gdk_display_sync (gdk_display_get_default ());
70
gdk_error_trap_pop ();
74
force_quit_dialog_realize (GtkWidget *dialog,
77
WnckWindow *win = data;
79
gdk_error_trap_push ();
80
XSetTransientForHint (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()),
81
GDK_WINDOW_XID (dialog->window),
82
wnck_window_get_xid (win));
83
gdk_display_sync (gdk_display_get_default ());
84
gdk_error_trap_pop ();
88
force_quit_dialog_response (GtkWidget *dialog,
92
WnckWindow *win = data;
93
decor_t *d = g_object_get_data (G_OBJECT (win), "decor");
95
if (response == GTK_RESPONSE_ACCEPT)
98
if (d->force_quit_dialog)
100
d->force_quit_dialog = NULL;
101
gtk_widget_destroy (dialog);
106
show_force_quit_dialog (WnckWindow *win,
109
decor_t *d = g_object_get_data (G_OBJECT (win), "decor");
113
if (d->force_quit_dialog)
116
tmp = g_markup_escape_text (wnck_window_get_name (win), -1);
117
str = g_strdup_printf (_("The window \"%s\" is not responding."), tmp);
121
dialog = gtk_message_dialog_new (NULL, 0,
126
_("Forcing this application to "
127
"quit will cause you to lose any "
128
"unsaved changes."));
131
gtk_window_set_icon_name (GTK_WINDOW (dialog), "force-quit");
133
gtk_label_set_use_markup (GTK_LABEL (GTK_MESSAGE_DIALOG (dialog)->label),
135
gtk_label_set_line_wrap (GTK_LABEL (GTK_MESSAGE_DIALOG (dialog)->label),
138
gtk_dialog_add_buttons (GTK_DIALOG (dialog),
145
gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_REJECT);
147
g_signal_connect (G_OBJECT (dialog), "realize",
148
G_CALLBACK (force_quit_dialog_realize),
151
g_signal_connect (G_OBJECT (dialog), "response",
152
G_CALLBACK (force_quit_dialog_response),
155
gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
157
gtk_widget_realize (dialog);
159
gdk_x11_window_set_user_time (dialog->window, timestamp);
161
gtk_widget_show (dialog);
163
d->force_quit_dialog = dialog;
167
hide_force_quit_dialog (WnckWindow *win)
169
decor_t *d = g_object_get_data (G_OBJECT (win), "decor");
171
if (d->force_quit_dialog)
173
gtk_widget_destroy (d->force_quit_dialog);
174
d->force_quit_dialog = NULL;