Files
wxWidgets/src/gtk/clrpicker.cpp
Paul Cornett 9ff9d30c0a Hold a reference on m_widget for the life of the associated wxWindow object.
This allows removing some ugly hacks, and leaking of GtkWidgets by wxNotebook.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@55288 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2008-08-26 16:19:23 +00:00

97 lines
2.8 KiB
C++

/////////////////////////////////////////////////////////////////////////////
// Name: src/gtk/clrpicker.cpp
// Purpose: implementation of wxColourButton
// Author: Francesco Montorsi
// Modified By:
// Created: 15/04/2006
// Id: $Id$
// Copyright: (c) Francesco Montorsi
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
// ----------------------------------------------------------------------------
// headers
// ----------------------------------------------------------------------------
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#if wxUSE_COLOURPICKERCTRL
#include "wx/clrpicker.h"
#include <gtk/gtk.h>
// ============================================================================
// implementation
// ============================================================================
//-----------------------------------------------------------------------------
// "color-set"
//-----------------------------------------------------------------------------
extern "C" {
static void gtk_clrbutton_setcolor_callback(GtkColorButton *widget,
wxColourButton *p)
{
// update the m_colour member of the wxColourButton
wxASSERT(p);
GdkColor gdkColor;
gtk_color_button_get_color(widget, &gdkColor);
p->SetGdkColor(gdkColor);
// fire the colour-changed event
wxColourPickerEvent event(p, p->GetId(), p->GetColour());
p->HandleWindowEvent(event);
}
}
//-----------------------------------------------------------------------------
// wxColourButton
//-----------------------------------------------------------------------------
IMPLEMENT_DYNAMIC_CLASS(wxColourButton, wxButton)
bool wxColourButton::Create( wxWindow *parent, wxWindowID id,
const wxColour &col,
const wxPoint &pos, const wxSize &size,
long style, const wxValidator& validator,
const wxString &name )
{
if (!PreCreation( parent, pos, size ) ||
!wxControl::CreateBase(parent, id, pos, size, style, validator, name))
{
wxFAIL_MSG( wxT("wxColourButton creation failed") );
return false;
}
m_colour = col;
m_widget = gtk_color_button_new_with_color( m_colour.GetColor() );
g_object_ref(m_widget);
gtk_widget_show(m_widget);
// GtkColourButton signals
g_signal_connect(m_widget, "color-set",
G_CALLBACK(gtk_clrbutton_setcolor_callback), this);
m_parent->DoAddChild( this );
PostCreation(size);
SetInitialSize(size);
return true;
}
wxColourButton::~wxColourButton()
{
}
void wxColourButton::UpdateColour()
{
gtk_color_button_set_color(GTK_COLOR_BUTTON(m_widget), m_colour.GetColor());
}
#endif // wxUSE_COLOURPICKERCTRL