/* * Copyright (c) 2011, 2012, Jonathan Schleifer * * https://webkeks.org/git/?p=objgui.git * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice is present in all copies. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ #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); } - (void)show { gtk_widget_show_all(widget); } - (BOOL)OG_willClose { OFAutoreleasePool *pool = [OFAutoreleasePool new]; if ([delegate respondsToSelector: @selector(windowWillClose:)]) return [delegate windowWillClose: self]; [pool release]; return YES; } @end