#import "OGWindow.h"
@interface OGWindow ()
- (BOOL)OG_willClose;
@end
static gboolean
willClose(GtkWidget *widget, GdkEvent *event, gpointer data)
{
return ([(OGWindow*)data OG_willClose] ? FALSE : TRUE);
}
@implementation OGWindow
@synthesize delegate;
+ window
{
return [[[self alloc] init] autorelease];
}
- init
{
self = [super init];
widget = gtk_window_new(GTK_WINDOW_TOPLEVEL);
g_signal_connect(G_OBJECT(widget), "delete-event",
G_CALLBACK(willClose), self);
g_signal_connect(G_OBJECT(widget), "destroy", G_CALLBACK(og_destroy),
self);
[self retain];
return self;
}
- (OFString*)title
{
return [OFString stringWithUTF8String:
gtk_window_get_title(GTK_WINDOW(widget))];
}
- (void)setTitle: (OFString*)title
{
gtk_window_set_title(GTK_WINDOW(widget), [title UTF8String]);
}
- (of_point_t)position
{
gint x, y;
gtk_window_get_position(GTK_WINDOW(widget), &x, &y);
return of_point(x, y);
}
- (void)setPosition: (of_point_t)position
{
gtk_window_move(GTK_WINDOW(widget), position.x, position.y);
}
- (of_dimension_t)dimension
{
gint width, height;
gtk_window_get_size(GTK_WINDOW(widget), &width, &height);
return of_dimension(width, height);
}
- (void)setDimension: (of_dimension_t)dimension
{
gtk_window_resize(GTK_WINDOW(widget),
dimension.width, dimension.height);
}
- (void)addChild: (OGWidget*)child
{
gtk_container_add(GTK_CONTAINER(widget), child->widget);
}
- (BOOL)OG_willClose
{
OFAutoreleasePool *pool = [OFAutoreleasePool new];
if ([delegate respondsToSelector: @selector(windowWillClose:)])
return [delegate windowWillClose: self];
[pool release];
return YES;
}
@end