summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES1
-rw-r--r--FL/Fl_Window.H12
-rw-r--r--src/Fl.cxx3
-rw-r--r--src/Fl_Window.cxx49
4 files changed, 61 insertions, 4 deletions
diff --git a/CHANGES b/CHANGES
index f11bbd52a..f005142c1 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,5 +1,6 @@
CHANGES IN FLTK 1.3.0
+ - Fixed xclass support for Fl_Window (STR #2053)
- Fixed Caps Lock handling in X11/XIM (STR #2366)
- Fixed handling of missing fonts in Xft (STR #2355)
- Added alternative Xft font names (STR #2215)
diff --git a/FL/Fl_Window.H b/FL/Fl_Window.H
index c9dd1af08..721d10289 100644
--- a/FL/Fl_Window.H
+++ b/FL/Fl_Window.H
@@ -57,11 +57,13 @@ class Fl_X;
*/
class FL_EXPORT Fl_Window : public Fl_Group {
+ static char *default_xclass_;
+
friend class Fl_X;
Fl_X *i; // points at the system-specific stuff
const char* iconlabel_;
- const char* xclass_;
+ char* xclass_;
const void* icon_;
// size_range stuff:
int minw, minh, maxw, maxh;
@@ -323,8 +325,10 @@ public:
/** Sets the icon label. */
void label(const char* label, const char* iconlabel); // platform dependent
void copy_label(const char* a);
- /** See void Fl_Window::xclass(const char*) */
- const char* xclass() const {return xclass_;}
+
+ static void default_xclass(const char*);
+ static const char *default_xclass();
+ const char* xclass() const;
/**
A string used to tell the system what type of window this is. Mostly
this identifies the picture to draw in the icon. <I>Under X, this is
@@ -339,7 +343,7 @@ public:
visible effect. The passed pointer is stored unchanged. The string
is not copied.
*/
- void xclass(const char* c) {xclass_ = c;}
+ void xclass(const char* c);
/** Gets the current icon window target dependent data. */
const void* icon() const {return icon_;}
/** Sets the current icon window target dependent data. */
diff --git a/src/Fl.cxx b/src/Fl.cxx
index 5f62480ef..89d4ad8e0 100644
--- a/src/Fl.cxx
+++ b/src/Fl.cxx
@@ -1292,6 +1292,9 @@ void Fl_Window::hide() {
Fl_Window::~Fl_Window() {
hide();
+ if (xclass_) {
+ free(xclass_);
+ }
}
// FL_SHOW and FL_HIDE are called whenever the visibility of this widget
diff --git a/src/Fl_Window.cxx b/src/Fl_Window.cxx
index adc3fa094..0c641fe32 100644
--- a/src/Fl_Window.cxx
+++ b/src/Fl_Window.cxx
@@ -40,6 +40,8 @@
#include <FL/fl_draw.H>
#endif
+char *Fl_Window::default_xclass_ = 0L;
+
void Fl_Window::_Fl_Window() {
type(FL_WINDOW);
box(FL_FLAT_BOX);
@@ -178,6 +180,53 @@ Fl_Window *Fl_Window::current() {
return current_;
}
+/** Returns the default xclass */
+const char *Fl_Window::default_xclass()
+{
+ if (default_xclass_) {
+ return default_xclass_;
+ } else {
+ return "FLTK";
+ }
+}
+
+/** Sets the defaul xclass */
+void Fl_Window::default_xclass(const char *xc)
+{
+ if (default_xclass_) {
+ free(default_xclass_);
+ default_xclass_ = 0L;
+ }
+ if (xc) {
+ default_xclass_ = strdup(xc);
+ }
+}
+
+/** Set the xclass for this window */
+void Fl_Window::xclass(const char *xc)
+{
+ if (xclass_) {
+ free(xclass_);
+ xclass_ = 0L;
+ }
+ if (xc) {
+ xclass_ = strdup(xc);
+ if (!default_xclass_) {
+ default_xclass(xc);
+ }
+ }
+}
+
+/** Return the XClass for this window, or a default. */
+const char *Fl_Window::xclass() const
+{
+ if (xclass_) {
+ return xclass_;
+ } else {
+ return default_xclass();
+ }
+}
+
//
// End of "$Id$".