Better double-click: remove DoubleClickeable and make ui::Widget default behavior to convert double-clicks into mouse downs

This commit is contained in:
David Capello 2014-04-29 23:02:27 -03:00
parent 62fc42c24d
commit e363577e65
8 changed files with 17 additions and 30 deletions

View File

@ -45,7 +45,6 @@ FileList::FileList()
{ {
setFocusStop(true); setFocusStop(true);
setDoubleBuffered(true); setDoubleBuffered(true);
setDoubleClickeable(true);
m_currentFolder = FileSystemModule::instance()->getRootFileItem(); m_currentFolder = FileSystemModule::instance()->getRootFileItem();
m_req_valid = false; m_req_valid = false;

View File

@ -163,7 +163,6 @@ Timeline::Timeline()
m_context->addObserver(this); m_context->addObserver(this);
setDoubleBuffered(true); setDoubleBuffered(true);
setDoubleClickeable(true);
} }
Timeline::~Timeline() Timeline::~Timeline()
@ -705,7 +704,7 @@ bool Timeline::onProcessMessage(Message* msg)
->getCommandByName(CommandId::LayerProperties); ->getCommandByName(CommandId::LayerProperties);
UIContext::instance()->executeCommand(command); UIContext::instance()->executeCommand(command);
break; return true;
} }
case A_PART_HEADER_FRAME: { case A_PART_HEADER_FRAME: {
@ -715,7 +714,7 @@ bool Timeline::onProcessMessage(Message* msg)
params.set("frame", "current"); params.set("frame", "current");
UIContext::instance()->executeCommand(command, &params); UIContext::instance()->executeCommand(command, &params);
break; return true;
} }
case A_PART_CEL: { case A_PART_CEL: {
@ -723,7 +722,7 @@ bool Timeline::onProcessMessage(Message* msg)
->getCommandByName(CommandId::CelProperties); ->getCommandByName(CommandId::CelProperties);
UIContext::instance()->executeCommand(command); UIContext::instance()->executeCommand(command);
break; return true;
} }
} }

View File

@ -58,7 +58,6 @@ namespace ui {
#define JI_INITIALIZED 0x0400 // The widget was already initialized by a theme. #define JI_INITIALIZED 0x0400 // The widget was already initialized by a theme.
#define JI_DIRTY 0x0800 // The widget (or one child) is dirty (update_region != empty). #define JI_DIRTY 0x0800 // The widget (or one child) is dirty (update_region != empty).
#define JI_HASTEXT 0x1000 // The widget has text (at least setText() was called one time). #define JI_HASTEXT 0x1000 // The widget has text (at least setText() was called one time).
#define JI_DOUBLECLICKABLE 0x2000 // The widget accepts double-clicks
class GuiSystem { class GuiSystem {
public: public:

View File

@ -62,7 +62,6 @@ Entry::Entry(size_t maxsize, const char *format, ...)
setText(buf); setText(buf);
setFocusStop(true); setFocusStop(true);
setDoubleClickeable(true);
initTheme(); initTheme();
} }

View File

@ -28,7 +28,6 @@ ListBox::ListBox()
: Widget(kListBoxWidget) : Widget(kListBoxWidget)
{ {
setFocusStop(true); setFocusStop(true);
setDoubleClickeable(true);
initTheme(); initTheme();
} }

View File

@ -580,13 +580,10 @@ void Manager::handleMouseUp(const gfx::Point& mousePos, MouseButtons mouseButton
void Manager::handleMouseDoubleClick(const gfx::Point& mousePos, MouseButtons mouseButtons) void Manager::handleMouseDoubleClick(const gfx::Point& mousePos, MouseButtons mouseButtons)
{ {
Widget* dst = (capture_widget ? capture_widget: mouse_widget); Widget* dst = (capture_widget ? capture_widget: mouse_widget);
if (dst && dst->isDoubleClickeable()) { if (dst) {
enqueueMessage(newMouseMessage(kDoubleClickMessage, enqueueMessage(newMouseMessage(kDoubleClickMessage,
dst, mousePos, mouseButtons)); dst, mousePos, mouseButtons));
} }
else {
handleMouseDown(mousePos, mouseButtons);
}
} }
void Manager::handleMouseWheel(const gfx::Point& mousePos, MouseButtons mouseButtons, const gfx::Point& wheelDelta) void Manager::handleMouseWheel(const gfx::Point& mousePos, MouseButtons mouseButtons, const gfx::Point& wheelDelta)

View File

@ -277,14 +277,6 @@ void Widget::setFocusMagnet(bool state)
this->flags &= ~JI_FOCUSMAGNET; this->flags &= ~JI_FOCUSMAGNET;
} }
void Widget::setDoubleClickeable(bool state)
{
if (state)
this->flags |= JI_DOUBLECLICKABLE;
else
this->flags &= ~JI_DOUBLECLICKABLE;
}
bool Widget::isVisible() const bool Widget::isVisible() const
{ {
const Widget* widget = this; const Widget* widget = this;
@ -338,11 +330,6 @@ bool Widget::isFocusMagnet() const
return (this->flags & JI_FOCUSMAGNET) ? true: false; return (this->flags & JI_FOCUSMAGNET) ? true: false;
} }
bool Widget::isDoubleClickeable() const
{
return (this->flags & JI_DOUBLECLICKABLE) ? true: false;
}
// =============================================================== // ===============================================================
// PARENTS & CHILDREN // PARENTS & CHILDREN
// =============================================================== // ===============================================================
@ -1330,9 +1317,21 @@ bool Widget::onProcessMessage(Message* msg)
else else
break; break;
case kDoubleClickMessage:
// Convert double clicks into mouse down
if (kMouseDownMessage) {
MouseMessage* mouseMsg = static_cast<MouseMessage*>(msg);
MouseMessage mouseMsg2(kMouseDownMessage,
mouseMsg->buttons(),
mouseMsg->position(),
mouseMsg->wheelDelta());
sendMessage(&mouseMsg2);
}
break;
case kMouseDownMessage: case kMouseDownMessage:
case kMouseUpMessage: case kMouseUpMessage:
case kDoubleClickMessage:
case kMouseMoveMessage: case kMouseMoveMessage:
case kMouseWheelMessage: case kMouseWheelMessage:
// Propagate the message to the parent. // Propagate the message to the parent.

View File

@ -139,10 +139,6 @@ namespace ui {
void setFocusMagnet(bool state); void setFocusMagnet(bool state);
bool isFocusMagnet() const; bool isFocusMagnet() const;
// True if this widget wants double-clicks.
void setDoubleClickeable(bool state);
bool isDoubleClickeable() const;
// =============================================================== // ===============================================================
// LOOK & FEEL // LOOK & FEEL
// =============================================================== // ===============================================================