Fixes for wxlist

improvements for DnD :-)
  moer dialog and frame fine tuning


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@1058 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robert Roebling 1998-11-26 07:11:24 +00:00
parent 7fe7d506b1
commit a802c3a1f6
15 changed files with 570 additions and 63 deletions

View File

@ -1,8 +1,8 @@
* The most simple case
-----------------------
If you compile wxWindows on Unix for the first time and don't like
to read install instructions just do (in the base dir):
If you compile wxWindows on Unix for the first time and don't
like to read install instructions just do (in the base dir):
./configure --without-threads
make
@ -11,33 +11,42 @@ and drink 10 coffees. Then you may log in as root and type
make install
You can leave out the --without-threads option if you have a NEW
Linux distribution based on glibc (e.g. RedHat 5.1 or Debian 2.0)
or any other Unix that comes with Posix threads or SGI threads.
You can leave out the --without-threads option if you have
a NEW Linux distribution based on glibc (e.g. RedHat 5.1 or
Debian 2.0) or any other Unix that comes with Posix threads
or SGI threads.
Now create your super-application myfoo.app and compile anywhere with
Now create your super-application myfoo.app and compile anywhere
with
g++ myfoo.cpp `wx-config --libs` `wx-config --cflags` -o myfoo
* General
-----------------------
The Unix variants of wxWindows use GNU configure. If you have problems
with your make use GNU make instead.
The Unix variants of wxWindows use GNU configure. If you have
problems with your make use GNU make instead.
Read my homepage at
If you have general problems with installation, read my
homepage at
http://wesley.informatik.uni-freiburg.de/~wxxt
for newest information.
for newest information. If you still don't have any success,
please send a bug report to one of our mailing lists (see
my homepage) INCLUDING A DESCRIPTION OF YOUR SYSTEM AND
YOUR PROBLEM, SUCH AS YOUR VERSION OF GTK, WXGTK, WHAT
DISTRIBUTION YOU USE AND WHAT ERROR WAS REPORTED. I know
this has no effect, but I tried...
* GUI libraries
-----------------------
wxWindows/GTK requires the GTK+ library to be installed on your system.
It has to be a stable version, preferebly version 1.0.6. When using
a version previous to 1.0.6 you'll get crashes here and there. This
is certain to happen with colors in native widgets.
a version previous to 1.0.6 you'll get crashes here and there. Although
wxWindows/GTK now compiles with GTK+ 1.1.3, it does not set work
properly. Wait for a stable version GTK 1.2.
You can get the newest version of the GTK+ from the GTK homepage
at

View File

@ -1,9 +1,9 @@
Welcome to wxWindows/Gtk,
you have downloaded version 1.96 of the GTK+ port of C++ library
you have downloaded version 1.97 of the GTK+ port of C++ library
wxWindows. Information on how to install can be found in the
file install.txt, but if you cannot wait, this should work on
file INSTALL.txt, but if you cannot wait, this should work on
all systems
configure --without-threads
@ -11,8 +11,16 @@ make
su (PASSWORD)
make install
When you run into problems, please read the INSTALL.txt and
follow those instructions. If you still don't have any success,
please send a bug report to one of our mailing lists (see
my homepage) INCLUDING A DESCRIPTION OF YOUR SYSTEM AND
YOUR PROBLEM, SUCH AS YOUR VERSION OF GTK, WXGTK, WHAT
DISTRIBUTION YOU USE AND WHAT ERROR WAS REPORTED. I know
this has no effect, but I tried...
wxWindows/Gtk is still in development and you can have a look
at the todo.txt to see what's missing before an official beta
at the TODO.txt to see what's missing before an official beta
and - more important - before we can aim at binary compatibility.
More information is available from my homepage at

View File

@ -10,14 +10,14 @@ wxClipboard
Fix printing of bitmaps
-> No idea.
-------------------- Low priority ---------------------
OwnerDraw for wxListCtrl and others
-> That is a big one.
-> Postponed.
DnD
-> Must be rewritten for GTK+ 1.1.3
-------------------- Low priority ---------------------
wxDebugContext <-> wxLogXXX functions
-> Remove either

View File

