+void OBBindings::fire(MouseAction action, OBWidget::WidgetType type,
+ Window win, unsigned int modifiers, unsigned int button,
+ int xroot, int yroot, Time time)
+{
+ assert(action >= 0 && action < NUM_MOUSE_ACTION);
+
+ MouseContext context;
+ switch (type) {
+ case OBWidget::Type_Frame:
+ context = MC_Frame; break;
+ case OBWidget::Type_Titlebar:
+ context = MC_Titlebar; break;
+ case OBWidget::Type_Handle:
+ context = MC_Frame; break;
+ case OBWidget::Type_Plate:
+ context = MC_Window; break;
+ case OBWidget::Type_Label:
+ context = MC_Titlebar; break;
+ case OBWidget::Type_MaximizeButton:
+ context = MC_MaximizeButton; break;
+ case OBWidget::Type_CloseButton:
+ context = MC_CloseButton; break;
+ case OBWidget::Type_IconifyButton:
+ context = MC_IconifyButton; break;
+ case OBWidget::Type_StickyButton:
+ context = MC_StickyButton; break;
+ case OBWidget::Type_LeftGrip:
+ context = MC_Grip; break;
+ case OBWidget::Type_RightGrip:
+ context = MC_Grip; break;
+ case OBWidget::Type_Client:
+ context = MC_Window; break;
+ case OBWidget::Type_Root:
+ context = MC_Root; break;
+ default:
+ assert(false); // unhandled type
+ }
+
+ modifiers &= (ControlMask | ShiftMask | Mod1Mask | Mod2Mask | Mod3Mask |
+ Mod4Mask | Mod5Mask);
+
+ printf("but.mods %d.%d\n", button, modifiers);
+
+ ButtonBindingList::iterator it, end = _buttons[context].end();
+ for (it = _buttons[context].begin(); it != end; ++it)
+ if ((*it)->binding.key == button &&
+ (*it)->binding.modifiers == modifiers) {
+ ButtonBinding::CallbackList::iterator c_it,
+ c_end = (*it)->callback[action].end();
+ for (c_it = (*it)->callback[action].begin(); c_it != c_end; ++c_it)
+ python_callback(*c_it, action, win, context, modifiers,
+ button, xroot, yroot, time);
+ }
+}
+