mirror of
https://gitlab.gnome.org/GNOME/gimp
synced 2024-10-21 03:52:33 +00:00
added a DND type for GimpImage.
2001-04-13 Michael Natterer <mitch@gimp.org> * app/gimpdnd.c: added a DND type for GimpImage. * app/tools/tools.c: don't register bezier select twice. * app/widgets/gimpdockbook.[ch]: hacked the popup menu a bit.
This commit is contained in:
parent
63f7a21ac6
commit
330072d625
|
@ -1,3 +1,11 @@
|
|||
2001-04-13 Michael Natterer <mitch@gimp.org>
|
||||
|
||||
* app/gimpdnd.c: added a DND type for GimpImage.
|
||||
|
||||
* app/tools/tools.c: don't register bezier select twice.
|
||||
|
||||
* app/widgets/gimpdockbook.[ch]: hacked the popup menu a bit.
|
||||
|
||||
2001-04-11 Stanislav Brabec <utx@penguin.cz>
|
||||
|
||||
On request of Martin Weber <martweb@gmx.net>:
|
||||
|
|
|
@ -28,6 +28,8 @@
|
|||
|
||||
#include "apptypes.h"
|
||||
|
||||
#include "pdb/procedural_db.h"
|
||||
|
||||
#include "tools/gimptool.h"
|
||||
#include "tools/gimptoolinfo.h"
|
||||
#include "tools/tool_manager.h"
|
||||
|
@ -62,6 +64,7 @@ typedef enum
|
|||
{
|
||||
GIMP_DND_DATA_NONE,
|
||||
GIMP_DND_DATA_COLOR,
|
||||
GIMP_DND_DATA_IMAGE,
|
||||
GIMP_DND_DATA_LAYER,
|
||||
GIMP_DND_DATA_CHANNEL,
|
||||
GIMP_DND_DATA_LAYER_MASK,
|
||||
|
@ -117,6 +120,11 @@ static guchar * gimp_dnd_get_color_data (GtkWidget *widget,
|
|||
gpointer get_color_data,
|
||||
gint *format,
|
||||
gint *length);
|
||||
static guchar * gimp_dnd_get_image_data (GtkWidget *widget,
|
||||
GtkSignalFunc get_image_func,
|
||||
gpointer get_image_data,
|
||||
gint *format,
|
||||
gint *length);
|
||||
static guchar * gimp_dnd_get_drawable_data (GtkWidget *widget,
|
||||
GtkSignalFunc get_drawable_func,
|
||||
gpointer get_drawable_data,
|
||||
|
@ -139,6 +147,12 @@ static void gimp_dnd_set_color_data (GtkWidget *widget,
|
|||
guchar *vals,
|
||||
gint format,
|
||||
gint length);
|
||||
static void gimp_dnd_set_image_data (GtkWidget *widget,
|
||||
GtkSignalFunc set_image_func,
|
||||
gpointer set_image_data,
|
||||
guchar *vals,
|
||||
gint format,
|
||||
gint length);
|
||||
static void gimp_dnd_set_drawable_data (GtkWidget *widget,
|
||||
GtkSignalFunc set_drawable_func,
|
||||
gpointer set_drawable_data,
|
||||
|
@ -201,6 +215,17 @@ static GimpDndDataDef dnd_data_defs[] =
|
|||
gimp_dnd_set_color_data
|
||||
},
|
||||
|
||||
{
|
||||
GIMP_TARGET_IMAGE,
|
||||
|
||||
"gimp_dnd_set_image_func",
|
||||
"gimp_dnd_set_image_data",
|
||||
|
||||
gimp_dnd_get_viewable_icon,
|
||||
gimp_dnd_get_image_data,
|
||||
gimp_dnd_set_image_data,
|
||||
},
|
||||
|
||||
{
|
||||
GIMP_TARGET_LAYER,
|
||||
|
||||
|
@ -693,7 +718,11 @@ gimp_dnd_data_type_get_by_gtk_type (GtkType type)
|
|||
{
|
||||
GimpDndDataType dnd_type = GIMP_DND_DATA_NONE;
|
||||
|
||||
if (gtk_type_is_a (type, GIMP_TYPE_LAYER))
|
||||
if (gtk_type_is_a (type, GIMP_TYPE_IMAGE))
|
||||
{
|
||||
dnd_type = GIMP_DND_DATA_IMAGE;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_LAYER))
|
||||
{
|
||||
dnd_type = GIMP_DND_DATA_LAYER;
|
||||
}
|
||||
|
@ -887,6 +916,69 @@ gimp_dnd_get_drag_data (GtkWidget *widget)
|
|||
|
||||
}
|
||||
|
||||
|
||||
/*************************/
|
||||
/* image dnd functions */
|
||||
/*************************/
|
||||
|
||||
static guchar *
|
||||
gimp_dnd_get_image_data (GtkWidget *widget,
|
||||
GtkSignalFunc get_image_func,
|
||||
gpointer get_image_data,
|
||||
gint *format,
|
||||
gint *length)
|
||||
{
|
||||
GimpImage *gimage;
|
||||
gchar *id;
|
||||
|
||||
gimage = (GimpImage *)
|
||||
(* (GimpDndDragViewableFunc) get_image_func) (widget, get_image_data);
|
||||
|
||||
if (! gimage)
|
||||
return NULL;
|
||||
|
||||
id = g_strdup_printf ("%d", pdb_image_to_id (gimage));
|
||||
|
||||
*format = 8;
|
||||
*length = strlen (id) + 1;
|
||||
|
||||
return (guchar *) id;
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_dnd_set_image_data (GtkWidget *widget,
|
||||
GtkSignalFunc set_image_func,
|
||||
gpointer set_image_data,
|
||||
guchar *vals,
|
||||
gint format,
|
||||
gint length)
|
||||
{
|
||||
GimpImage *gimage;
|
||||
gchar *id;
|
||||
gint ID;
|
||||
|
||||
if ((format != 8) || (length < 1))
|
||||
{
|
||||
g_warning ("%s(): received invalid image ID data", G_GNUC_FUNCTION);
|
||||
return;
|
||||
}
|
||||
|
||||
id = (gchar *) vals;
|
||||
|
||||
ID = atoi (id);
|
||||
|
||||
if (! ID)
|
||||
return;
|
||||
|
||||
gimage = pdb_id_to_image (ID);
|
||||
|
||||
if (gimage)
|
||||
(* (GimpDndDropViewableFunc) set_image_func) (widget,
|
||||
GIMP_VIEWABLE (gimage),
|
||||
set_image_data);
|
||||
}
|
||||
|
||||
|
||||
/****************************/
|
||||
/* drawable dnd functions */
|
||||
/****************************/
|
||||
|
|
|
@ -99,7 +99,6 @@ register_tools (void)
|
|||
|
||||
gimp_bezier_select_tool_register ();
|
||||
gimp_iscissors_tool_register ();
|
||||
gimp_bezier_select_tool_register ();
|
||||
gimp_fuzzy_select_tool_register ();
|
||||
gimp_free_select_tool_register ();
|
||||
gimp_ellipse_select_tool_register ();
|
||||
|
|
|
@ -28,6 +28,8 @@
|
|||
|
||||
#include "apptypes.h"
|
||||
|
||||
#include "pdb/procedural_db.h"
|
||||
|
||||
#include "tools/gimptool.h"
|
||||
#include "tools/gimptoolinfo.h"
|
||||
#include "tools/tool_manager.h"
|
||||
|
@ -62,6 +64,7 @@ typedef enum
|
|||
{
|
||||
GIMP_DND_DATA_NONE,
|
||||
GIMP_DND_DATA_COLOR,
|
||||
GIMP_DND_DATA_IMAGE,
|
||||
GIMP_DND_DATA_LAYER,
|
||||
GIMP_DND_DATA_CHANNEL,
|
||||
GIMP_DND_DATA_LAYER_MASK,
|
||||
|
@ -117,6 +120,11 @@ static guchar * gimp_dnd_get_color_data (GtkWidget *widget,
|
|||
gpointer get_color_data,
|
||||
gint *format,
|
||||
gint *length);
|
||||
static guchar * gimp_dnd_get_image_data (GtkWidget *widget,
|
||||
GtkSignalFunc get_image_func,
|
||||
gpointer get_image_data,
|
||||
gint *format,
|
||||
gint *length);
|
||||
static guchar * gimp_dnd_get_drawable_data (GtkWidget *widget,
|
||||
GtkSignalFunc get_drawable_func,
|
||||
gpointer get_drawable_data,
|
||||
|
@ -139,6 +147,12 @@ static void gimp_dnd_set_color_data (GtkWidget *widget,
|
|||
guchar *vals,
|
||||
gint format,
|
||||
gint length);
|
||||
static void gimp_dnd_set_image_data (GtkWidget *widget,
|
||||
GtkSignalFunc set_image_func,
|
||||
gpointer set_image_data,
|
||||
guchar *vals,
|
||||
gint format,
|
||||
gint length);
|
||||
static void gimp_dnd_set_drawable_data (GtkWidget *widget,
|
||||
GtkSignalFunc set_drawable_func,
|
||||
gpointer set_drawable_data,
|
||||
|
@ -201,6 +215,17 @@ static GimpDndDataDef dnd_data_defs[] =
|
|||
gimp_dnd_set_color_data
|
||||
},
|
||||
|
||||
{
|
||||
GIMP_TARGET_IMAGE,
|
||||
|
||||
"gimp_dnd_set_image_func",
|
||||
"gimp_dnd_set_image_data",
|
||||
|
||||
gimp_dnd_get_viewable_icon,
|
||||
gimp_dnd_get_image_data,
|
||||
gimp_dnd_set_image_data,
|
||||
},
|
||||
|
||||
{
|
||||
GIMP_TARGET_LAYER,
|
||||
|
||||
|
@ -693,7 +718,11 @@ gimp_dnd_data_type_get_by_gtk_type (GtkType type)
|
|||
{
|
||||
GimpDndDataType dnd_type = GIMP_DND_DATA_NONE;
|
||||
|
||||
if (gtk_type_is_a (type, GIMP_TYPE_LAYER))
|
||||
if (gtk_type_is_a (type, GIMP_TYPE_IMAGE))
|
||||
{
|
||||
dnd_type = GIMP_DND_DATA_IMAGE;
|
||||
}
|
||||
else if (gtk_type_is_a (type, GIMP_TYPE_LAYER))
|
||||
{
|
||||
dnd_type = GIMP_DND_DATA_LAYER;
|
||||
}
|
||||
|
@ -887,6 +916,69 @@ gimp_dnd_get_drag_data (GtkWidget *widget)
|
|||
|
||||
}
|
||||
|
||||
|
||||
/*************************/
|
||||
/* image dnd functions */
|
||||
/*************************/
|
||||
|
||||
static guchar *
|
||||
gimp_dnd_get_image_data (GtkWidget *widget,
|
||||
GtkSignalFunc get_image_func,
|
||||
gpointer get_image_data,
|
||||
gint *format,
|
||||
gint *length)
|
||||
{
|
||||
GimpImage *gimage;
|
||||
gchar *id;
|
||||
|
||||
gimage = (GimpImage *)
|
||||
(* (GimpDndDragViewableFunc) get_image_func) (widget, get_image_data);
|
||||
|
||||
if (! gimage)
|
||||
return NULL;
|
||||
|
||||
id = g_strdup_printf ("%d", pdb_image_to_id (gimage));
|
||||
|
||||
*format = 8;
|
||||
*length = strlen (id) + 1;
|
||||
|
||||
return (guchar *) id;
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_dnd_set_image_data (GtkWidget *widget,
|
||||
GtkSignalFunc set_image_func,
|
||||
gpointer set_image_data,
|
||||
guchar *vals,
|
||||
gint format,
|
||||
gint length)
|
||||
{
|
||||
GimpImage *gimage;
|
||||
gchar *id;
|
||||
gint ID;
|
||||
|
||||
if ((format != 8) || (length < 1))
|
||||
{
|
||||
g_warning ("%s(): received invalid image ID data", G_GNUC_FUNCTION);
|
||||
return;
|
||||
}
|
||||
|
||||
id = (gchar *) vals;
|
||||
|
||||
ID = atoi (id);
|
||||
|
||||
if (! ID)
|
||||
return;
|
||||
|
||||
gimage = pdb_id_to_image (ID);
|
||||
|
||||
if (gimage)
|
||||
(* (GimpDndDropViewableFunc) set_image_func) (widget,
|
||||
GIMP_VIEWABLE (gimage),
|
||||
set_image_data);
|
||||
}
|
||||
|
||||
|
||||
/****************************/
|
||||
/* drawable dnd functions */
|
||||
/****************************/
|
||||
|
|
|
@ -27,11 +27,12 @@
|
|||
|
||||
#include "apptypes.h"
|
||||
|
||||
#include "gimpdnd.h"
|
||||
#include "gimpdock.h"
|
||||
#include "gimpdockable.h"
|
||||
#include "gimpdockbook.h"
|
||||
|
||||
#include "gimpdnd.h"
|
||||
|
||||
|
||||
static void gimp_dockbook_class_init (GimpDockbookClass *klass);
|
||||
static void gimp_dockbook_init (GimpDockbook *dockbook);
|
||||
|
@ -114,7 +115,9 @@ gimp_dockbook_class_init (GimpDockbookClass *klass)
|
|||
static void
|
||||
gimp_dockbook_init (GimpDockbook *dockbook)
|
||||
{
|
||||
dockbook->dock = NULL;
|
||||
dockbook->dock = NULL;
|
||||
dockbook->remove_item = NULL;
|
||||
dockbook->add_item = NULL;
|
||||
|
||||
gtk_notebook_set_tab_border (GTK_NOTEBOOK (dockbook), 0);
|
||||
gtk_notebook_popup_enable (GTK_NOTEBOOK (dockbook));
|
||||
|
@ -126,6 +129,12 @@ gimp_dockbook_init (GimpDockbook *dockbook)
|
|||
GDK_ACTION_MOVE);
|
||||
}
|
||||
|
||||
GtkWidget *
|
||||
gimp_dockbook_new (void)
|
||||
{
|
||||
return GTK_WIDGET (gtk_type_new (GIMP_TYPE_DOCKBOOK));
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_dockbook_destroy (GtkObject *object)
|
||||
{
|
||||
|
@ -133,12 +142,6 @@ gimp_dockbook_destroy (GtkObject *object)
|
|||
GTK_OBJECT_CLASS (parent_class)->destroy (object);
|
||||
}
|
||||
|
||||
GtkWidget *
|
||||
gimp_dockbook_new (void)
|
||||
{
|
||||
return GTK_WIDGET (gtk_type_new (GIMP_TYPE_DOCKBOOK));
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gimp_dockbook_drag_drop (GtkWidget *widget,
|
||||
GdkDragContext *context,
|
||||
|
@ -290,9 +293,15 @@ gimp_dockbook_add (GimpDockbook *dockbook,
|
|||
gtk_widget_set_sensitive (item, FALSE);
|
||||
gtk_widget_show (item);
|
||||
|
||||
item = gtk_menu_item_new_with_label ("Test");
|
||||
gtk_menu_append (GTK_MENU (GTK_NOTEBOOK (dockbook)->menu), item);
|
||||
gtk_widget_show (item);
|
||||
dockbook->remove_item = gtk_menu_item_new_with_label ("Remove Tab");
|
||||
gtk_menu_append (GTK_MENU (GTK_NOTEBOOK (dockbook)->menu),
|
||||
dockbook->remove_item);
|
||||
gtk_widget_show (dockbook->remove_item);
|
||||
|
||||
dockbook->add_item = gtk_menu_item_new_with_label ("Add Tab");
|
||||
gtk_menu_append (GTK_MENU (GTK_NOTEBOOK (dockbook)->menu),
|
||||
dockbook->add_item);
|
||||
gtk_widget_show (dockbook->add_item);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -313,6 +322,9 @@ gimp_dockbook_remove (GimpDockbook *dockbook,
|
|||
{
|
||||
while (GTK_MENU_SHELL (GTK_NOTEBOOK (dockbook)->menu)->children->next)
|
||||
gtk_widget_destroy (GTK_WIDGET (GTK_MENU_SHELL (GTK_NOTEBOOK (dockbook)->menu)->children->next->data));
|
||||
|
||||
dockbook->remove_item = NULL;
|
||||
dockbook->add_item = NULL;
|
||||
}
|
||||
|
||||
dockable->dockbook = NULL;
|
||||
|
@ -340,7 +352,8 @@ gimp_dockbook_tab_button_press (GtkWidget *widget,
|
|||
case 3:
|
||||
gtk_menu_popup (GTK_MENU (GTK_NOTEBOOK (dockable->dockbook)->menu),
|
||||
NULL, NULL,
|
||||
NULL, NULL, 3, bevent->time);
|
||||
NULL, NULL,
|
||||
3, bevent->time);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
|
|
@ -40,6 +40,10 @@ struct _GimpDockbook
|
|||
GtkNotebook parent_instance;
|
||||
|
||||
GimpDock *dock;
|
||||
|
||||
/*< private >*/
|
||||
GtkWidget *remove_item;
|
||||
GtkWidget *add_item;
|
||||
};
|
||||
|
||||
struct _GimpDockbookClass
|
||||
|
|
Loading…
Reference in a new issue