aboutsummaryrefslogtreecommitdiffstats
path: root/graphics/gimp-app
diff options
context:
space:
mode:
authorerich <erich@FreeBSD.org>1996-11-26 23:56:17 +0800
committererich <erich@FreeBSD.org>1996-11-26 23:56:17 +0800
commit7466188b6823ef4ff841300e03c5c4094abf0f8a (patch)
tree5841744f59250f5beafa2bfd72c128ce11f588c8 /graphics/gimp-app
parentecce35ef29f93e533e63b0fd594cb899e922aacf (diff)
downloadfreebsd-ports-gnome-7466188b6823ef4ff841300e03c5c4094abf0f8a.tar.gz
freebsd-ports-gnome-7466188b6823ef4ff841300e03c5c4094abf0f8a.tar.zst
freebsd-ports-gnome-7466188b6823ef4ff841300e03c5c4094abf0f8a.zip
more patches
Obtained from: the gimp mailing list, and me
Diffstat (limited to 'graphics/gimp-app')
-rw-r--r--graphics/gimp-app/files/patch-ah208
1 files changed, 208 insertions, 0 deletions
diff --git a/graphics/gimp-app/files/patch-ah b/graphics/gimp-app/files/patch-ah
new file mode 100644
index 000000000000..8e508d8ad219
--- /dev/null
+++ b/graphics/gimp-app/files/patch-ah
@@ -0,0 +1,208 @@
+--- app/autodialog.c.old Fri Nov 22 15:46:44 1996
++++ app/autodialog.c Fri Nov 22 18:08:40 1996
+@@ -49,7 +49,7 @@
+ /* Local functions */
+ static AutoDialogItem dialog_find_item (AutoDialog, int);
+ static void dialog_delete_children (AutoDialog, AutoDialogItem);
+-static GtkWidget *dialog_create_image_menu (AutoDialog, char *, gpointer,
++static GtkWidget *dialog_create_image_menu (AutoDialog, AutoDialogItem, char *, gpointer,
+ GtkWidget **, GtkWidget **);
+
+ /* Callback and Update functions */
+@@ -171,7 +171,8 @@
+ {
+ dlgitem = tmplink->data;
+ tmplink = tmplink->next;
+-
++ if (dlgitem->additional_data!=NULL)
++ xfree(dlgitem->additional_data);
+ xfree (dlgitem);
+ }
+ free_list (dlg->items);
+@@ -206,6 +207,7 @@
+ item->item_ID = dlg->next_item_ID++;
+ item->item_type = type;
+ memset (item->data, 0, 32);
++ item->additional_data=NULL;
+ item->parent = parent_item;
+ item->children = NULL;
+ item->gtk_data = NULL;
+@@ -276,7 +278,7 @@
+ break;
+
+ case ITEM_IMAGE_MENU:
+- item_widget = dialog_create_image_menu (dlg, data, extra, &option_menu, &menu);
++ item_widget = dialog_create_image_menu (dlg, item, data, extra, &option_menu, &menu);
+ break;
+
+ case ITEM_SCALE:
+@@ -500,7 +502,8 @@
+ }
+ else
+ gtk_widget_destroy (item->widget);
+-
++ if (item->additional_data!=NULL)
++ xfree(item->additional_data);
+ xfree (item);
+ }
+ }
+@@ -577,9 +580,32 @@
+ free_list (item->children);
+ }
+
++typedef struct {
++ GtkWidget *widget;
++ long data[2];
++} _MenuItemData;
++
++gint CheckConstrains(GImage *gimage,GImage *constrain,guchar constraint)
++{
++ if (((constraint & IMAGE_CONSTRAIN_RGB) &&
++ (gimage_type (gimage) == RGB_GIMAGE ||
++ gimage_type (gimage) == RGBA_GIMAGE)) ||
++ ((constraint & IMAGE_CONSTRAIN_GRAY) &&
++ (gimage_type (gimage) == GRAY_GIMAGE ||
++ gimage_type (gimage) == GRAYA_GIMAGE)) ||
++ ((constraint & IMAGE_CONSTRAIN_INDEXED) &&
++ (gimage_type (gimage) == INDEXED_GIMAGE ||
++ gimage_type (gimage) == INDEXEDA_GIMAGE)))
++ if ((gimage->width == constrain->width) &&
++ (gimage->height == constrain->height))
++ return(TRUE);
++ return(FALSE);
++}
++
+ static GtkWidget *
+-dialog_create_image_menu (dlg, title, image, option_menu, menu)
++dialog_create_image_menu (dlg, item, title, image, option_menu, menu)
+ AutoDialog dlg;
++ AutoDialogItem item;
+ char *title;
+ void *image;
+ GtkWidget **option_menu;
+@@ -597,8 +623,8 @@
+ char constraint;
+ link_ptr tmp;
+ long ID;
+- long *data;
+ int num_items = 0;
++ _MenuItemData *ItemData;
+
+ hbox = gtk_hbox_new (FALSE, 4);
+ gtk_container_set_border_width (hbox, 0);
+@@ -614,43 +640,55 @@
+ constrain = (ID == 0) ? image : gimage_get_ID (ID);
+
+ tmp = image_list;
++
++ /* Check how many images fit the criteria */
++ /* ====================================== */
++
+ while (tmp)
+ {
+ gimage = tmp->data;
+ tmp = next_item (tmp);
+-
+- if (((constraint & IMAGE_CONSTRAIN_RGB) &&
+- (gimage_type (gimage) == RGB_GIMAGE ||
+- gimage_type (gimage) == RGBA_GIMAGE)) ||
+- ((constraint & IMAGE_CONSTRAIN_GRAY) &&
+- (gimage_type (gimage) == GRAY_GIMAGE ||
+- gimage_type (gimage) == GRAYA_GIMAGE)) ||
+- ((constraint & IMAGE_CONSTRAIN_INDEXED) &&
+- (gimage_type (gimage) == INDEXED_GIMAGE ||
+- gimage_type (gimage) == INDEXEDA_GIMAGE)))
+- if ((gimage->width == constrain->width) &&
+- (gimage->height == constrain->height))
+- {
+- image_name = prune_filename (gimage_filename (gimage));
+- menu_item_label = (char *) xmalloc (strlen (image_name) + 15);
+- sprintf (menu_item_label, "%s-%d", image_name, gimage->ID);
+- menu_item = gtk_menu_item_new_with_label (menu_item_label);
+- gtk_callback_add (gtk_menu_item_get_state (menu_item),
+- dialog_image_menu_callback, dlg);
+- gtk_container_add (*menu, menu_item);
+- gtk_widget_show (menu_item);
+-
+- data = xmalloc (sizeof (long) * 2);
+- data[0] = dlg->next_item_ID - 1;
+- data[1] = (gimage->ID == constrain->ID) ? 0 : gimage->ID;
+- dlg->additional_data = data;
+-
+- xfree (menu_item_label);
+- num_items ++;
+- }
++ if (CheckConstrains(gimage,constrain,constraint)==TRUE)
++ num_items++;
+ }
+
+- if (!num_items)
++ /* If we found any matches, allocate memory to hold */
++ /* callback data. Put a pointer in "item" to avoid leak. */
++ /* ===================================================== */
++
++ if (num_items>0)
++ {
++ ItemData=(_MenuItemData *)xmalloc(sizeof(_MenuItemData)*(size_t)num_items);
++ item->additional_data=ItemData;
++
++ tmp=image_list;
++ num_items=0;
++ while (tmp)
++ {
++ gimage = tmp->data;
++ tmp = next_item (tmp);
++ if (CheckConstrains(gimage,constrain,constraint)==TRUE)
++ {
++ image_name = prune_filename (gimage_filename (gimage));
++ menu_item_label = (char *) xmalloc (strlen (image_name) + 15);
++ sprintf (menu_item_label, "%s-%d", image_name, gimage->ID);
++
++ ItemData[num_items].widget=hbox;
++ ItemData[num_items].data[0] = dlg->next_item_ID - 1;
++ ItemData[num_items].data[1] = (gimage->ID == constrain->ID) ? 0 : gimage->ID;
++
++ menu_item = gtk_menu_item_new_with_label (menu_item_label);
++ gtk_callback_add (gtk_menu_item_get_state (menu_item),dialog_image_menu_callback,
++ (gpointer)&ItemData[num_items]);
++ gtk_container_add (*menu, menu_item);
++ gtk_widget_show (menu_item);
++
++ xfree (menu_item_label);
++ num_items ++;
++ }
++ }
++ }
++ else
+ {
+ menu_item = gtk_menu_item_new_with_label ("none");
+ gtk_container_add (*menu, menu_item);
+@@ -669,14 +707,14 @@
+ gpointer client_data;
+ gpointer call_data;
+ {
++ _MenuItemData *ItemData;
+ AutoDialog dlg;
+- long *data;
+
+- dlg = client_data;
+- data = (long *) dlg->additional_data;
++ ItemData=(_MenuItemData *)client_data;
++ dlg = (AutoDialog) gtk_widget_get_user_data (ItemData->widget);
+
+ if (dlg->callback)
+- (* dlg->callback) (dlg->dialog_ID, data[0], dlg->callback_data, &data[1]);
++ (* dlg->callback) (dlg->dialog_ID,ItemData->data[0],dlg->callback_data,&ItemData->data[1]);
+ }
+
+ static void
+--- app/autodialog.h.old Fri Nov 22 15:46:47 1996
++++ app/autodialog.h Fri Nov 22 17:21:19 1996
+@@ -49,6 +49,7 @@
+ int item_ID;
+ int item_type;
+ char data[32];
++ void *additional_data;
+ AutoDialogItem parent;
+ link_ptr children;
+ GtkWidget *widget;