summaryrefslogtreecommitdiff
path: root/fluid
diff options
context:
space:
mode:
authorMatthias Melcher <git@matthiasm.com>2021-12-05 00:40:08 +0100
committerMatthias Melcher <git@matthiasm.com>2021-12-05 00:40:08 +0100
commit30371740acf46d77dd1933e206109aa73ae781bd (patch)
tree88ed41f7fdacabb8d8c49601ae0e431ca096c32d /fluid
parent204ac3dfdfd519607e2f392fa83c12fad9e73fde (diff)
STR #2842: new widgets will be created where the user clicked the RMB
If a user adds a new widget using the right mouse button in any of the design's windows, the new widget will be located with its top left corner at the selected position.
Diffstat (limited to 'fluid')
-rw-r--r--fluid/Fl_Type.h2
-rw-r--r--fluid/Fl_Window_Type.cxx5
-rw-r--r--fluid/factory.cxx11
3 files changed, 16 insertions, 2 deletions
diff --git a/fluid/Fl_Type.h b/fluid/Fl_Type.h
index 2ba7e3047..4dedece5e 100644
--- a/fluid/Fl_Type.h
+++ b/fluid/Fl_Type.h
@@ -643,6 +643,8 @@ public:
void copy_properties();
int sr_min_w, sr_min_h, sr_max_w, sr_max_h;
+
+ static int popupx, popupy;
};
class Fl_Widget_Class_Type : private Fl_Window_Type {
diff --git a/fluid/Fl_Window_Type.cxx b/fluid/Fl_Window_Type.cxx
index 62ed479f8..ff196d2e1 100644
--- a/fluid/Fl_Window_Type.cxx
+++ b/fluid/Fl_Window_Type.cxx
@@ -1176,6 +1176,9 @@ void Fl_Window_Type::moveallchildren()
update_xywh();
}
+int Fl_Window_Type::popupx = 0x7FFFFFFF; // mark as invalid (MAXINT)
+int Fl_Window_Type::popupy = 0x7FFFFFFF;
+
int Fl_Window_Type::handle(int event) {
static Fl_Type* selection;
switch (event) {
@@ -1187,8 +1190,10 @@ int Fl_Window_Type::handle(int event) {
if (Fl::event_button() >= 3) {
in_this_only = this; // modifies how some menu items work.
static const Fl_Menu_Item* myprev;
+ popupx = mx; popupy = my;
const Fl_Menu_Item* m = New_Menu->popup(mx,my,"New",myprev);
if (m && m->callback()) {myprev = m; m->do_callback(this->o);}
+ popupx = 0x7FFFFFFF; popupy = 0x7FFFFFFF; // mark as invalid (MAXINT)
in_this_only = 0;
return 1;
}
diff --git a/fluid/factory.cxx b/fluid/factory.cxx
index ecbecef90..803411d3a 100644
--- a/fluid/factory.cxx
+++ b/fluid/factory.cxx
@@ -979,8 +979,15 @@ static void cb(Fl_Widget *, void *v) {
// Move and resize the menubar across the top of the window...
wt->o->resize(0, 0, w, h);
} else {
- // Just resize to the ideal size...
- wt->o->size(w, h);
+ if (Fl_Window_Type::popupx != 0x7FFFFFFF) {
+ // If this callback was called from the RMB popup menu in a window,
+ // popupx and popupy will contain the mouse coordinates at RMB event.
+ wt->o->resize(Fl_Window_Type::popupx, Fl_Window_Type::popupy, w, h);
+ } else {
+ // If popupx is invalid, use the default position and find a good
+ // size for the widget.
+ wt->o->size(w, h);
+ }
}
}
select_only(t);