@ -222,13 +222,13 @@ protected:
// get the list item's data
void *operator[](size_t index) const
{ wxNodeBase *node = Item(index); return node ? node->GetData() : NULL; }
{ wxNodeBase *node = Item(index); return node ? node->GetData() : (wxNodeBase*)NULL; }
// operations
// append to end of list
wxNodeBase *Append(void *object);
// insert a new item at the beginning of the list
wxNodeBase *Insert(void *object) { return Insert(NULL, object); }
wxNodeBase *Insert(void *object) { return Insert( (wxNodeBase*)NULL, object); }
// insert before given node or at front of list if prev == NULL
wxNodeBase *Insert(wxNodeBase *prev, void *object);
@ -350,7 +350,7 @@ private:
nodetype *Append(T *object) \
{ return (nodetype *)wxListBase::Append(object); } \
nodetype *Insert(T *object) \
{ return (nodetype *)Insert(NULL, object); } \
{ return (nodetype *)Insert((nodetype*)NULL, object); } \
nodetype *Insert(nodetype *prev, T *object) \
{ return (nodetype *)wxListBase::Insert(prev, object); } \
\

View File

@ -182,7 +182,6 @@ DnDFrame::DnDFrame(wxFrame *frame, char *title, int x, int y, int w, int h)
m_ctrlFile = new wxListBox(this, -1, pos, size, 1, &strFile, wxLB_HSCROLL);
m_ctrlText = new wxListBox(this, -1, pos, size, 1, &strText, wxLB_HSCROLL);
/*
m_ctrlLog = new wxTextCtrl(this, -1, "", pos, size,
wxTE_MULTILINE | wxTE_READONLY |
wxSUNKEN_BORDER| wxHSCROLL);
@ -190,10 +189,6 @@ DnDFrame::DnDFrame(wxFrame *frame, char *title, int x, int y, int w, int h)
// redirect log messages to the text window (don't forget to delete it!)
m_pLog = new wxLogTextCtrl(m_ctrlLog);
m_pLogPrev = wxLog::SetActiveTarget(m_pLog);
*/
wxStaticText *m_testLabel = new wxStaticText( this, -1, "Hallo", pos, size );
m_testLabel->SetDropTarget( new wxTextDropTarget() );
// associate drop targets with 2 text controls
m_ctrlFile->SetDropTarget(new DnDFile(m_ctrlFile));
@ -217,7 +212,6 @@ DnDFrame::DnDFrame(wxFrame *frame, char *title, int x, int y, int w, int h)
c->height.PercentOf(this, wxHeight, 40);
m_ctrlText->SetConstraints(c);
/*
// Lower text control
c = new wxLayoutConstraints;
c->left.SameAs (this, wxLeft);
@ -225,16 +219,6 @@ DnDFrame::DnDFrame(wxFrame *frame, char *title, int x, int y, int w, int h)
c->height.PercentOf(this, wxHeight, 40);
c->top.SameAs(m_ctrlText, wxBottom);
m_ctrlLog->SetConstraints(c);
*/
// Lower label control
c = new wxLayoutConstraints;
c->left.SameAs (this, wxLeft);
c->right.SameAs (this, wxRight);
c->height.PercentOf(this, wxHeight, 40);
c->top.SameAs(m_ctrlText, wxBottom);
m_testLabel->SetConstraints(c);
SetAutoLayout(TRUE);
}

View File

@ -4,7 +4,7 @@ NONE =
# define library name
LIB_TARGET=wx_gtk
LIB_MAJOR=1
LIB_MINOR=96
LIB_MINOR=97
# define library sources

View File

