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