From 3f34aba828983bc783529a30c0fa22c55b7abc05 Mon Sep 17 00:00:00 2001 From: Manolo Gouy Date: Mon, 21 Mar 2016 17:55:10 +0000 Subject: Rewrite Fl_Window::label(const char *name, const char *mininame) under the driver model. git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3-porting@11394 ea41ed52-d2ee-0310-a9c1-e6b18d33e121 --- src/Fl_Window.cxx | 6 ++++++ src/Fl_Window_Driver.cxx | 1 + src/Fl_cocoa.mm | 8 +++----- src/Fl_win32.cxx | 17 ----------------- src/Fl_x.cxx | 15 +++++++-------- src/drivers/Cocoa/Fl_Cocoa_Window_Driver.H | 1 + src/drivers/WinAPI/Fl_WinAPI_Window_Driver.H | 1 + src/drivers/WinAPI/Fl_WinAPI_Window_Driver.cxx | 16 ++++++++++++++++ src/drivers/X11/Fl_X11_Window_Driver.H | 1 + 9 files changed, 36 insertions(+), 30 deletions(-) (limited to 'src') diff --git a/src/Fl_Window.cxx b/src/Fl_Window.cxx index 1fa27f928..cbd0863ff 100644 --- a/src/Fl_Window.cxx +++ b/src/Fl_Window.cxx @@ -487,6 +487,12 @@ void Fl_Window::make_current() current_ = this; } +void Fl_Window::label(const char *name, const char *mininame) { + Fl_Widget::label(name); + iconlabel_ = mininame; + pWindowDriver->label(name, mininame); +} + // // End of "$Id$". // diff --git a/src/Fl_Window_Driver.cxx b/src/Fl_Window_Driver.cxx index 8d74ec832..2dac00f95 100644 --- a/src/Fl_Window_Driver.cxx +++ b/src/Fl_Window_Driver.cxx @@ -43,6 +43,7 @@ unsigned char Fl_Window_Driver::size_range_set() {return pWindow->size_range_set void Fl_Window_Driver::flush_single() { pWindow->Fl_Window::flush(); } void Fl_Window_Driver::draw() { pWindow->draw(); } void Fl_Window_Driver::make_current() { } +void Fl_Window_Driver::label(const char *name, const char *mininame) {} void Fl_Window_Driver::take_focus() diff --git a/src/Fl_cocoa.mm b/src/Fl_cocoa.mm index 7ee2877b6..b6bd51f6a 100644 --- a/src/Fl_cocoa.mm +++ b/src/Fl_cocoa.mm @@ -3135,11 +3135,9 @@ const char *fl_filename_name( const char *name ) /* * set the window title bar name */ -void Fl_Window::label(const char *name, const char *mininame) { - Fl_Widget::label(name); - iconlabel_ = mininame; - if (shown() || i) { - q_set_window_title(i->xid, name, mininame); +void Fl_Cocoa_Window_Driver::label(const char *name, const char *mininame) { + if (pWindow->shown() || Fl_X::i(pWindow)) { + q_set_window_title(fl_xid(pWindow), name, mininame); } } diff --git a/src/Fl_win32.cxx b/src/Fl_win32.cxx index ab5465e03..504c154dc 100644 --- a/src/Fl_win32.cxx +++ b/src/Fl_win32.cxx @@ -1990,23 +1990,6 @@ const char *fl_filename_name(const char *name) { return q; } -void Fl_Window::label(const char *name,const char *iname) { - Fl_Widget::label(name); - iconlabel_ = iname; - if (shown() && !parent()) { - if (!name) name = ""; - size_t l = strlen(name); -// WCHAR *lab = (WCHAR*) malloc((l + 1) * sizeof(short)); -// l = fl_utf2unicode((unsigned char*)name, l, (xchar*)lab); - unsigned wlen = fl_utf8toUtf16(name, (unsigned) l, NULL, 0); // Pass NULL to query length - wlen++; - unsigned short * lab = (unsigned short*)malloc(sizeof(unsigned short)*wlen); - wlen = fl_utf8toUtf16(name, (unsigned) l, lab, wlen); - lab[wlen] = 0; - SetWindowTextW(i->xid, (WCHAR *)lab); - free(lab); - } -} //////////////////////////////////////////////////////////////// diff --git a/src/Fl_x.cxx b/src/Fl_x.cxx index ce72367cf..ec8361d1b 100644 --- a/src/Fl_x.cxx +++ b/src/Fl_x.cxx @@ -2872,18 +2872,17 @@ const char *fl_filename_name(const char *name) { return q; } -void Fl_Window::label(const char *name,const char *iname) { - Fl_Widget::label(name); - iconlabel_ = iname; - if (shown() && !parent()) { +void Fl_X11_Window_Driver::label(const char *name, const char *iname) { + if (pWindow->shown() && !pWindow->parent()) { if (!name) name = ""; int namelen = strlen(name); if (!iname) iname = fl_filename_name(name); int inamelen = strlen(iname); - XChangeProperty(fl_display, i->xid, fl_NET_WM_NAME, fl_XaUtf8String, 8, 0, (uchar*)name, namelen); // utf8 - XChangeProperty(fl_display, i->xid, XA_WM_NAME, XA_STRING, 8, 0, (uchar*)name, namelen); // non-utf8 - XChangeProperty(fl_display, i->xid, fl_NET_WM_ICON_NAME, fl_XaUtf8String, 8, 0, (uchar*)iname, inamelen); // utf8 - XChangeProperty(fl_display, i->xid, XA_WM_ICON_NAME, XA_STRING, 8, 0, (uchar*)iname, inamelen); // non-utf8 + Window win = fl_xid(pWindow); + XChangeProperty(fl_display, win, fl_NET_WM_NAME, fl_XaUtf8String, 8, 0, (uchar*)name, namelen); // utf8 + XChangeProperty(fl_display, win, XA_WM_NAME, XA_STRING, 8, 0, (uchar*)name, namelen); // non-utf8 + XChangeProperty(fl_display, win, fl_NET_WM_ICON_NAME, fl_XaUtf8String, 8, 0, (uchar*)iname, inamelen); // utf8 + XChangeProperty(fl_display, win, XA_WM_ICON_NAME, XA_STRING, 8, 0, (uchar*)iname, inamelen); // non-utf8 } } diff --git a/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.H b/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.H index 5414401d0..b43cd9830 100644 --- a/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.H +++ b/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.H @@ -74,6 +74,7 @@ public: virtual void draw_begin(); virtual void draw_end(); virtual void make_current(); + virtual void label(const char *name, const char *mininame); virtual void shape(const Fl_Image* img); // that one is implemented in Fl_Cocoa.mm because it uses Objective-c diff --git a/src/drivers/WinAPI/Fl_WinAPI_Window_Driver.H b/src/drivers/WinAPI/Fl_WinAPI_Window_Driver.H index c7726d170..d5abdd54e 100644 --- a/src/drivers/WinAPI/Fl_WinAPI_Window_Driver.H +++ b/src/drivers/WinAPI/Fl_WinAPI_Window_Driver.H @@ -77,6 +77,7 @@ public: virtual void flush_overlay(); virtual void draw_begin(); virtual void make_current(); + virtual void label(const char *name,const char *iname); virtual void shape(const Fl_Image* img); virtual void icons(const Fl_RGB_Image *icons[], int count); diff --git a/src/drivers/WinAPI/Fl_WinAPI_Window_Driver.cxx b/src/drivers/WinAPI/Fl_WinAPI_Window_Driver.cxx index f259b62ac..a0a4e57c0 100644 --- a/src/drivers/WinAPI/Fl_WinAPI_Window_Driver.cxx +++ b/src/drivers/WinAPI/Fl_WinAPI_Window_Driver.cxx @@ -394,6 +394,22 @@ void Fl_WinAPI_Window_Driver::make_current() { fl_graphics_driver->clip_region(0); } +void Fl_WinAPI_Window_Driver::label(const char *name,const char *iname) { + if (pWindow->shown() && !pWindow->parent()) { + if (!name) name = ""; + size_t l = strlen(name); + // WCHAR *lab = (WCHAR*) malloc((l + 1) * sizeof(short)); + // l = fl_utf2unicode((unsigned char*)name, l, (xchar*)lab); + unsigned wlen = fl_utf8toUtf16(name, (unsigned) l, NULL, 0); // Pass NULL to query length + wlen++; + unsigned short * lab = (unsigned short*)malloc(sizeof(unsigned short)*wlen); + wlen = fl_utf8toUtf16(name, (unsigned) l, lab, wlen); + lab[wlen] = 0; + SetWindowTextW(fl_xid(pWindow), (WCHAR *)lab); + free(lab); + } +} + // // End of "$Id$". // diff --git a/src/drivers/X11/Fl_X11_Window_Driver.H b/src/drivers/X11/Fl_X11_Window_Driver.H index 61d3d4073..ac3d35269 100644 --- a/src/drivers/X11/Fl_X11_Window_Driver.H +++ b/src/drivers/X11/Fl_X11_Window_Driver.H @@ -82,6 +82,7 @@ public: virtual void flush_overlay(); virtual void draw_begin(); virtual void make_current(); + virtual void label(const char *name, const char *mininame); virtual void shape(const Fl_Image* img); virtual void icons(const Fl_RGB_Image *icons[], int count); -- cgit v1.2.3