@ -829,6 +829,7 @@ void wxPaintDC::SetBackground( const wxBrush &brush )
m_backgroundBrush.GetColour().CalcPixel( m_cmap );
gdk_gc_set_background( m_brushGC, m_backgroundBrush.GetColour().GetColor() );
gdk_gc_set_background( m_penGC, m_backgroundBrush.GetColour().GetColor() );
gdk_gc_set_background( m_bgGC, m_backgroundBrush.GetColour().GetColor() );
gdk_gc_set_foreground( m_bgGC, m_backgroundBrush.GetColour().GetColor() );
@ -949,8 +950,13 @@ void wxPaintDC::SetUpDC(void)
m_brushGC = gdk_gc_new( m_window );
m_textGC = gdk_gc_new( m_window );
m_bgGC = gdk_gc_new( m_window );
SetTextForeground( m_textForegroundColour );
SetTextBackground( m_textBackgroundColour );
wxColour tmp_col( m_textForegroundColour );
m_textForegroundColour = wxNullColour;
SetTextForeground( tmp_col );
tmp_col = m_textBackgroundColour;
m_textBackgroundColour = wxNullColour;
SetTextBackground( tmp_col );
wxPen tmp_pen( m_pen );
m_pen = wxNullPen;
@ -968,8 +974,6 @@ void wxPaintDC::SetUpDC(void)
m_backgroundBrush = wxNullBrush;
SetBackground( tmp_brush );
gdk_gc_set_background( m_penGC, wxWHITE->GetColor() );
if (!hatch_bitmap)
{
hatch_bitmap = hatches;

View File

@ -74,7 +74,6 @@ wxDialog::wxDialog()
{
m_title = "";
m_modalShowing = FALSE;
wxTopLevelWindows.Insert( this );
}
wxDialog::wxDialog( wxWindow *parent,
@ -83,7 +82,6 @@ wxDialog::wxDialog( wxWindow *parent,
long style, const wxString &name )
{
m_modalShowing = FALSE;
wxTopLevelWindows.Insert( this );
Create( parent, id, title, pos, size, style, name );
}
@ -92,6 +90,8 @@ bool wxDialog::Create( wxWindow *parent,
const wxPoint &pos, const wxSize &size,
long style, const wxString &name )
{
wxTopLevelWindows.Append( this );
m_needParent = FALSE;
PreCreation( parent, id, pos, size, style, name );

View File

@ -366,6 +366,97 @@ void wxDropSource::UnregisterWindow(void)
#else // NEW_CODE
GtkWidget *shape_create_icon (char **data,
gint x,
gint y,
gint px,
gint py,
gint window_type);
/* XPM */
static char * gv_xpm[] = {
"40 34 3 1",
" s None c None",
". c black",
"X c white",
" ",
" ",
" ...... ",
" ..XXXXXX.. ",
" .XXXXXXXXXX. ",
" .XXXXXXXXXXXX. ",
" .XXXXXXXXXXXX. ",
" .XXXXXXXXXXXXXX. ",
" .XXX..XXXX..XXX. ",
" ....XX....XX....XX. ",
" .XXX.XXX..XXXX..XXX.... ",
" .XXXXXXXXXXXXXXXXXXX.XXX. ",
" .XXXXXXXXXXXXXXXXXXXXXXXX. ",
" .XXXXXXXXXXXXXXXXXXXXXXXX. ",
" ..XXXXXXXXXXXXXXXXXXXXXX. ",
" .XXXXXXXXXXXXXXXXXX... ",
" ..XXXXXXXXXXXXXXXX. ",
" .XXXXXXXXXXXXXXXX. ",
" .XXXXXXXXXXXXXXXX. ",
" .XXXXXXXXXXXXXXXXX. ",
" .XXXXXXXXXXXXXXXXX. ",
" .XXXXXXXXXXXXXXXXXX. ",
" .XXXXXXXXXXXXXXXXXXX. ",
" .XXXXXXXXXXXXXXXXXXXXX. ",
" .XXXXXXXXXXXXXX.XXXXXXX. ",
" .XXXXXXX.XXXXXXX.XXXXXXX. ",
" .XXXXXXXX.XXXXXXX.XXXXXXX. ",
" .XXXXXXX...XXXXX...XXXXX. ",
" .XXXXXXX. ..... ..... ",
" ..XXXX.. ",
" .... ",
" ",
" ",
" "};
/* XPM */
static char * page_xpm[] = {
/* width height ncolors chars_per_pixel */
"32 32 5 1",
/* colors */
" s None c None",
". c black",
"X c wheat",
"o c tan",
"O c #6699FF",
/* pixels */
" ................... ",
" .XXXXXXXXXXXXXXXXX.. ",
" .XXXXXXXXXXXXXXXXX.o. ",
" .XXXXXXXXXXXXXXXXX.oo. ",
" .XXXXXXXXXXXXXXXXX.ooo. ",
" .XXXXXXXXXXXXXXXXX.oooo. ",
" .XXXXXXXXXXXXXXXXX....... ",
" .XXXXXOOOOOOOOOOXXXooooo. ",
" .XXXXXXXXXXXXXXXXXXooooo. ",
" .XXXXXOOOOOOOOOOXXXXXXXX. ",
" .XXXXXXXXXXXXXXXXXXXXXXX. ",
" .XXXXXXXOOOOOOOOOXXXXXXX. ",
" .XXXXXXXXXXXXXXXXXXXXXXX. ",
" .XXXXXXOOOOOOOOOOXXXXXXX. ",
" .XXXXXXXXXXXXXXXXXXXXXXX. ",
" .XXXXXOOOOOOOOOOXXXXXXXX. ",
" .XXXXXXXXXXXXXXXXXXXXXXX. ",
" .XXXXXXXOOOOOOOOOXXXXXXX. ",
" .XXXXXXXXXXXXXXXXXXXXXXX. ",
" .XXXXXXOOOOOOOOOOXXXXXXX. ",
" .XXXXXXXXXXXXXXXXXXXXXXX. ",
" .XXXXXOOOOOOOOOOXXXXXXXX. ",
" .XXXXXXXXXXXXXXXXXXXXXXX. ",
" .XXXXXXOOOOOOOOOOXXXXXXX. ",
" .XXXXXXXXXXXXXXXXXXXXXXX. ",
" .XXXXXOOOOOOOXXXXXXXXXXX. ",
" .XXXXXXXXXXXXXXXXXXXXXXX. ",
" .XXXXXXXXXXXXXXXXXXXXXXX. ",
" .XXXXXXXXXXXXXXXXXXXXXXX. ",
" .XXXXXXXXXXXXXXXXXXXXXXX. ",
" .XXXXXXXXXXXXXXXXXXXXXXX. ",
" ......................... "};
//-----------------------------------------------------------------------------
@ -382,7 +473,7 @@ static void gtk_target_callback( GtkWidget *widget,
int y = 0;
gdk_window_get_pointer( widget->window, &x, &y, (GdkModifierType *) NULL );
printf( "Drop data is of type %s.\n", event->data_type );
// printf( "Drop data is of type %s.\n", event->data_type );
target->OnDrop( x, y, (const void*)event->data, (size_t)event->data_numbytes );
}
@ -536,8 +627,6 @@ wxDataFormat wxFileDropTarget::GetFormat(size_t WXUNUSED(n)) const
void gtk_drag_callback( GtkWidget *widget, GdkEvent *event, wxDropSource *source )
{
printf( "Data requested for dropping.\n" );
wxDataObject *data = source->m_data;
size_t size = data->GetDataSize();
@ -603,6 +692,43 @@ wxDragResult wxDropSource::DoDragDrop( bool WXUNUSED(bAllowMove) )
if (!m_data) return (wxDragResult) wxDragNone;
if (m_data->GetDataSize() == 0) return (wxDragResult) wxDragNone;
static GtkWidget *drag_icon = NULL;
static GtkWidget *drop_icon = NULL;
GdkPoint hotspot_1 = {0,-5 };
if (!drag_icon)
{
drag_icon = shape_create_icon ( gv_xpm,
440, 140, 0,0, GTK_WINDOW_POPUP);
gtk_signal_connect (GTK_OBJECT (drag_icon), "destroy",
GTK_SIGNAL_FUNC(gtk_widget_destroyed),
&drag_icon);
gtk_widget_hide (drag_icon);
}
GdkPoint hotspot_2 = {-5,-5};
if (!drop_icon)
{
drop_icon = shape_create_icon ( page_xpm,
440, 140, 0,0, GTK_WINDOW_POPUP);
gtk_signal_connect (GTK_OBJECT (drop_icon), "destroy",
GTK_SIGNAL_FUNC(gtk_widget_destroyed),
&drop_icon);
gtk_widget_hide (drop_icon);
}
gdk_dnd_set_drag_shape(drag_icon->window,
&hotspot_1,
drop_icon->window,
&hotspot_2);
GdkWindowPrivate *wp = (GdkWindowPrivate*) m_widget->window;
RegisterWindow();
@ -695,6 +821,129 @@ void wxDropSource::UnregisterWindow(void)
gtk_signal_disconnect_by_data( GTK_OBJECT(m_widget), (gpointer)this );
}
/*
* Shaped Windows
*/
static GdkWindow *root_win = NULL;
typedef struct _cursoroffset {gint x,y;} CursorOffset;
static void
shape_pressed (GtkWidget *widget, GdkEventButton *event)
{
CursorOffset *p;
/* ignore double and triple click */
if (event->type != GDK_BUTTON_PRESS)
return;
p = gtk_object_get_user_data (GTK_OBJECT(widget));
p->x = (int) event->x;
p->y = (int) event->y;
gtk_grab_add (widget);
gdk_pointer_grab (widget->window, TRUE,
GDK_BUTTON_RELEASE_MASK |
GDK_BUTTON_MOTION_MASK |
GDK_POINTER_MOTION_HINT_MASK,
NULL, NULL, 0);
}
static void
shape_released (GtkWidget *widget)
{
gtk_grab_remove (widget);
gdk_pointer_ungrab (0);
}
static void
shape_motion (GtkWidget *widget,
GdkEventMotion *event)
{
gint xp, yp;
CursorOffset * p;
GdkModifierType mask;
p = gtk_object_get_user_data (GTK_OBJECT (widget));
/*
* Can't use event->x / event->y here
* because I need absolute coordinates.
*/
gdk_window_get_pointer (root_win, &xp, &yp, &mask);
gtk_widget_set_uposition (widget, xp - p->x, yp - p->y);
}
GtkWidget *
shape_create_icon (char **data,
gint x,
gint y,
gint px,
gint py,
gint window_type)
{
GtkWidget *window;
GtkWidget *pixmap;
GtkWidget *fixed;
CursorOffset* icon_pos;
GdkGC* gc;
GdkBitmap *gdk_pixmap_mask;
GdkPixmap *gdk_pixmap;
GtkStyle *style;
style = gtk_widget_get_default_style ();
gc = style->black_gc;
/*
* GDK_WINDOW_TOPLEVEL works also, giving you a title border
*/
window = gtk_window_new (window_type);
fixed = gtk_fixed_new ();
gtk_widget_set_usize (fixed, 100,100);
gtk_container_add (GTK_CONTAINER (window), fixed);
gtk_widget_show (fixed);
gtk_widget_set_events (window,
gtk_widget_get_events (window) |
GDK_BUTTON_MOTION_MASK |
GDK_POINTER_MOTION_HINT_MASK |
GDK_BUTTON_PRESS_MASK);
gtk_widget_realize (window);
gdk_pixmap = gdk_pixmap_create_from_xpm_d (window->window, &gdk_pixmap_mask,
&style->bg[GTK_STATE_NORMAL],
(gchar**) data );
pixmap = gtk_pixmap_new (gdk_pixmap, gdk_pixmap_mask);
gtk_fixed_put (GTK_FIXED (fixed), pixmap, px,py);
gtk_widget_show (pixmap);
gtk_widget_shape_combine_mask (window, gdk_pixmap_mask, px,py);
gtk_signal_connect (GTK_OBJECT (window), "button_press_event",
GTK_SIGNAL_FUNC (shape_pressed),NULL);
gtk_signal_connect (GTK_OBJECT (window), "button_release_event",
GTK_SIGNAL_FUNC (shape_released),NULL);
gtk_signal_connect (GTK_OBJECT (window), "motion_notify_event",
GTK_SIGNAL_FUNC (shape_motion),NULL);
icon_pos = g_new (CursorOffset, 1);
gtk_object_set_user_data(GTK_OBJECT(window), icon_pos);
gtk_widget_set_uposition (window, x, y);
gtk_widget_show (window);
return window;
}
#endif
// NEW_GTK_DND_CODE

View File

@ -108,7 +108,6 @@ wxFrame::wxFrame()
m_frameStatusBar = (wxStatusBar *) NULL;
m_frameToolBar = (wxToolBar *) NULL;
m_sizeSet = FALSE;
wxTopLevelWindows.Insert( this );
}
wxFrame::wxFrame( wxWindow *parent, wxWindowID id, const wxString &title,
@ -120,13 +119,14 @@ wxFrame::wxFrame( wxWindow *parent, wxWindowID id, const wxString &title,
m_frameToolBar = (wxToolBar *) NULL;
m_sizeSet = FALSE;
Create( parent, id, title, pos, size, style, name );
wxTopLevelWindows.Insert( this );
}
bool wxFrame::Create( wxWindow *parent, wxWindowID id, const wxString &title,
const wxPoint &pos, const wxSize &size,
long style, const wxString &name )
{
wxTopLevelWindows.Append( this );
m_needParent = FALSE;
PreCreation( parent, id, pos, size, style, name );

View File

@ -829,6 +829,7 @@ void wxPaintDC::SetBackground( const wxBrush &brush )
m_backgroundBrush.GetColour().CalcPixel( m_cmap );
gdk_gc_set_background( m_brushGC, m_backgroundBrush.GetColour().GetColor() );
gdk_gc_set_background( m_penGC, m_backgroundBrush.GetColour().GetColor() );
gdk_gc_set_background( m_bgGC, m_backgroundBrush.GetColour().GetColor() );
gdk_gc_set_foreground( m_bgGC, m_backgroundBrush.GetColour().GetColor() );
@ -949,8 +950,13 @@ void wxPaintDC::SetUpDC(void)
m_brushGC = gdk_gc_new( m_window );
m_textGC = gdk_gc_new( m_window );
m_bgGC = gdk_gc_new( m_window );
SetTextForeground( m_textForegroundColour );
SetTextBackground( m_textBackgroundColour );
wxColour tmp_col( m_textForegroundColour );
m_textForegroundColour = wxNullColour;
SetTextForeground( tmp_col );
tmp_col = m_textBackgroundColour;
m_textBackgroundColour = wxNullColour;
SetTextBackground( tmp_col );
wxPen tmp_pen( m_pen );
m_pen = wxNullPen;
@ -968,8 +974,6 @@ void wxPaintDC::SetUpDC(void)
m_backgroundBrush = wxNullBrush;
SetBackground( tmp_brush );
gdk_gc_set_background( m_penGC, wxWHITE->GetColor() );
if (!hatch_bitmap)
{
hatch_bitmap = hatches;

View File

@ -74,7 +74,6 @@ wxDialog::wxDialog()
{
m_title = "";
m_modalShowing = FALSE;
wxTopLevelWindows.Insert( this );
}
wxDialog::wxDialog( wxWindow *parent,
@ -83,7 +82,6 @@ wxDialog::wxDialog( wxWindow *parent,
long style, const wxString &name )
{
m_modalShowing = FALSE;
wxTopLevelWindows.Insert( this );
Create( parent, id, title, pos, size, style, name );
}
@ -92,6 +90,8 @@ bool wxDialog::Create( wxWindow *parent,
const wxPoint &pos, const wxSize &size,
long style, const wxString &name )
{
wxTopLevelWindows.Append( this );
m_needParent = FALSE;
PreCreation( parent, id, pos, size, style, name );

View File

@ -366,6 +366,97 @@ void wxDropSource::UnregisterWindow(void)
#else // NEW_CODE
GtkWidget *shape_create_icon (char **data,
gint x,
gint y,
gint px,
gint py,
gint window_type);
/* XPM */
static char * gv_xpm[] = {
"40 34 3 1",
" s None c None",
". c black",
"X c white",
" ",
" ",
" ...... ",
" ..XXXXXX.. ",
" .XXXXXXXXXX. ",
" .XXXXXXXXXXXX. ",
" .XXXXXXXXXXXX. ",
" .XXXXXXXXXXXXXX. ",
" .XXX..XXXX..XXX. ",
" ....XX....XX....XX. ",
" .XXX.XXX..XXXX..XXX.... ",
" .XXXXXXXXXXXXXXXXXXX.XXX. ",
" .XXXXXXXXXXXXXXXXXXXXXXXX. ",
" .XXXXXXXXXXXXXXXXXXXXXXXX. ",
" ..XXXXXXXXXXXXXXXXXXXXXX. ",
" .XXXXXXXXXXXXXXXXXX... ",
" ..XXXXXXXXXXXXXXXX. ",
" .XXXXXXXXXXXXXXXX. ",
" .XXXXXXXXXXXXXXXX. ",
" .XXXXXXXXXXXXXXXXX. ",
" .XXXXXXXXXXXXXXXXX. ",
" .XXXXXXXXXXXXXXXXXX. ",
" .XXXXXXXXXXXXXXXXXXX. ",
" .XXXXXXXXXXXXXXXXXXXXX. ",
" .XXXXXXXXXXXXXX.XXXXXXX. ",
" .XXXXXXX.XXXXXXX.XXXXXXX. ",
" .XXXXXXXX.XXXXXXX.XXXXXXX. ",
" .XXXXXXX...XXXXX...XXXXX. ",
" .XXXXXXX. ..... ..... ",
" ..XXXX.. ",
" .... ",
" ",
" ",
" "};
/* XPM */
static char * page_xpm[] = {
/* width height ncolors chars_per_pixel */
"32 32 5 1",
/* colors */
" s None c None",
". c black",
"X c wheat",
"o c tan",
"O c #6699FF",
/* pixels */
" ................... ",
" .XXXXXXXXXXXXXXXXX.. ",
" .XXXXXXXXXXXXXXXXX.o. ",
" .XXXXXXXXXXXXXXXXX.oo. ",
" .XXXXXXXXXXXXXXXXX.ooo. ",
" .XXXXXXXXXXXXXXXXX.oooo. ",
" .XXXXXXXXXXXXXXXXX....... ",
" .XXXXXOOOOOOOOOOXXXooooo. ",
" .XXXXXXXXXXXXXXXXXXooooo. ",
" .XXXXXOOOOOOOOOOXXXXXXXX. ",
" .XXXXXXXXXXXXXXXXXXXXXXX. ",
" .XXXXXXXOOOOOOOOOXXXXXXX. ",
" .XXXXXXXXXXXXXXXXXXXXXXX. ",
" .XXXXXXOOOOOOOOOOXXXXXXX. ",
" .XXXXXXXXXXXXXXXXXXXXXXX. ",
" .XXXXXOOOOOOOOOOXXXXXXXX. ",
" .XXXXXXXXXXXXXXXXXXXXXXX. ",
" .XXXXXXXOOOOOOOOOXXXXXXX. ",
" .XXXXXXXXXXXXXXXXXXXXXXX. ",
" .XXXXXXOOOOOOOOOOXXXXXXX. ",
" .XXXXXXXXXXXXXXXXXXXXXXX. ",
" .XXXXXOOOOOOOOOOXXXXXXXX. ",
" .XXXXXXXXXXXXXXXXXXXXXXX. ",
" .XXXXXXOOOOOOOOOOXXXXXXX. ",
" .XXXXXXXXXXXXXXXXXXXXXXX. ",
" .XXXXXOOOOOOOXXXXXXXXXXX. ",
" .XXXXXXXXXXXXXXXXXXXXXXX. ",
" .XXXXXXXXXXXXXXXXXXXXXXX. ",
" .XXXXXXXXXXXXXXXXXXXXXXX. ",
" .XXXXXXXXXXXXXXXXXXXXXXX. ",
" .XXXXXXXXXXXXXXXXXXXXXXX. ",
" ......................... "};
//-----------------------------------------------------------------------------
@ -382,7 +473,7 @@ static void gtk_target_callback( GtkWidget *widget,
int y = 0;
gdk_window_get_pointer( widget->window, &x, &y, (GdkModifierType *) NULL );
printf( "Drop data is of type %s.\n", event->data_type );
// printf( "Drop data is of type %s.\n", event->data_type );
target->OnDrop( x, y, (const void*)event->data, (size_t)event->data_numbytes );
}
@ -536,8 +627,6 @@ wxDataFormat wxFileDropTarget::GetFormat(size_t WXUNUSED(n)) const
void gtk_drag_callback( GtkWidget *widget, GdkEvent *event, wxDropSource *source )
{
printf( "Data requested for dropping.\n" );
wxDataObject *data = source->m_data;
size_t size = data->GetDataSize();
@ -603,6 +692,43 @@ wxDragResult wxDropSource::DoDragDrop( bool WXUNUSED(bAllowMove) )
if (!m_data) return (wxDragResult) wxDragNone;
if (m_data->GetDataSize() == 0) return (wxDragResult) wxDragNone;
static GtkWidget *drag_icon = NULL;
static GtkWidget *drop_icon = NULL;
GdkPoint hotspot_1 = {0,-5 };
if (!drag_icon)
{
drag_icon = shape_create_icon ( gv_xpm,
440, 140, 0,0, GTK_WINDOW_POPUP);
gtk_signal_connect (GTK_OBJECT (drag_icon), "destroy",
GTK_SIGNAL_FUNC(gtk_widget_destroyed),
&drag_icon);
gtk_widget_hide (drag_icon);
}
GdkPoint hotspot_2 = {-5,-5};
if (!drop_icon)
{
drop_icon = shape_create_icon ( page_xpm,
440, 140, 0,0, GTK_WINDOW_POPUP);
gtk_signal_connect (GTK_OBJECT (drop_icon), "destroy",
GTK_SIGNAL_FUNC(gtk_widget_destroyed),
&drop_icon);
gtk_widget_hide (drop_icon);
}
gdk_dnd_set_drag_shape(drag_icon->window,
&hotspot_1,
drop_icon->window,
&hotspot_2);
GdkWindowPrivate *wp = (GdkWindowPrivate*) m_widget->window;
RegisterWindow();
@ -695,6 +821,129 @@ void wxDropSource::UnregisterWindow(void)
gtk_signal_disconnect_by_data( GTK_OBJECT(m_widget), (gpointer)this );
}
/*
* Shaped Windows
*/
static GdkWindow *root_win = NULL;
typedef struct _cursoroffset {gint x,y;} CursorOffset;
static void
shape_pressed (GtkWidget *widget, GdkEventButton *event)
{
CursorOffset *p;
/* ignore double and triple click */
if (event->type != GDK_BUTTON_PRESS)
return;
p = gtk_object_get_user_data (GTK_OBJECT(widget));
p->x = (int) event->x;
p->y = (int) event->y;
gtk_grab_add (widget);
gdk_pointer_grab (widget->window, TRUE,
GDK_BUTTON_RELEASE_MASK |
GDK_BUTTON_MOTION_MASK |
GDK_POINTER_MOTION_HINT_MASK,
NULL, NULL, 0);
}
static void
shape_released (GtkWidget *widget)
{
gtk_grab_remove (widget);
gdk_pointer_ungrab (0);
}
static void
shape_motion (GtkWidget *widget,
GdkEventMotion *event)
{
gint xp, yp;
CursorOffset * p;
GdkModifierType mask;
p = gtk_object_get_user_data (GTK_OBJECT (widget));
/*
* Can't use event->x / event->y here
* because I need absolute coordinates.
*/
gdk_window_get_pointer (root_win, &xp, &yp, &mask);
gtk_widget_set_uposition (widget, xp - p->x, yp - p->y);
}
GtkWidget *
shape_create_icon (char **data,
gint x,
gint y,
gint px,
gint py,
gint window_type)
{
GtkWidget *window;
GtkWidget *pixmap;
GtkWidget *fixed;
CursorOffset* icon_pos;
GdkGC* gc;
GdkBitmap *gdk_pixmap_mask;
GdkPixmap *gdk_pixmap;
GtkStyle *style;
style = gtk_widget_get_default_style ();
gc = style->black_gc;
/*
* GDK_WINDOW_TOPLEVEL works also, giving you a title border
*/
window = gtk_window_new (window_type);
fixed = gtk_fixed_new ();
gtk_widget_set_usize (fixed, 100,100);
gtk_container_add (GTK_CONTAINER (window), fixed);
gtk_widget_show (fixed);
gtk_widget_set_events (window,
gtk_widget_get_events (window) |
GDK_BUTTON_MOTION_MASK |
GDK_POINTER_MOTION_HINT_MASK |
GDK_BUTTON_PRESS_MASK);
gtk_widget_realize (window);
gdk_pixmap = gdk_pixmap_create_from_xpm_d (window->window, &gdk_pixmap_mask,
&style->bg[GTK_STATE_NORMAL],
(gchar**) data );
pixmap = gtk_pixmap_new (gdk_pixmap, gdk_pixmap_mask);
gtk_fixed_put (GTK_FIXED (fixed), pixmap, px,py);
gtk_widget_show (pixmap);
gtk_widget_shape_combine_mask (window, gdk_pixmap_mask, px,py);
gtk_signal_connect (GTK_OBJECT (window), "button_press_event",
GTK_SIGNAL_FUNC (shape_pressed),NULL);
gtk_signal_connect (GTK_OBJECT (window), "button_release_event",
GTK_SIGNAL_FUNC (shape_released),NULL);
gtk_signal_connect (GTK_OBJECT (window), "motion_notify_event",
GTK_SIGNAL_FUNC (shape_motion),NULL);
icon_pos = g_new (CursorOffset, 1);
gtk_object_set_user_data(GTK_OBJECT(window), icon_pos);
gtk_widget_set_uposition (window, x, y);
gtk_widget_show (window);
return window;
}
#endif
// NEW_GTK_DND_CODE

View File

@ -108,7 +108,6 @@ wxFrame::wxFrame()
m_frameStatusBar = (wxStatusBar *) NULL;
m_frameToolBar = (wxToolBar *) NULL;
m_sizeSet = FALSE;
wxTopLevelWindows.Insert( this );
}
wxFrame::wxFrame( wxWindow *parent, wxWindowID id, const wxString &title,
@ -120,13 +119,14 @@ wxFrame::wxFrame( wxWindow *parent, wxWindowID id, const wxString &title,
m_frameToolBar = (wxToolBar *) NULL;
m_sizeSet = FALSE;
Create( parent, id, title, pos, size, style, name );
wxTopLevelWindows.Insert( this );
}
bool wxFrame::Create( wxWindow *parent, wxWindowID id, const wxString &title,
const wxPoint &pos, const wxSize &size,
long style, const wxString &name )
{
wxTopLevelWindows.Append( this );
m_needParent = FALSE;
PreCreation( parent, id, pos, size, style, name );

View File

@ -36,7 +36,7 @@ while test $# -gt 0; do
echo $exec_prefix
;;
--version)
echo 1.94
echo 1.97
;;
--cflags)
if test @includedir@ != /usr/include ; then