make one of the toolbar buttons lock up the demo

2002-04-12  Havoc Pennington  <hp@redhat.com>

	* src/tools/metacity-window-demo.c (do_appwindow): make one of the
	toolbar buttons lock up the demo

	* src/window.c (meta_window_delete): move error trap to be around
	a narrower part of the function, and add part of the ping stuff,
	nothing user-visible yet

	* src/metacity-dialog.c (main): metacity-dialog executable to
	live in libexecdir and pop up dialogs for us.
This commit is contained in:
Havoc Pennington 2002-04-12 23:00:46 +00:00 committed by Havoc Pennington
parent 38ff6a49c4
commit f965726d15
5 changed files with 180 additions and 4 deletions

View File

@ -1,3 +1,15 @@
2002-04-12 Havoc Pennington <hp@redhat.com>
* src/tools/metacity-window-demo.c (do_appwindow): make one of the
toolbar buttons lock up the demo
* src/window.c (meta_window_delete): move error trap to be around
a narrower part of the function, and add part of the ping stuff,
nothing user-visible yet
* src/metacity-dialog.c (main): metacity-dialog executable to
live in libexecdir and pop up dialogs for us.
2002-04-09 Havoc Pennington <hp@pobox.com>
* src/theme.c (multiply_alpha): fix alpha multiplication routine

View File

@ -76,10 +76,15 @@ metacity_theme_viewer_SOURCES= \
util.c \
util.h
metacity_dialog_SOURCES= \
metacity-dialog.c
bin_PROGRAMS=metacity metacity-theme-viewer
libexec_PROGRAMS=metacity-dialog
metacity_LDADD= @METACITY_LIBS@
metacity_theme_viewer_LDADD= @METACITY_LIBS@
metacity_dialog_LDADD=@METACITY_LIBS@
testgradient_SOURCES=gradient.h gradient.c testgradient.c

90
src/metacity-dialog.c Normal file
View File

@ -0,0 +1,90 @@
/* Metacity dialog process */
/*
* Copyright (C) 2001 Havoc Pennington
*
* 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 <config.h>
#include <gtk/gtk.h>
#include <stdlib.h>
#include <string.h>
#include <libintl.h>
#define _(x) dgettext (GETTEXT_PACKAGE, x)
#define N_(x) x
static int
kill_window_question (const char *window_name)
{
GtkWidget *dialog;
dialog = gtk_message_dialog_new (NULL, 0,
GTK_MESSAGE_QUESTION,
GTK_BUTTONS_NONE,
_("The window \"%s\" is not responding.\n"
"Force this application to exit?"),
window_name);
gtk_dialog_add_buttons (GTK_DIALOG (dialog),
GTK_STOCK_CANCEL,
GTK_RESPONSE_REJECT,
_("Kill application"),
GTK_RESPONSE_ACCEPT,
NULL);
gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_REJECT);
/* return 0 if we should kill the application */
if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
g_print ("Y");
else
g_print ("N");
return 0;
}
int
main (int argc, char **argv)
{
bindtextdomain (GETTEXT_PACKAGE, METACITY_LOCALEDIR);
bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
textdomain (GETTEXT_PACKAGE);
gtk_init (&argc, &argv);
if (argc < 2)
{
g_printerr ("bad args to metacity-dialog\n");
return 1;
}
if (strcmp (argv[1], "--kill-window-question") == 0)
{
if (argc < 3)
{
g_printerr ("bad args to metacity-dialog\n");
return 1;
}
return kill_window_question (argv[2]);
}
g_printerr ("bad args to metacity-dialog\n");
return 1;
}

View File

@ -22,6 +22,7 @@
#include <gtk/gtk.h>
#include <gdk/gdkx.h>
#include <X11/Xatom.h>
#include <unistd.h>
static GtkWidget* do_appwindow (void);
@ -472,6 +473,13 @@ static GtkItemFactoryEntry menu_items[] =
{ "/Windows/Des_ktop", NULL, desktop_cb, 0, NULL }
};
static void
sleep_cb (GtkWidget *button,
gpointer data)
{
sleep (1000);
}
static void
toolbar_cb (GtkWidget *button,
gpointer data)
@ -611,9 +619,9 @@ do_appwindow (void)
gtk_toolbar_insert_stock (GTK_TOOLBAR (toolbar),
GTK_STOCK_OPEN,
"This is a demo button with an 'open' icon",
"This is a demo button that locks up the demo",
NULL,
G_CALLBACK (toolbar_cb),
G_CALLBACK (sleep_cb),
window, /* user data for callback */
-1); /* -1 means "append" */

View File

@ -2483,6 +2483,61 @@ meta_window_get_outer_rect (MetaWindow *window,
*rect = window->rect;
}
static void
delete_ping_reply_func (MetaDisplay *display,
Window xwindow,
void *user_data)
{
MetaWindow *window = user_data;
meta_topic (META_DEBUG_PING,
"Got reply to delete ping for %s\n",
window->desc);
/* we do nothing */
}
static void
delete_ping_timeout_func (MetaDisplay *display,
Window xwindow,
void *user_data)
{
MetaWindow *window = user_data;
GError *err;
int child_pid;
int outpipe;
char *argv[4];
meta_topic (META_DEBUG_PING,
"Got delete ping timeout for %s\n",
window->desc);
#if 0
argv[0] = METACITY_LIBEXECDIR"/metacity-dialog";
argv[1] = "--kill-window-question";
argv[2] = window->title;
argv[3] = NULL;
err = NULL;
if (!g_spawn_async_with_pipes ("/",
argv,
NULL,
0,
NULL, NULL,
&child_pid,
NULL,
&outpipe,
NULL,
&err))
{
meta_warning (_("Error launching metacity-dialog to ask about killing an application: %s\n"),
err->message);
g_error_free (err);
return;
}
#endif
}
void
meta_window_delete (MetaWindow *window,
Time timestamp)
@ -2504,6 +2559,14 @@ meta_window_delete (MetaWindow *window,
window->desc);
XKillClient (window->display->xdisplay, window->xwindow);
}
meta_error_trap_pop (window->display);
meta_display_ping_window (window->display,
window,
timestamp,
delete_ping_reply_func,
delete_ping_timeout_func,
window);
if (window->has_focus)
{
@ -2522,8 +2585,6 @@ meta_window_delete (MetaWindow *window,
"Window %s was deleted/killed but didn't have focus\n",
window->desc);
}
meta_error_trap_pop (window->display);
}
void