mirror of
https://gitlab.gnome.org/GNOME/glade.git
synced 2025-11-18 00:13:18 -05:00
219 lines
6.9 KiB
C
219 lines
6.9 KiB
C
/*
|
|
* glade-gtk-message-dialog.c - GladeWidgetAdaptor for GtkMessageDialog
|
|
*
|
|
* Copyright (C) 2013 Tristan Van Berkom
|
|
*
|
|
* Authors:
|
|
* Tristan Van Berkom <tristan.van.berkom@gmail.com>
|
|
*
|
|
* This library is free software; you can redistribute it and/or modify it
|
|
* under the terms of the GNU Lesser General Public License as
|
|
* published by the Free Software Foundation; either version 2.1 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
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
*/
|
|
|
|
#include <config.h>
|
|
#include <glib/gi18n-lib.h>
|
|
#include <gladeui/glade.h>
|
|
|
|
static gboolean
|
|
glade_gtk_message_dialog_reset_image (GtkMessageDialog * dialog)
|
|
{
|
|
GtkWidget *image;
|
|
gint message_type;
|
|
|
|
g_object_get (dialog, "message-type", &message_type, NULL);
|
|
if (message_type != GTK_MESSAGE_OTHER)
|
|
return FALSE;
|
|
|
|
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
|
|
image = gtk_message_dialog_get_image (dialog);
|
|
G_GNUC_END_IGNORE_DEPRECATIONS
|
|
if (glade_widget_get_from_gobject (image))
|
|
{
|
|
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
|
|
gtk_message_dialog_set_image (dialog,
|
|
gtk_image_new_from_stock (NULL,
|
|
GTK_ICON_SIZE_DIALOG));
|
|
G_GNUC_END_IGNORE_DEPRECATIONS
|
|
gtk_widget_show (image);
|
|
|
|
return TRUE;
|
|
}
|
|
else
|
|
return FALSE;
|
|
}
|
|
|
|
enum
|
|
{
|
|
MD_IMAGE_ACTION_INVALID,
|
|
MD_IMAGE_ACTION_RESET,
|
|
MD_IMAGE_ACTION_SET
|
|
};
|
|
|
|
static gint
|
|
glade_gtk_message_dialog_image_determine_action (GtkMessageDialog * dialog,
|
|
const GValue * value,
|
|
GtkWidget ** image,
|
|
GladeWidget ** gimage)
|
|
{
|
|
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
|
|
GtkWidget *dialog_image = gtk_message_dialog_get_image (dialog);
|
|
G_GNUC_END_IGNORE_DEPRECATIONS
|
|
|
|
*image = g_value_get_object (value);
|
|
|
|
if (*image == NULL)
|
|
if (dialog_image && glade_widget_get_from_gobject (dialog_image))
|
|
return MD_IMAGE_ACTION_RESET;
|
|
else
|
|
return MD_IMAGE_ACTION_INVALID;
|
|
else
|
|
{
|
|
*image = GTK_WIDGET (*image);
|
|
if (dialog_image == *image)
|
|
return MD_IMAGE_ACTION_INVALID;
|
|
if (gtk_widget_get_parent (*image))
|
|
return MD_IMAGE_ACTION_INVALID;
|
|
|
|
*gimage = glade_widget_get_from_gobject (*image);
|
|
|
|
if (!*gimage)
|
|
{
|
|
g_warning ("Setting property to an object outside the project");
|
|
return MD_IMAGE_ACTION_INVALID;
|
|
}
|
|
|
|
if (glade_widget_get_parent (*gimage) ||
|
|
GWA_IS_TOPLEVEL (glade_widget_get_adaptor (*gimage)))
|
|
return MD_IMAGE_ACTION_INVALID;
|
|
|
|
return MD_IMAGE_ACTION_SET;
|
|
}
|
|
}
|
|
|
|
void
|
|
glade_gtk_message_dialog_set_property (GladeWidgetAdaptor * adaptor,
|
|
GObject * object,
|
|
const gchar * id, const GValue * value)
|
|
{
|
|
GtkMessageDialog *dialog = GTK_MESSAGE_DIALOG (object);
|
|
GladeWidget *gwidget = glade_widget_get_from_gobject (object);
|
|
|
|
g_return_if_fail (gwidget);
|
|
|
|
if (strcmp (id, "image") == 0)
|
|
{
|
|
GtkWidget *image = NULL;
|
|
GladeWidget *gimage = NULL;
|
|
gint rslt;
|
|
|
|
rslt = glade_gtk_message_dialog_image_determine_action (dialog, value,
|
|
&image, &gimage);
|
|
switch (rslt)
|
|
{
|
|
case MD_IMAGE_ACTION_INVALID:
|
|
return;
|
|
case MD_IMAGE_ACTION_RESET:
|
|
glade_gtk_message_dialog_reset_image (dialog);
|
|
return;
|
|
case MD_IMAGE_ACTION_SET:
|
|
break; /* continue setting the property */
|
|
}
|
|
|
|
if (gtk_widget_get_parent (image))
|
|
g_critical ("Image should have no parent now");
|
|
|
|
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
|
|
gtk_message_dialog_set_image (dialog, image);
|
|
G_GNUC_END_IGNORE_DEPRECATIONS
|
|
|
|
{
|
|
/* syncing "message-type" property */
|
|
GladeProperty *property;
|
|
|
|
property = glade_widget_get_property (gwidget, "message-type");
|
|
if (!glade_property_equals (property, GTK_MESSAGE_OTHER))
|
|
glade_command_set_property (property, GTK_MESSAGE_OTHER);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
/* We must reset the image to internal,
|
|
* external image would otherwise become internal
|
|
*/
|
|
if (!strcmp (id, "message-type") &&
|
|
g_value_get_enum (value) != GTK_MESSAGE_OTHER)
|
|
{
|
|
GladeProperty *property;
|
|
|
|
property = glade_widget_get_property (gwidget, "image");
|
|
if (!glade_property_equals (property, NULL))
|
|
glade_command_set_property (property, NULL);
|
|
}
|
|
/* Chain up, even if property us message-type because
|
|
* it's not fully handled here
|
|
*/
|
|
GWA_GET_CLASS (GTK_TYPE_DIALOG)->set_property (adaptor, object,
|
|
id, value);
|
|
}
|
|
}
|
|
|
|
gboolean
|
|
glade_gtk_message_dialog_verify_property (GladeWidgetAdaptor * adaptor,
|
|
GObject * object,
|
|
const gchar * id,
|
|
const GValue * value)
|
|
{
|
|
if (!strcmp (id, "image"))
|
|
{
|
|
GtkWidget *image;
|
|
GladeWidget *gimage;
|
|
|
|
gboolean retval = MD_IMAGE_ACTION_INVALID !=
|
|
glade_gtk_message_dialog_image_determine_action (GTK_MESSAGE_DIALOG
|
|
(object),
|
|
value, &image,
|
|
&gimage);
|
|
|
|
return retval;
|
|
}
|
|
else if (GWA_GET_CLASS (GTK_TYPE_CONTAINER)->verify_property)
|
|
return GWA_GET_CLASS (GTK_TYPE_CONTAINER)->verify_property (adaptor, object,
|
|
id, value);
|
|
else
|
|
return TRUE;
|
|
}
|
|
|
|
void
|
|
glade_gtk_message_dialog_get_property (GladeWidgetAdaptor * adaptor,
|
|
GObject * object,
|
|
const gchar * property_name,
|
|
GValue * value)
|
|
{
|
|
if (!strcmp (property_name, "image"))
|
|
{
|
|
GtkMessageDialog *dialog = GTK_MESSAGE_DIALOG (object);
|
|
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
|
|
GtkWidget *image = gtk_message_dialog_get_image (dialog);
|
|
G_GNUC_END_IGNORE_DEPRECATIONS
|
|
|
|
if (!glade_widget_get_from_gobject (image))
|
|
g_value_set_object (value, NULL);
|
|
else
|
|
g_value_set_object (value, image);
|
|
}
|
|
else
|
|
GWA_GET_CLASS (GTK_TYPE_DIALOG)->get_property (adaptor, object,
|
|
property_name, value);
|
|
}
|