Revision: 1469
http://geeqie.svn.sourceforge.net/geeqie/?rev=1469&view=rev
Author: nadvornik
Date: 2009-03-02 22:48:04 +0000 (Mon, 02 Mar 2009)
Log Message:
-----------
overlay now survives image split
Modified Paths:
--------------
trunk/src/layout_image.c
trunk/src/pixbuf-renderer.c
Modified: trunk/src/layout_image.c
===================================================================
--- trunk/src/layout_image.c 2009-03-02 21:06:32 UTC (rev 1468)
+++ trunk/src/layout_image.c 2009-03-02 22:48:04 UTC (rev 1469)
@@ -1588,6 +1588,11 @@
image_set_frame(lw->split_images[i], frame);
image_set_selectable(lw->split_images[i], 1);
+ if (lw->image)
+ {
+ image_osd_copy_status(lw->image,
lw->split_images[i]);
+ }
+
if (layout_selection_count(lw, 0) > 1)
{
GList *work =
g_list_last(layout_selection_list(lw));
Modified: trunk/src/pixbuf-renderer.c
===================================================================
--- trunk/src/pixbuf-renderer.c 2009-03-02 21:06:32 UTC (rev 1468)
+++ trunk/src/pixbuf-renderer.c 2009-03-02 22:48:04 UTC (rev 1469)
@@ -221,6 +221,7 @@
static void pr_signals_connect(PixbufRenderer *pr);
static void pr_size_cb(GtkWidget *widget, GtkAllocation *allocation, gpointer
data);
+static void pr_unmap_cb(GtkWidget *widget, gpointer data);
static void pixbuf_renderer_paint(PixbufRenderer *pr, GdkRectangle *area);
static gint pr_queue_draw_idle_cb(gpointer data);
@@ -519,6 +520,9 @@
g_signal_connect_after(G_OBJECT(box), "size_allocate",
G_CALLBACK(pr_size_cb), pr);
+ g_signal_connect(G_OBJECT(pr), "unmap",
+ G_CALLBACK(pr_unmap_cb), pr);
+
pr_signals_connect(pr);
}
@@ -852,6 +856,27 @@
if (h) *h = ph;
}
+static void pr_overlay_init_window(PixbufRenderer *pr, OverlayData *od)
+{
+ gint px, py, pw, ph;
+ GdkWindowAttr attributes;
+ gint attributes_mask;
+
+ pr_overlay_get_position(pr, od, &px, &py, &pw, &ph);
+
+ attributes.window_type = GDK_WINDOW_CHILD;
+ attributes.wclass = GDK_INPUT_OUTPUT;
+ attributes.width = pw;
+ attributes.height = ph;
+ attributes.event_mask = GDK_EXPOSURE_MASK;
+ attributes_mask = 0;
+
+ od->window = gdk_window_new(GTK_WIDGET(pr)->window, &attributes,
attributes_mask);
+ gdk_window_set_user_data(od->window, pr);
+ gdk_window_move(od->window, px, py);
+ gdk_window_show(od->window);
+}
+
static void pr_overlay_draw(PixbufRenderer *pr, gint x, gint y, gint w, gint h,
ImageTile *it)
{
@@ -870,6 +895,8 @@
od = work->data;
work = work->next;
+ if (!od->window) pr_overlay_init_window(pr, od);
+
pr_overlay_get_position(pr, od, &px, &py, &pw, &ph);
if (pr_clip_region(x, y, w, h, px, py, pw, ph, &rx, &ry, &rw,
&rh))
{
@@ -965,7 +992,7 @@
OverlayData *od = work->data;
work = work->next;
- if (!od->window) continue;
+ if (!od->window) pr_overlay_init_window(pr, od);
if (od->flags & OVL_RELATIVE)
{
@@ -993,14 +1020,12 @@
return NULL;
}
+
gint pixbuf_renderer_overlay_add(PixbufRenderer *pr, GdkPixbuf *pixbuf, gint
x, gint y,
OverlayRendererFlags flags)
{
OverlayData *od;
gint id;
- gint px, py, pw, ph;
- GdkWindowAttr attributes;
- gint attributes_mask;
g_return_val_if_fail(IS_PIXBUF_RENDERER(pr), -1);
g_return_val_if_fail(pixbuf != NULL, -1);
@@ -1016,20 +1041,8 @@
od->y = y;
od->flags = flags;
- pr_overlay_get_position(pr, od, &px, &py, &pw, &ph);
-
- attributes.window_type = GDK_WINDOW_CHILD;
- attributes.wclass = GDK_INPUT_OUTPUT;
- attributes.width = pw;
- attributes.height = ph;
- attributes.event_mask = GDK_EXPOSURE_MASK;
- attributes_mask = 0;
-
- od->window = gdk_window_new(GTK_WIDGET(pr)->window, &attributes,
attributes_mask);
- gdk_window_set_user_data(od->window, pr);
- gdk_window_move(od->window, px, py);
- gdk_window_show(od->window);
-
+ pr_overlay_init_window(pr, od);
+
pr->overlay_list = g_list_append(pr->overlay_list, od);
pr_overlay_queue_draw(pr, od);
@@ -1063,6 +1076,23 @@
}
}
+static void pr_overlay_list_reset_window(PixbufRenderer *pr)
+{
+ GList *work;
+
+ if (pr->overlay_buffer) g_object_unref(pr->overlay_buffer);
+ pr->overlay_buffer = NULL;
+
+ work = pr->overlay_list;
+ while (work)
+ {
+ OverlayData *od = work->data;
+ work = work->next;
+ if (od->window) gdk_window_destroy(od->window);
+ od->window = NULL;
+ }
+}
+
void pixbuf_renderer_overlay_set(PixbufRenderer *pr, gint id, GdkPixbuf
*pixbuf, gint x, gint y)
{
OverlayData *od;
@@ -1115,6 +1145,13 @@
pixbuf_renderer_overlay_set(pr, id, NULL, 0, 0);
}
+static void pr_unmap_cb(GtkWidget *widget, gpointer data)
+{
+ PixbufRenderer *pr = data;
+ pr_overlay_list_reset_window(pr);
+}
+
+
/*
*-------------------------------------------------------------------
* scroller overlay
@@ -3799,6 +3836,8 @@
G_CALLBACK(pr_mouse_release_cb), pr);
g_signal_connect(G_OBJECT(pr), "leave_notify_event",
G_CALLBACK(pr_mouse_leave_cb), pr);
+ g_signal_connect(G_OBJECT(pr), "unmap",
+ G_CALLBACK(pr_unmap_cb), pr);
gtk_widget_set_events(GTK_WIDGET(pr), GDK_POINTER_MOTION_MASK |
GDK_BUTTON_RELEASE_MASK |
GDK_BUTTON_PRESS_MASK |
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA
-OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise
-Strategies to boost innovation and cut costs with open source participation
-Receive a $600 discount off the registration fee with the source code: SFAD
http://p.sf.net/sfu/XcvMzF8H
_______________________________________________
Geeqie-svn mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geeqie-svn