[balsa] Re-implement BalsaCiteBar as a GTK_NO_WINDOW widget
- From: Peter Bloomfield <PeterB src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [balsa] Re-implement BalsaCiteBar as a GTK_NO_WINDOW widget
- Date: Fri, 16 Oct 2009 01:11:01 +0000 (UTC)
commit 29becb3520e971637a16c66075f62336fe493ac8
Author: Peter Bloomfield <PeterBloomfield bellsouth net>
Date: Thu Oct 15 21:05:59 2009 -0400
Re-implement BalsaCiteBar as a GTK_NO_WINDOW widget
ChangeLog | 9 +++
src/balsa-cite-bar.c | 189 +++++++++++++++-----------------------------------
src/balsa-cite-bar.h | 20 -----
3 files changed, 66 insertions(+), 152 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index ccf2241..8ad52e0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,14 @@
2009-10-15 Peter Bloomfield
+ Re-implement BalsaCiteBar as a GTK_NO_WINDOW widget
+
+ * src/balsa-cite-bar.h: make BalsaCiteBar opaque.
+ * src/balsa-cite-bar.c (balsa_cite_bar_class_init),
+ (balsa_cite_bar_init), (balsa_cite_bar_resize),
+ (balsa_cite_bar_size_request), (balsa_cite_bar_expose):
+
+2009-10-15 Peter Bloomfield
+
Use gtk_window_present instead of gdk_window_raise
* libbalsa/identity.c (libbalsa_identity_select_dialog):
diff --git a/src/balsa-cite-bar.c b/src/balsa-cite-bar.c
index 173a19e..7401784 100644
--- a/src/balsa-cite-bar.c
+++ b/src/balsa-cite-bar.c
@@ -19,77 +19,57 @@
* 02111-1307, USA.
*/
-#include <string.h>
-#include <gdk/gdk.h>
-#include <gtk/gtk.h>
#include "balsa-cite-bar.h"
+struct _BalsaCiteBar {
+ GtkWidget widget;
-static void balsa_cite_bar_class_init(BalsaCiteBarClass *class);
-static void balsa_cite_bar_init(BalsaCiteBar *cite_bar);
-static void balsa_cite_bar_destroy(GtkObject *object);
-static void balsa_cite_bar_realise(GtkWidget *widget);
-static void balsa_cite_bar_size_request(GtkWidget *widget, GtkRequisition *requisition);
-static void balsa_cite_bar_size_allocate(GtkWidget *widget, GtkAllocation *allocation);
-static gboolean balsa_cite_bar_expose(GtkWidget *widget, GdkEventExpose *event);
+ /* Dimensions of each citation bar */
+ gint width;
+ gint height;
+ /* bar count and spacing */
+ gint bars;
+ gint space;
+};
-static GtkWidgetClass *parent_class = NULL;
+struct _BalsaCiteBarClass {
+ GtkWidgetClass parent_class;
+};
+static void balsa_cite_bar_size_request(GtkWidget * widget,
+ GtkRequisition * requisition);
+static gboolean balsa_cite_bar_expose (GtkWidget * widget,
+ GdkEventExpose * event);
-GType
-balsa_cite_bar_get_type(void)
-{
- static GType cite_bar_type = 0;
-
- if (!cite_bar_type) {
- static const GTypeInfo cite_bar_info = {
- sizeof(BalsaCiteBarClass),
- NULL, /* base_init */
- NULL,
- (GClassInitFunc) balsa_cite_bar_class_init,
- NULL, /* class_finalize */
- NULL, /* class_init */
- sizeof (BalsaCiteBar),
- 0, /* n_preallocs */
- (GInstanceInitFunc) balsa_cite_bar_init,
- NULL, /* value_table */
- };
- cite_bar_type =
- g_type_register_static(GTK_TYPE_WIDGET, "BalsaCiteBar",
- &cite_bar_info, 0);
- }
+G_DEFINE_TYPE(BalsaCiteBar, balsa_cite_bar, GTK_TYPE_WIDGET)
- return cite_bar_type;
-}
+static GtkWidgetClass *parent_class = NULL;
static void
-balsa_cite_bar_class_init(BalsaCiteBarClass *class)
+balsa_cite_bar_class_init(BalsaCiteBarClass * class)
{
- GtkObjectClass *object_class;
GtkWidgetClass *widget_class;
- object_class = (GtkObjectClass*) class;
- widget_class = (GtkWidgetClass*) class;
+ widget_class = (GtkWidgetClass *) class;
parent_class = g_type_class_peek_parent(class);
- object_class->destroy = balsa_cite_bar_destroy;
-
- widget_class->realize = balsa_cite_bar_realise;
widget_class->expose_event = balsa_cite_bar_expose;
widget_class->size_request = balsa_cite_bar_size_request;
- widget_class->size_allocate = balsa_cite_bar_size_allocate;
}
static void
-balsa_cite_bar_init(BalsaCiteBar *cite_bar)
+balsa_cite_bar_init(BalsaCiteBar * cite_bar)
{
- cite_bar->width = 0;
- cite_bar->height = 0;
+#if GTK_CHECK_VERSION(2, 18, 0)
+ gtk_widget_set_has_window(GTK_WIDGET(cite_bar), FALSE);
+#else /* GTK_CHECK_VERSION(2, 18, 0) */
+ GTK_WIDGET_SET_FLAGS(GTK_WIDGET(cite_bar), GTK_NO_WINDOW);
+#endif /* GTK_CHECK_VERSION(2, 18, 0) */
}
-GtkWidget*
+GtkWidget *
balsa_cite_bar_new(gint height, gint bars, gint dimension)
{
BalsaCiteBar *cite_bar;
@@ -105,16 +85,15 @@ balsa_cite_bar_new(gint height, gint bars, gint dimension)
* at least 1 pixel */
cite_bar->width = dimension / 4;
if (cite_bar->width == 0)
- cite_bar->width = 1;
+ cite_bar->width = 1;
cite_bar->space = dimension - cite_bar->width;
return GTK_WIDGET(cite_bar);
}
void
-balsa_cite_bar_resize(BalsaCiteBar *cite_bar, gint height)
+balsa_cite_bar_resize(BalsaCiteBar * cite_bar, gint height)
{
- g_return_if_fail(cite_bar != NULL);
g_return_if_fail(BALSA_IS_CITE_BAR(cite_bar));
cite_bar->height = height;
@@ -122,94 +101,40 @@ balsa_cite_bar_resize(BalsaCiteBar *cite_bar, gint height)
}
static void
-balsa_cite_bar_destroy(GtkObject *object)
-{
- g_return_if_fail(object != NULL);
- g_return_if_fail(BALSA_IS_CITE_BAR(object));
-
- if (GTK_OBJECT_CLASS (parent_class)->destroy)
- (*GTK_OBJECT_CLASS(parent_class)->destroy)(object);
-}
-
-static void
-balsa_cite_bar_realise(GtkWidget *widget)
+balsa_cite_bar_size_request(GtkWidget * widget,
+ GtkRequisition * requisition)
{
- BalsaCiteBar *cite_bar;
- GdkWindowAttr attributes;
- gint attributes_mask;
-
- g_return_if_fail(widget != NULL);
- g_return_if_fail(BALSA_IS_CITE_BAR(widget));
-
- GTK_WIDGET_SET_FLAGS(widget, GTK_REALIZED);
- cite_bar = BALSA_CITE_BAR(widget);
-
- attributes.x = widget->allocation.x;
- attributes.y = widget->allocation.y;
- attributes.width = widget->allocation.width;
- attributes.height = widget->allocation.height;
- attributes.wclass = GDK_INPUT_OUTPUT;
- attributes.window_type = GDK_WINDOW_CHILD;
- attributes.event_mask = gtk_widget_get_events(widget) |
- GDK_EXPOSURE_MASK;
- attributes.visual = gtk_widget_get_visual(widget);
- attributes.colormap = gtk_widget_get_colormap(widget);
-
- attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
- widget->window = gdk_window_new(widget->parent->window, &attributes, attributes_mask);
+ BalsaCiteBar *cite_bar = BALSA_CITE_BAR(widget);
- widget->style = gtk_style_attach(widget->style, widget->window);
-
- gdk_window_set_user_data(widget->window, widget);
-
- gtk_style_set_background(widget->style, widget->window, GTK_STATE_NORMAL);
-}
-
-static void
-balsa_cite_bar_size_request(GtkWidget *widget, GtkRequisition *requisition)
-{
- BalsaCiteBar *cite_bar;
-
- g_return_if_fail(widget != NULL);
- g_return_if_fail(BALSA_IS_CITE_BAR(widget));
- cite_bar = BALSA_CITE_BAR(widget);
-
- requisition->width = (cite_bar->bars - 1) * (cite_bar->width + cite_bar->space) +
- cite_bar->width;
+ requisition->width =
+ cite_bar->bars * (cite_bar->width + cite_bar->space) -
+ cite_bar->space;
requisition->height = cite_bar->height;
}
-static void
-balsa_cite_bar_size_allocate(GtkWidget *widget, GtkAllocation *allocation)
-{
- g_return_if_fail(widget != NULL);
- g_return_if_fail(BALSA_IS_CITE_BAR(widget));
-
- widget->allocation = *allocation;
- if (GTK_WIDGET_REALIZED(widget))
- gdk_window_move_resize(widget->window,
- allocation->x, allocation->y,
- allocation->width, allocation->height);
-}
-
static gboolean
-balsa_cite_bar_expose(GtkWidget *widget, GdkEventExpose *event)
+balsa_cite_bar_expose(GtkWidget * widget, GdkEventExpose * event)
{
- BalsaCiteBar *cite_bar;
- int n;
-
- g_return_val_if_fail(widget != NULL, FALSE);
- g_return_val_if_fail(BALSA_IS_CITE_BAR(widget), FALSE);
- g_return_val_if_fail(event != NULL, FALSE);
-
- if (event->count > 0)
- return FALSE;
-
- cite_bar = BALSA_CITE_BAR(widget);
- gdk_window_clear(widget->window);
- for (n = 0; n < cite_bar->bars; n++)
- gdk_draw_rectangle(widget->window, widget->style->fg_gc[GTK_STATE_NORMAL], TRUE,
- n * (cite_bar->width + cite_bar->space), 0,
- cite_bar->width, cite_bar->height);
+ if (!event->count) {
+ BalsaCiteBar *cite_bar = BALSA_CITE_BAR(widget);
+ GdkWindow *window = gtk_widget_get_window(widget);
+ GdkGC *gc = gtk_widget_get_style(widget)->fg_gc[GTK_STATE_NORMAL];
+ GtkAllocation allocation;
+ int n;
+
+#if GTK_CHECK_VERSION(2, 18, 0)
+ gtk_widget_get_allocation(widget, &allocation);
+#else /* GTK_CHECK_VERSION(2, 18, 0) */
+ allocation.x = widget->allocation.x;
+ allocation.y = widget->allocation.y;
+#endif /* GTK_CHECK_VERSION(2, 18, 0) */
+ for (n = 0; n < cite_bar->bars; n++) {
+ gdk_draw_rectangle(window, gc, TRUE,
+ allocation.x, allocation.y,
+ cite_bar->width, cite_bar->height);
+ allocation.x += cite_bar->width + cite_bar->space;
+ }
+ }
+
return FALSE;
}
diff --git a/src/balsa-cite-bar.h b/src/balsa-cite-bar.h
index 2b82bb7..8818635 100644
--- a/src/balsa-cite-bar.h
+++ b/src/balsa-cite-bar.h
@@ -22,7 +22,6 @@
#ifndef __BALSA_CITE_BAR_H__
#define __BALSA_CITE_BAR_H__
-#include <gdk/gdk.h>
#include <gtk/gtk.h>
@@ -40,25 +39,6 @@ G_BEGIN_DECLS
typedef struct _BalsaCiteBar BalsaCiteBar;
typedef struct _BalsaCiteBarClass BalsaCiteBarClass;
-struct _BalsaCiteBar
-{
- GtkWidget misc;
-
- /* Dimensions of each citation bar */
- gint width;
- gint height;
-
- /* bar count and spacing */
- gint bars;
- gint space;
-};
-
-struct _BalsaCiteBarClass
-{
- GtkWidgetClass parent_class;
-};
-
-
GType balsa_cite_bar_get_type (void) G_GNUC_CONST;
GtkWidget* balsa_cite_bar_new (gint height, gint bars, gint dimension);
void balsa_cite_bar_resize (BalsaCiteBar *cite_bar, gint height);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]