BalsaMessage Take 3
- From: Ian Campbell <ijc25 cam ac uk>
- To: balsa-list gnome org
- Subject: BalsaMessage Take 3
- Date: Sun, 16 Apr 2000 15:19:48 +0100
Hi guys,
I was under the impression that the new BalsaMessage was going to wait until
after 0.8, so I was sitting in it. but since the AUTHORS file suggests that it
is coming soon to 0.8 I thought I would send it now.
The only major change to the last patch is that the headers, content and icons
all scroll at once, and I have added some key bindings to do this (arrows, page
up/down)
As well as the patch there is also two new files,
balsa-non-scrolled-window.[ch]. This is a widget which can contain a scrollable
widget (eg text area) in a non-scrolled way. It is needed to allow the text
area to scroll along with all the headers etc. It just hacks the size
requisition.
TTFN
Ian.
--
Ian Campbell
Churchill College, Cambridge.
new-balsa-message.patch.gz
/* Balsa E-Mail Client
* Copyright (C) 2000 Ian Campbell
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#include "config.h"
#include "balsa-non-scrolled-window.h"
static void balsa_non_scrolled_window_class_init(BalsaNonScrolledWindowClass *klass);
static void balsa_non_scrolled_window_init(BalsaNonScrolledWindow *bns);
/* Class methods */
static void balsa_non_scrolled_window_add(GtkContainer *container, GtkWidget *child);
static void balsa_non_scrolled_window_size_request(GtkWidget *widget, GtkRequisition *requisition);
static void balsa_non_scrolled_window_finalize(GtkObject *object);
static GtkEventBoxClass *parent_class = NULL;
GtkType balsa_non_scrolled_window_get_type(void)
{
static GtkType balsa_non_scrolled_window_type = 0;
if ( !balsa_non_scrolled_window_type) {
GtkTypeInfo balsa_non_scrolled_window_info = {
"BalsaNonScrolledWindow",
sizeof(BalsaNonScrolledWindow),
sizeof(BalsaNonScrolledWindowClass),
(GtkClassInitFunc) balsa_non_scrolled_window_class_init,
(GtkObjectInitFunc) balsa_non_scrolled_window_init,
(GtkArgSetFunc) NULL,
(GtkArgGetFunc) NULL,
(GtkClassInitFunc) NULL
};
balsa_non_scrolled_window_type = gtk_type_unique (gtk_event_box_get_type(),
&balsa_non_scrolled_window_info);
}
return balsa_non_scrolled_window_type;
}
GtkWidget *
balsa_non_scrolled_window_new(void)
{
BalsaNonScrolledWindow *bns;
bns = gtk_type_new (balsa_non_scrolled_window_get_type ());
return GTK_WIDGET(bns);
}
static void
balsa_non_scrolled_window_class_init(BalsaNonScrolledWindowClass *klass)
{
GtkContainerClass *container_class = GTK_CONTAINER_CLASS(klass);
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass);
GtkObjectClass *object_class = GTK_OBJECT_CLASS(klass);
parent_class = gtk_type_class(GTK_TYPE_EVENT_BOX);
container_class->add = balsa_non_scrolled_window_add;
widget_class->size_request = balsa_non_scrolled_window_size_request;
object_class->finalize = balsa_non_scrolled_window_finalize;
}
static void
balsa_non_scrolled_window_init(BalsaNonScrolledWindow *bns)
{
bns->vadj = GTK_ADJUSTMENT(gtk_adjustment_new(0.0, 0.0, 0.0, 0.0, 0.0, 0.0));
bns->hadj = GTK_ADJUSTMENT(gtk_adjustment_new(0.0, 0.0, 0.0, 0.0, 0.0, 0.0));
gtk_object_ref(GTK_OBJECT(bns->hadj));
gtk_object_ref(GTK_OBJECT(bns->vadj));
}
static void
balsa_non_scrolled_window_add(GtkContainer *container, GtkWidget *child)
{
BalsaNonScrolledWindow *bns;
g_return_if_fail(BALSA_IS_NON_SCROLLED_WINDOW(container));
bns = BALSA_NON_SCROLLED_WINDOW(container);
if ( !gtk_widget_set_scroll_adjustments(child, bns->hadj, bns->vadj)) {
g_warning("Cannot add non scrollable widget to a BalsaNonScrolledWindow\n");
return;
}
if ( GTK_CONTAINER_CLASS(parent_class)->add )
GTK_CONTAINER_CLASS(parent_class)->add(container, child);
}
static void
balsa_non_scrolled_window_size_request(GtkWidget *widget, GtkRequisition *requisition)
{
GtkBin *bin;
BalsaNonScrolledWindow *bns;
g_return_if_fail(widget != NULL);
g_return_if_fail(BALSA_IS_NON_SCROLLED_WINDOW(widget));
g_return_if_fail(requisition != NULL);
bin = GTK_BIN(widget);
bns = BALSA_NON_SCROLLED_WINDOW(widget);
requisition->width = ( GTK_CONTAINER (widget)->border_width + widget->style->klass->xthickness + 1 ) * 2;
requisition->height = ( GTK_CONTAINER (widget)->border_width + widget->style->klass->ythickness + 1 ) * 2;
if (bin->child && GTK_WIDGET_VISIBLE(bin->child) ) {
GtkRequisition child_requisition;
gtk_widget_size_request(bin->child, &child_requisition);
requisition->height += MAX(child_requisition.height, bns->vadj->upper - bns->vadj->lower );
requisition->width += MAX(child_requisition.width, bns->hadj->upper - bns->hadj->lower );
}
}
static void
balsa_non_scrolled_window_finalize(GtkObject *object)
{
BalsaNonScrolledWindow *bns = BALSA_NON_SCROLLED_WINDOW(object);
gtk_object_unref(GTK_OBJECT(bns->hadj));
gtk_object_unref(GTK_OBJECT(bns->vadj));
GTK_OBJECT_CLASS(parent_class)->finalize(object);
}
/* Balsa E-Mail Client
* Copyright (C) 2000 Ian Campbell
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#ifndef __BALSA_NON_SCROLLED_WINDOW_H__
#define __BALSA_NON_SCROLLED_WINDOW_H__
#include <gnome.h>
#include "libbalsa.h"
#ifdef __cplusplus
extern "C"
{
#endif
#define BALSA_NON_SCROLLED_WINDOW(obj) (GTK_CHECK_CAST((obj), balsa_non_scrolled_window_get_type(), \
BalsaNonScrolledWindow))
#define BALSA_NON_SCROLLED_WINDOW_CLASS(klass) (GTK_CHECK_CLASS_CAST((klass), \
balsa_non_scrolled_window_get_type(), BalsaNonScrolledWindowClass))
#define BALSA_IS_NON_SCROLLED_WINDOW(obj) (GTK_CHECK_TYPE(obj, balsa_non_scrolled_window_get_type()))
/* This widget contains a scrollable object in a non-scrolling fashion */
typedef struct _BalsaNonScrolledWindow BalsaNonScrolledWindow;
typedef struct _BalsaNonScrolledWindowClass BalsaNonScrolledWindowClass;
struct _BalsaNonScrolledWindow {
GtkEventBox parent;
GtkAdjustment *hadj;
GtkAdjustment *vadj;
};
struct _BalsaNonScrolledWindowClass {
GtkEventBoxClass parent_class;
};
/* BalsaNonScrolledWindow */
GtkWidget *balsa_non_scrolled_window_new(void);
GtkType balsa_non_scrolled_window_get_type(void);
#ifdef __cplusplus
}
#endif
#endif
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]