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:
Michael Natterer 2001-04-13 12:10:22 +00:00 committed by Michael Natterer
parent 63f7a21ac6
commit 330072d625
6 changed files with 223 additions and 15 deletions

View file

@ -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>:

View file

@ -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 */
/****************************/

View file

@ -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 ();

View file

@ -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 */
/****************************/

View file

@ -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:

View file

@ -40,6 +40,10 @@ struct _GimpDockbook
GtkNotebook parent_instance;
GimpDock *dock;
/*< private >*/
GtkWidget *remove_item;
GtkWidget *add_item;
};
struct _GimpDockbookClass