1/* 2 * Copyright (C) 2006 Michael Emmel mike.emmel@gmail.com 3 * Copyright (C) 2007, 2009 Holger Hans Peter Freyther 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: 9 * 1. Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * 2. Redistributions in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in the 13 * documentation and/or other materials provided with the distribution. 14 * 15 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY 16 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 18 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR 19 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 20 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 21 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 22 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 23 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 25 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 */ 27 28#include "config.h" 29#include "Widget.h" 30 31#include "Cursor.h" 32#include "GraphicsContext.h" 33#include "GtkVersioning.h" 34#include "HostWindow.h" 35#include "IntRect.h" 36#include "ScrollView.h" 37 38#include <gdk/gdk.h> 39#include <gtk/gtk.h> 40 41namespace WebCore { 42 43Widget::Widget(PlatformWidget widget) 44{ 45 init(widget); 46} 47 48Widget::~Widget() 49{ 50 ASSERT(!parent()); 51 52 releasePlatformWidget(); 53} 54 55void Widget::setFocus(bool) 56{ 57} 58 59void Widget::setCursor(const Cursor& cursor) 60{ 61 ScrollView* view = root(); 62 if (!view) 63 return; 64 view->hostWindow()->setCursor(cursor); 65} 66 67void Widget::show() 68{ 69 setSelfVisible(true); 70 71 if (isParentVisible() && platformWidget()) 72 gtk_widget_show(platformWidget()); 73} 74 75void Widget::hide() 76{ 77 setSelfVisible(false); 78 79 if (isParentVisible() && platformWidget()) 80 gtk_widget_hide(platformWidget()); 81} 82 83void Widget::paint(GraphicsContext*, const IntRect&) 84{ 85} 86 87void Widget::setIsSelected(bool isSelected) 88{ 89 if (!platformWidget()) 90 return; 91 92 // See if the platformWidget has a webkit-widget-is-selected property 93 // and set it afterwards. 94 GParamSpec* spec = g_object_class_find_property(G_OBJECT_GET_CLASS(platformWidget()), 95 "webkit-widget-is-selected"); 96 if (!spec) 97 return; 98 99 g_object_set(platformWidget(), "webkit-widget-is-selected", isSelected, NULL); 100} 101 102IntRect Widget::frameRect() const 103{ 104 return m_frame; 105} 106 107void Widget::setFrameRect(const IntRect& rect) 108{ 109 m_frame = rect; 110 frameRectsChanged(); 111} 112 113void Widget::releasePlatformWidget() 114{ 115 if (!platformWidget()) 116 return; 117 g_object_unref(platformWidget()); 118} 119 120void Widget::retainPlatformWidget() 121{ 122 if (!platformWidget()) 123 return; 124 g_object_ref_sink(platformWidget()); 125} 126 127} 128