2003-01-03 13:26:04 +00:00
|
|
|
/*
|
|
|
|
* util.c
|
|
|
|
*
|
|
|
|
* Copyright (C) 2002 Sun Microsystems, Inc.
|
2003-01-14 15:35:24 +00:00
|
|
|
* (C) 1999, 2000 Red Hat Inc.
|
|
|
|
* (C) 1998 James Henstridge
|
2003-01-24 16:16:40 +00:00
|
|
|
* (C) 1995-2002 Free Software Foundation
|
2003-01-03 13:26:04 +00:00
|
|
|
*
|
|
|
|
* This library is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU Library General Public
|
|
|
|
* License as published by the Free Software Foundation; either
|
|
|
|
* version 2 of the License, or (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This library 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
|
|
|
|
* Library General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU Library General Public
|
|
|
|
* License along with this library; if not, write to the
|
COPYING, src/about.c, src/calendar.c, src/eggtrayicon.c, src/entry.c,
2005-04-25 Glynn Foster <glynn.foster@sun.com>
* COPYING, src/about.c, src/calendar.c, src/eggtrayicon.c,
* src/entry.c, src/fileselection.c, src/main.c, src/msg.c,
* src/notification.c, src/option.c, src/progress.c,
* src/text.c, src/tree.c, src/util.c: Update the FSF address
to point to 51 Franklin Street, Fifth Floor as per forwarded
mail from Alvaro Lopez Ortega.
2005-04-25 03:20:45 +00:00
|
|
|
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
|
|
* Boston, MA 02110-1301, USA.
|
2003-01-03 13:26:04 +00:00
|
|
|
*
|
|
|
|
* Authors: Glynn Foster <glynn.foster@sun.com>
|
2003-01-14 15:35:24 +00:00
|
|
|
* Havoc Pennington <hp@redhat.com>
|
|
|
|
* James Henstridge <james@daa.com.au>
|
2003-01-24 16:16:40 +00:00
|
|
|
* Tom Tromey <tromey@redhat.com>
|
2003-01-03 13:26:04 +00:00
|
|
|
*/
|
|
|
|
|
2005-07-06 20:13:11 +00:00
|
|
|
#include "config.h"
|
|
|
|
|
2003-01-03 13:26:04 +00:00
|
|
|
#include "config.h"
|
|
|
|
#include "util.h"
|
2003-01-24 16:16:40 +00:00
|
|
|
#include "zenity.h"
|
2017-04-07 12:00:42 +00:00
|
|
|
#include <errno.h>
|
|
|
|
#include <locale.h>
|
|
|
|
#include <stdarg.h>
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include <string.h>
|
2003-01-14 15:35:24 +00:00
|
|
|
|
2015-04-22 18:59:56 +00:00
|
|
|
#ifdef GDK_WINDOWING_X11
|
|
|
|
#include <gdk/gdkx.h>
|
|
|
|
#endif
|
|
|
|
|
2017-04-07 12:00:42 +00:00
|
|
|
#define ZENITY_OK_DEFAULT 0
|
|
|
|
#define ZENITY_CANCEL_DEFAULT 1
|
|
|
|
#define ZENITY_ESC_DEFAULT 1
|
|
|
|
#define ZENITY_ERROR_DEFAULT -1
|
|
|
|
#define ZENITY_EXTRA_DEFAULT 127
|
|
|
|
|
|
|
|
GtkBuilder *
|
|
|
|
zenity_util_load_ui_file (const gchar *root_widget, ...) {
|
|
|
|
va_list args;
|
|
|
|
gchar *arg = NULL;
|
|
|
|
GPtrArray *ptrarray;
|
|
|
|
GtkBuilder *builder = gtk_builder_new ();
|
|
|
|
GError *error = NULL;
|
|
|
|
gchar **objects;
|
|
|
|
guint result = 0;
|
|
|
|
|
|
|
|
gtk_builder_set_translation_domain (builder, GETTEXT_PACKAGE);
|
|
|
|
|
|
|
|
/* We have at least the root_widget and a NULL */
|
|
|
|
ptrarray = g_ptr_array_sized_new (2);
|
|
|
|
|
|
|
|
g_ptr_array_add (ptrarray, g_strdup (root_widget));
|
|
|
|
|
|
|
|
va_start (args, root_widget);
|
|
|
|
|
|
|
|
arg = va_arg (args, gchar *);
|
|
|
|
|
|
|
|
while (arg) {
|
|
|
|
g_ptr_array_add (ptrarray, g_strdup (arg));
|
|
|
|
arg = va_arg (args, gchar *);
|
|
|
|
}
|
|
|
|
va_end (args);
|
|
|
|
|
|
|
|
/* Enforce terminating NULL */
|
|
|
|
g_ptr_array_add (ptrarray, NULL);
|
|
|
|
objects = (gchar **) g_ptr_array_free (ptrarray, FALSE);
|
|
|
|
|
|
|
|
if (g_file_test (ZENITY_UI_FILE_RELATIVEPATH, G_FILE_TEST_EXISTS)) {
|
|
|
|
/* Try current dir, for debugging */
|
|
|
|
result = gtk_builder_add_objects_from_file (
|
|
|
|
builder, ZENITY_UI_FILE_RELATIVEPATH, objects, NULL);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (result == 0)
|
|
|
|
result = gtk_builder_add_objects_from_file (
|
|
|
|
builder, ZENITY_UI_FILE_FULLPATH, objects, &error);
|
|
|
|
|
|
|
|
g_strfreev (objects);
|
|
|
|
|
|
|
|
if (result == 0) {
|
|
|
|
g_warning ("Could not load ui file %s: %s",
|
|
|
|
ZENITY_UI_FILE_FULLPATH,
|
|
|
|
error->message);
|
|
|
|
g_error_free (error);
|
|
|
|
g_object_unref (builder);
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
return builder;
|
2003-01-03 13:26:04 +00:00
|
|
|
}
|
2017-04-07 12:00:42 +00:00
|
|
|
gchar *
|
|
|
|
zenity_util_strip_newline (gchar *string) {
|
|
|
|
gsize len;
|
|
|
|
|
|
|
|
g_return_val_if_fail (string != NULL, NULL);
|
|
|
|
|
|
|
|
len = strlen (string);
|
|
|
|
while (len--) {
|
|
|
|
if (string[len] == '\n')
|
|
|
|
string[len] = '\0';
|
|
|
|
else
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
return string;
|
2003-05-05 17:17:02 +00:00
|
|
|
}
|
|
|
|
|
2003-01-03 13:26:04 +00:00
|
|
|
gboolean
|
2017-04-07 12:00:42 +00:00
|
|
|
zenity_util_fill_file_buffer (GtkTextBuffer *buffer, const gchar *filename) {
|
|
|
|
GtkTextIter iter, end;
|
|
|
|
FILE *f;
|
|
|
|
gchar buf[2048];
|
|
|
|
gint remaining = 0;
|
2003-01-03 13:26:04 +00:00
|
|
|
|
2017-04-07 12:00:42 +00:00
|
|
|
if (filename == NULL)
|
|
|
|
return FALSE;
|
2003-01-03 13:26:04 +00:00
|
|
|
|
2017-04-07 12:00:42 +00:00
|
|
|
f = fopen (filename, "r");
|
2003-01-03 13:26:04 +00:00
|
|
|
|
2017-04-07 12:00:42 +00:00
|
|
|
if (f == NULL) {
|
|
|
|
g_warning ("Cannot open file '%s': %s", filename, g_strerror (errno));
|
|
|
|
return FALSE;
|
|
|
|
}
|
2003-01-03 13:26:04 +00:00
|
|
|
|
2017-04-07 12:00:42 +00:00
|
|
|
gtk_text_buffer_get_iter_at_offset (buffer, &iter, 0);
|
2003-01-03 13:26:04 +00:00
|
|
|
|
2017-04-07 12:00:42 +00:00
|
|
|
while (!feof (f)) {
|
|
|
|
gint count;
|
|
|
|
const char *leftover;
|
|
|
|
int to_read = 2047 - remaining;
|
2003-01-03 13:26:04 +00:00
|
|
|
|
2017-04-07 12:00:42 +00:00
|
|
|
count = fread (buf + remaining, 1, to_read, f);
|
|
|
|
buf[count + remaining] = '\0';
|
2003-01-03 13:26:04 +00:00
|
|
|
|
2017-04-07 12:00:42 +00:00
|
|
|
g_utf8_validate (buf, count + remaining, &leftover);
|
2003-01-03 13:26:04 +00:00
|
|
|
|
2017-04-07 12:00:42 +00:00
|
|
|
g_assert (g_utf8_validate (buf, leftover - buf, NULL));
|
|
|
|
gtk_text_buffer_insert (buffer, &iter, buf, leftover - buf);
|
2003-01-03 13:26:04 +00:00
|
|
|
|
2017-04-07 12:00:42 +00:00
|
|
|
remaining = (buf + remaining + count) - leftover;
|
|
|
|
g_memmove (buf, leftover, remaining);
|
2003-01-03 13:26:04 +00:00
|
|
|
|
2017-04-07 12:00:42 +00:00
|
|
|
if (remaining > 6 || count < to_read)
|
|
|
|
break;
|
|
|
|
}
|
2003-01-03 13:26:04 +00:00
|
|
|
|
2017-04-07 12:00:42 +00:00
|
|
|
if (remaining) {
|
|
|
|
g_warning (
|
|
|
|
"Invalid UTF-8 data encountered reading file '%s'", filename);
|
|
|
|
return FALSE;
|
|
|
|
}
|
2003-01-03 13:26:04 +00:00
|
|
|
|
2017-04-07 12:00:42 +00:00
|
|
|
/* We had a newline in the buffer to begin with. (The buffer always contains
|
|
|
|
* a newline, so we delete to the end of the buffer to clean up.
|
|
|
|
*/
|
2003-01-03 13:26:04 +00:00
|
|
|
|
2017-04-07 12:00:42 +00:00
|
|
|
gtk_text_buffer_get_end_iter (buffer, &end);
|
|
|
|
gtk_text_buffer_delete (buffer, &iter, &end);
|
2003-01-03 13:26:04 +00:00
|
|
|
|
2017-04-07 12:00:42 +00:00
|
|
|
gtk_text_buffer_set_modified (buffer, FALSE);
|
|
|
|
|
|
|
|
return TRUE;
|
2003-01-03 13:26:04 +00:00
|
|
|
}
|
|
|
|
|
src/notification.c (-set_scaled_pixbuf, +zenity_notification_icon_update,
2006-07-27 Lucas Rocha <lucasr@gnome.org>
* src/notification.c (-set_scaled_pixbuf,
+zenity_notification_icon_update,
-zenity_notification_icon_press_callback,
+zenity_notification_icon_size_changed_cb,
-zenity_notification_icon_expose_callback,
-zenity_notification_icon_destroy_callback,
+zenity_notification_icon_activate_cb,
zenity_notification_handle_stdin, zenity_notification),
src/util.[ch] (+zenity_util_stock_from_filename,
zenity_util_pixbuf_new_from_file), Makefile.am, configure.in:
Migration to gtk_status_icon (Fixes bug #341451). Patch from
Christian Persch <chpe@gnome.org>.
* src/eggtrayicon.[ch]: removed.
2006-07-28 21:25:11 +00:00
|
|
|
const gchar *
|
2017-04-07 12:00:42 +00:00
|
|
|
zenity_util_icon_name_from_filename (const gchar *filename) {
|
|
|
|
if (!filename || !filename[0])
|
|
|
|
return "dialog-warning"; /* default */
|
|
|
|
|
|
|
|
if (!g_ascii_strcasecmp (filename, "warning"))
|
|
|
|
return "dialog-warning";
|
|
|
|
if (!g_ascii_strcasecmp (filename, "info"))
|
|
|
|
return "dialog-information";
|
|
|
|
if (!g_ascii_strcasecmp (filename, "question"))
|
|
|
|
return "dialog-question";
|
|
|
|
if (!g_ascii_strcasecmp (filename, "error"))
|
|
|
|
return "dialog-error";
|
|
|
|
return NULL;
|
src/notification.c (-set_scaled_pixbuf, +zenity_notification_icon_update,
2006-07-27 Lucas Rocha <lucasr@gnome.org>
* src/notification.c (-set_scaled_pixbuf,
+zenity_notification_icon_update,
-zenity_notification_icon_press_callback,
+zenity_notification_icon_size_changed_cb,
-zenity_notification_icon_expose_callback,
-zenity_notification_icon_destroy_callback,
+zenity_notification_icon_activate_cb,
zenity_notification_handle_stdin, zenity_notification),
src/util.[ch] (+zenity_util_stock_from_filename,
zenity_util_pixbuf_new_from_file), Makefile.am, configure.in:
Migration to gtk_status_icon (Fixes bug #341451). Patch from
Christian Persch <chpe@gnome.org>.
* src/eggtrayicon.[ch]: removed.
2006-07-28 21:25:11 +00:00
|
|
|
}
|
|
|
|
|
2003-01-03 13:26:04 +00:00
|
|
|
void
|
2017-04-07 12:00:42 +00:00
|
|
|
zenity_util_set_window_icon_from_file (
|
|
|
|
GtkWidget *widget, const gchar *filename) {
|
|
|
|
GdkPixbuf *pixbuf;
|
|
|
|
const gchar *icon_name;
|
|
|
|
|
|
|
|
icon_name = zenity_util_icon_name_from_filename (filename);
|
|
|
|
if (icon_name) {
|
|
|
|
gtk_window_set_icon_name (GTK_WINDOW (widget), icon_name);
|
|
|
|
} else {
|
|
|
|
pixbuf = gdk_pixbuf_new_from_file (filename, NULL);
|
|
|
|
gtk_window_set_icon (GTK_WINDOW (widget), pixbuf);
|
|
|
|
g_object_unref (pixbuf);
|
|
|
|
}
|
2003-01-03 13:26:04 +00:00
|
|
|
}
|
|
|
|
|
2015-03-22 06:02:41 +00:00
|
|
|
void
|
2017-04-07 12:00:42 +00:00
|
|
|
zenity_util_set_window_icon (
|
|
|
|
GtkWidget *widget, const gchar *filename, const gchar *default_file) {
|
|
|
|
GdkPixbuf *pixbuf;
|
|
|
|
|
|
|
|
if (filename != NULL) {
|
|
|
|
zenity_util_set_window_icon_from_file (widget, filename);
|
|
|
|
} else {
|
|
|
|
pixbuf = gdk_pixbuf_new_from_file (default_file, NULL);
|
|
|
|
if (pixbuf != NULL) {
|
|
|
|
gtk_window_set_icon (GTK_WINDOW (widget), pixbuf);
|
|
|
|
g_object_unref (pixbuf);
|
|
|
|
}
|
|
|
|
}
|
2015-03-22 06:02:41 +00:00
|
|
|
}
|
Add new notification icon. Update for new files. Restructure code a little
2004-09-13 Glynn Foster <glynn.foster@sun.com>
* data/Makefile.am, data/zenity-notification.png: Add new
notification icon.
* src/Makefile.am: Update for new files.
* src/about.c, src/calendar.c, src/entry.c, src/fileselection.c,
src/progress.c, src/text.c, src/tree.c, src/msg.c: Restructure code a
little bit for new utility functions for setting window icons.
* src/eggtrayicon.c, src/eggtrayicon.h: New files for notification area
support.
* src/main.c, src/notification.c, src/util.c, src/util.h, src/zenity.h:
Add support for notification area.
* data/zenity.1, help/*: Update docs for notification and new file
selection changes.
2004-09-13 07:51:51 +00:00
|
|
|
|
2015-03-22 06:02:41 +00:00
|
|
|
void
|
2017-04-07 12:00:42 +00:00
|
|
|
zenity_util_set_window_icon_from_icon_name (
|
|
|
|
GtkWidget *widget, const gchar *filename, const gchar *default_icon_name) {
|
|
|
|
if (filename != NULL)
|
|
|
|
zenity_util_set_window_icon_from_file (widget, filename);
|
|
|
|
else
|
|
|
|
gtk_window_set_icon_name (GTK_WINDOW (widget), default_icon_name);
|
2003-01-03 13:26:04 +00:00
|
|
|
}
|
2003-01-14 15:35:24 +00:00
|
|
|
|
2004-02-29 07:34:28 +00:00
|
|
|
void
|
2017-04-07 12:00:42 +00:00
|
|
|
zenity_util_show_help (GError **error) {
|
|
|
|
gchar *tmp;
|
|
|
|
tmp = g_find_program_in_path ("yelp");
|
|
|
|
|
|
|
|
if (tmp) {
|
|
|
|
g_free (tmp);
|
|
|
|
g_spawn_command_line_async ("yelp help:zenity", error);
|
|
|
|
}
|
2003-01-14 15:35:24 +00:00
|
|
|
}
|
2003-06-07 14:41:56 +00:00
|
|
|
|
2017-04-07 12:00:42 +00:00
|
|
|
gint
|
|
|
|
zenity_util_return_exit_code (ZenityExitCode value) {
|
|
|
|
|
|
|
|
const gchar *env_var = NULL;
|
|
|
|
gint retval;
|
|
|
|
|
|
|
|
switch (value) {
|
|
|
|
|
|
|
|
case ZENITY_OK:
|
|
|
|
env_var = g_getenv ("ZENITY_OK");
|
|
|
|
if (!env_var)
|
|
|
|
env_var = g_getenv ("DIALOG_OK");
|
|
|
|
if (!env_var)
|
|
|
|
retval = ZENITY_OK_DEFAULT;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case ZENITY_CANCEL:
|
|
|
|
env_var = g_getenv ("ZENITY_CANCEL");
|
|
|
|
if (!env_var)
|
|
|
|
env_var = g_getenv ("DIALOG_CANCEL");
|
|
|
|
if (!env_var)
|
|
|
|
retval = ZENITY_CANCEL_DEFAULT;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case ZENITY_ESC:
|
|
|
|
env_var = g_getenv ("ZENITY_ESC");
|
|
|
|
if (!env_var)
|
|
|
|
env_var = g_getenv ("DIALOG_ESC");
|
|
|
|
if (!env_var)
|
|
|
|
retval = ZENITY_ESC_DEFAULT;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case ZENITY_EXTRA:
|
|
|
|
env_var = g_getenv ("ZENITY_EXTRA");
|
|
|
|
if (!env_var)
|
|
|
|
env_var = g_getenv ("DIALOG_EXTRA");
|
|
|
|
if (!env_var)
|
|
|
|
retval = ZENITY_EXTRA_DEFAULT;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case ZENITY_ERROR:
|
|
|
|
env_var = g_getenv ("ZENITY_ERROR");
|
|
|
|
if (!env_var)
|
|
|
|
env_var = g_getenv ("DIALOG_ERROR");
|
|
|
|
if (!env_var)
|
|
|
|
retval = ZENITY_ERROR_DEFAULT;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case ZENITY_TIMEOUT:
|
|
|
|
env_var = g_getenv ("ZENITY_TIMEOUT");
|
|
|
|
if (!env_var)
|
|
|
|
env_var = g_getenv ("DIALOG_TIMEOUT");
|
|
|
|
if (!env_var)
|
|
|
|
retval = ZENITY_TIMEOUT;
|
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
retval = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (env_var)
|
|
|
|
retval = atoi (env_var);
|
|
|
|
return retval;
|
2003-06-07 14:41:56 +00:00
|
|
|
}
|
Add from the 2 Sebastian's, and make email addresses more spam proof.
2004-04-26 Glynn Foster <glynn.foster@sun.com>
* THANKS, src/about.c: Add from the 2 Sebastian's, and make
email addresses more spam proof.
* src/calendar.c, src/entry.c, src/fileselection.c, src/msg.c,
* src/progress.c, src/text.c, src/tree.c, src/util.c,
* src/util.h: Patch from Sebastian Kapfer to make all zenity
dialogs transients of the parent xterm. Fixes #136226.
* src/zenity.glade: Patch from Sebastian Heinlein to
improve things HIG wise. Fixes #140745.
2004-04-26 04:41:25 +00:00
|
|
|
|
2011-06-17 13:47:07 +00:00
|
|
|
void
|
2017-04-07 12:00:42 +00:00
|
|
|
zenity_util_exit_code_with_data (ZenityExitCode value, ZenityData *zen_data) {
|
|
|
|
zen_data->exit_code = zenity_util_return_exit_code (value);
|
2011-06-17 13:47:07 +00:00
|
|
|
}
|
Add from the 2 Sebastian's, and make email addresses more spam proof.
2004-04-26 Glynn Foster <glynn.foster@sun.com>
* THANKS, src/about.c: Add from the 2 Sebastian's, and make
email addresses more spam proof.
* src/calendar.c, src/entry.c, src/fileselection.c, src/msg.c,
* src/progress.c, src/text.c, src/tree.c, src/util.c,
* src/util.h: Patch from Sebastian Kapfer to make all zenity
dialogs transients of the parent xterm. Fixes #136226.
* src/zenity.glade: Patch from Sebastian Heinlein to
improve things HIG wise. Fixes #140745.
2004-04-26 04:41:25 +00:00
|
|
|
|
|
|
|
#ifdef GDK_WINDOWING_X11
|
|
|
|
|
|
|
|
static Window
|
2017-04-07 12:00:42 +00:00
|
|
|
transient_get_xterm (void) {
|
|
|
|
const char *wid_str = g_getenv ("WINDOWID");
|
|
|
|
if (wid_str) {
|
|
|
|
char *wid_str_end;
|
|
|
|
int ret;
|
|
|
|
Window wid = strtoul (wid_str, &wid_str_end, 10);
|
|
|
|
if (*wid_str != '\0' && *wid_str_end == '\0' && wid != 0) {
|
|
|
|
XWindowAttributes attrs;
|
|
|
|
gdk_error_trap_push ();
|
|
|
|
ret = XGetWindowAttributes (
|
|
|
|
GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), wid, &attrs);
|
|
|
|
gdk_flush ();
|
|
|
|
if (gdk_error_trap_pop () != 0 || ret == 0) {
|
|
|
|
return None;
|
|
|
|
}
|
|
|
|
return wid;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return None;
|
Add from the 2 Sebastian's, and make email addresses more spam proof.
2004-04-26 Glynn Foster <glynn.foster@sun.com>
* THANKS, src/about.c: Add from the 2 Sebastian's, and make
email addresses more spam proof.
* src/calendar.c, src/entry.c, src/fileselection.c, src/msg.c,
* src/progress.c, src/text.c, src/tree.c, src/util.c,
* src/util.h: Patch from Sebastian Kapfer to make all zenity
dialogs transients of the parent xterm. Fixes #136226.
* src/zenity.glade: Patch from Sebastian Heinlein to
improve things HIG wise. Fixes #140745.
2004-04-26 04:41:25 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2017-04-07 12:00:42 +00:00
|
|
|
transient_x_free (void *ptr) {
|
|
|
|
if (ptr)
|
|
|
|
XFree (ptr);
|
Add from the 2 Sebastian's, and make email addresses more spam proof.
2004-04-26 Glynn Foster <glynn.foster@sun.com>
* THANKS, src/about.c: Add from the 2 Sebastian's, and make
email addresses more spam proof.
* src/calendar.c, src/entry.c, src/fileselection.c, src/msg.c,
* src/progress.c, src/text.c, src/tree.c, src/util.c,
* src/util.h: Patch from Sebastian Kapfer to make all zenity
dialogs transients of the parent xterm. Fixes #136226.
* src/zenity.glade: Patch from Sebastian Heinlein to
improve things HIG wise. Fixes #140745.
2004-04-26 04:41:25 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static gboolean
|
2017-04-07 12:00:42 +00:00
|
|
|
transient_is_toplevel (Window wid) {
|
|
|
|
XTextProperty prop;
|
|
|
|
Display *dpy = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ());
|
|
|
|
if (!XGetWMName (dpy, wid, &prop))
|
|
|
|
return FALSE;
|
|
|
|
transient_x_free (prop.value);
|
|
|
|
return !!prop.value;
|
Add from the 2 Sebastian's, and make email addresses more spam proof.
2004-04-26 Glynn Foster <glynn.foster@sun.com>
* THANKS, src/about.c: Add from the 2 Sebastian's, and make
email addresses more spam proof.
* src/calendar.c, src/entry.c, src/fileselection.c, src/msg.c,
* src/progress.c, src/text.c, src/tree.c, src/util.c,
* src/util.h: Patch from Sebastian Kapfer to make all zenity
dialogs transients of the parent xterm. Fixes #136226.
* src/zenity.glade: Patch from Sebastian Heinlein to
improve things HIG wise. Fixes #140745.
2004-04-26 04:41:25 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* GNOME Terminal doesn't give us its toplevel window, but the WM needs a
|
|
|
|
* toplevel XID for proper stacking. Other terminals work fine without this
|
|
|
|
* magic. We can't use GDK here since "xterm" is a foreign window.
|
|
|
|
*/
|
|
|
|
|
|
|
|
static Window
|
2017-04-07 12:00:42 +00:00
|
|
|
transient_get_xterm_toplevel (void) {
|
|
|
|
Window xterm = transient_get_xterm ();
|
|
|
|
Display *dpy = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ());
|
|
|
|
while (xterm != None && !transient_is_toplevel (xterm)) {
|
|
|
|
Window root, parent, *children;
|
|
|
|
unsigned nchildren;
|
|
|
|
XQueryTree (dpy, xterm, &root, &parent, &children, &nchildren);
|
|
|
|
transient_x_free (children);
|
|
|
|
if (parent == root)
|
|
|
|
xterm = None;
|
|
|
|
else
|
|
|
|
xterm = parent;
|
|
|
|
}
|
|
|
|
return xterm;
|
Add from the 2 Sebastian's, and make email addresses more spam proof.
2004-04-26 Glynn Foster <glynn.foster@sun.com>
* THANKS, src/about.c: Add from the 2 Sebastian's, and make
email addresses more spam proof.
* src/calendar.c, src/entry.c, src/fileselection.c, src/msg.c,
* src/progress.c, src/text.c, src/tree.c, src/util.c,
* src/util.h: Patch from Sebastian Kapfer to make all zenity
dialogs transients of the parent xterm. Fixes #136226.
* src/zenity.glade: Patch from Sebastian Heinlein to
improve things HIG wise. Fixes #140745.
2004-04-26 04:41:25 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2017-04-07 12:00:42 +00:00
|
|
|
zenity_util_make_transient (GdkWindow *window, Window parent) {
|
|
|
|
Window parent_window = parent;
|
|
|
|
if (parent_window == 0)
|
|
|
|
parent_window = transient_get_xterm_toplevel ();
|
|
|
|
if (parent_window != None) {
|
|
|
|
XSetTransientForHint (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()),
|
|
|
|
GDK_WINDOW_XID (window),
|
|
|
|
parent_window);
|
|
|
|
}
|
Add from the 2 Sebastian's, and make email addresses more spam proof.
2004-04-26 Glynn Foster <glynn.foster@sun.com>
* THANKS, src/about.c: Add from the 2 Sebastian's, and make
email addresses more spam proof.
* src/calendar.c, src/entry.c, src/fileselection.c, src/msg.c,
* src/progress.c, src/text.c, src/tree.c, src/util.c,
* src/util.h: Patch from Sebastian Kapfer to make all zenity
dialogs transients of the parent xterm. Fixes #136226.
* src/zenity.glade: Patch from Sebastian Heinlein to
improve things HIG wise. Fixes #140745.
2004-04-26 04:41:25 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#endif /* GDK_WINDOWING_X11 */
|
|
|
|
|
|
|
|
void
|
2017-04-07 12:00:42 +00:00
|
|
|
zenity_util_show_dialog (GtkWidget *dialog, guintptr parent) {
|
|
|
|
gtk_widget_realize (dialog);
|
Add from the 2 Sebastian's, and make email addresses more spam proof.
2004-04-26 Glynn Foster <glynn.foster@sun.com>
* THANKS, src/about.c: Add from the 2 Sebastian's, and make
email addresses more spam proof.
* src/calendar.c, src/entry.c, src/fileselection.c, src/msg.c,
* src/progress.c, src/text.c, src/tree.c, src/util.c,
* src/util.h: Patch from Sebastian Kapfer to make all zenity
dialogs transients of the parent xterm. Fixes #136226.
* src/zenity.glade: Patch from Sebastian Heinlein to
improve things HIG wise. Fixes #140745.
2004-04-26 04:41:25 +00:00
|
|
|
#ifdef GDK_WINDOWING_X11
|
2017-04-07 12:00:42 +00:00
|
|
|
if (GDK_IS_X11_DISPLAY (gdk_display_get_default ())) {
|
|
|
|
g_assert (gtk_widget_get_window (dialog));
|
|
|
|
zenity_util_make_transient (gtk_widget_get_window (dialog), parent);
|
|
|
|
}
|
Add from the 2 Sebastian's, and make email addresses more spam proof.
2004-04-26 Glynn Foster <glynn.foster@sun.com>
* THANKS, src/about.c: Add from the 2 Sebastian's, and make
email addresses more spam proof.
* src/calendar.c, src/entry.c, src/fileselection.c, src/msg.c,
* src/progress.c, src/text.c, src/tree.c, src/util.c,
* src/util.h: Patch from Sebastian Kapfer to make all zenity
dialogs transients of the parent xterm. Fixes #136226.
* src/zenity.glade: Patch from Sebastian Heinlein to
improve things HIG wise. Fixes #140745.
2004-04-26 04:41:25 +00:00
|
|
|
#endif
|
2017-04-07 12:00:42 +00:00
|
|
|
gtk_widget_show (dialog);
|
Add from the 2 Sebastian's, and make email addresses more spam proof.
2004-04-26 Glynn Foster <glynn.foster@sun.com>
* THANKS, src/about.c: Add from the 2 Sebastian's, and make
email addresses more spam proof.
* src/calendar.c, src/entry.c, src/fileselection.c, src/msg.c,
* src/progress.c, src/text.c, src/tree.c, src/util.c,
* src/util.h: Patch from Sebastian Kapfer to make all zenity
dialogs transients of the parent xterm. Fixes #136226.
* src/zenity.glade: Patch from Sebastian Heinlein to
improve things HIG wise. Fixes #140745.
2004-04-26 04:41:25 +00:00
|
|
|
}
|
|
|
|
|
2017-04-07 12:00:42 +00:00
|
|
|
gboolean
|
|
|
|
zenity_util_timeout_handle (gpointer data) {
|
|
|
|
GtkDialog *dialog = GTK_DIALOG (data);
|
|
|
|
if (dialog != NULL)
|
|
|
|
gtk_dialog_response (dialog, ZENITY_TIMEOUT);
|
|
|
|
else {
|
|
|
|
gtk_main_quit ();
|
|
|
|
exit (ZENITY_TIMEOUT);
|
|
|
|
}
|
|
|
|
return FALSE;
|
2007-08-13 20:36:29 +00:00
|
|
|
}
|