Example #1
0
static status
eventPopupGesture(PopupGesture g, EventObj ev)
{ if ( g->status == NAME_active && isUpEvent(ev) )
  { PceWindow sw;

    if ( !(sw = getWindowGraphical(ev->receiver)) )
      sw = ev->window;

    if ( notNil(g->current) && g->current->displayed == OFF )
    { send(g->current, NAME_open, ev->receiver,
	   getAreaPositionEvent(ev, DEFAULT), EAV);
      attributeObject(g, NAME_Stayup, ON);
      grabPointerWindow(sw, ON);
      focusWindow(sw, ev->receiver, (Recogniser) g, g->cursor, NIL);
    } else if ( valInt(getClickTimeEvent(ev)) < 400 &&
		getAttributeObject(g, NAME_Stayup) != ON )
    { attributeObject(g, NAME_Stayup, ON);
      grabPointerWindow(sw, ON);
      focusWindow(sw, ev->receiver, (Recogniser) g, g->cursor, NIL);
    } else
    { send(g, NAME_terminate, EAV);
      if ( isNil(g->current) )
      { grabPointerWindow(sw, OFF);
	focusWindow(sw, NIL, NIL, NIL, NIL);
	deleteAttributeObject(g, NAME_Stayup);
	assign(g, status, NAME_inactive);
      }
    }

    succeed;
  } else if ( notNil(g->current) && g->current->displayed == ON )
    return postEvent(ev, (Graphical) g->current, DEFAULT);

  if ( eventGesture(g, ev) )
    succeed;

  if ( g->status == NAME_active && isAEvent(ev, NAME_keyboard) )
  { Name key;

    TRY(updatePopupGesture(g, ev));
    key = characterName(getIdEvent(ev));

    if ( send(g->current, NAME_key, key, EAV) )
    { Any context = g->context;
      PopupObj current = g->current;

      assign(g, context, NIL);
      assign(g, current, NIL);

      send(current, NAME_execute, context, EAV);
      succeed;
    } else
      send(g, NAME_cancel, ev, EAV);
  }

  fail;
}
void ppc::Desktop::registerInput(sf::Event ev) {
	//first check if the mouse clicked in the focused window.
	//if the window clicked in a window that wasnt focused,
	//then focus that window.
	//for any mouse event
	if (ev.type == sf::Event::MouseButtonPressed) {
		for (auto it = windows_.begin(); it != windows_.end(); ++it) {
			sf::FloatRect winBounds = (*it)->getBounds();
			if (winBounds.contains(float(ev.mouseButton.x), float(ev.mouseButton.y))) {
				focusWindow(*it);
                break;
			}
		}
	}

    if (ev.type == sf::Event::MouseMoved) {
        ev.mouseMove.x -= int(focused_->getPosition().x);
        ev.mouseMove.y -= int(focused_->getPosition().y);
    } else if ((ev.type == sf::Event::MouseButtonPressed) || (ev.type == sf::Event::MouseButtonReleased)){
        ev.mouseButton.x -= int(focused_->getPosition().x);
        ev.mouseButton.y -= int(focused_->getPosition().y);
    }
	
	focused_->registerInput(ev);

}
Example #3
0
static status
terminatePopupGesture(PopupGesture g, EventObj ev)
{ Any context = g->context;
  PopupObj current = g->current;

  if ( notNil(current) )
  { postEvent(ev, (Graphical) current, DEFAULT);

    if ( current->displayed == OFF )	/* for stayup */
    { PceWindow sw;

      if ( !(sw = getWindowGraphical(ev->receiver)) )
	sw = ev->window;

      assign(g, context, NIL);
      assign(g, current, NIL);

      grabPointerWindow(sw, OFF);
      send(current, NAME_execute, context, EAV);
      focusWindow(sw, NIL, NIL, NIL, NIL);
    }
  }

  succeed;
}
void ppc::Desktop::destroyWindow(WindowInterface* wi) {
	if (wi == nullptr || wi == desktopWindow_) return;
	for (auto it = windows_.begin(); it != windows_.end(); ++it) {
		if (*it == wi) {
			delete *it;
			windows_.erase(it);
			focusWindow(desktopWindow_);
			return;
		}
	}
}
Example #5
0
// this method makes the widget appear to the toolkit as if it has been
// destructed - all that remains to do is destroy the window and
// recover the memory for the widget (delete widget).
// this method is primarily used from MSWidget::destroy to allow
// callback safe destruction of widgets
void MSWidget::prepareForDestruction(void)
{
  freeze();
  MSWidget *pTopWidget=top();
  if (_window!=0) _server->widgetHashTable()->remove(_window); // no more events 
  if (pTopWidget!=0) pTopWidget->removeFromFocusList(this);
  if (pTopWidget!=0&&pTopWidget->inputFocus()==this) (void)pTopWidget->traverseFocus(0);
  if (focusWindow()==this) _focusWindow=0;
  childDestroyNotify();
  activateCallback(MSWidgetCallback::destroy);
  removeAllCallbacks();
}
void ppc::Desktop::update(sf::Time& deltaTime){
	//No reverse itors needed
	for (size_t i = 0; i < windows_.size(); ) {
		windows_.at(i)->update(deltaTime);
		if (!windows_.at(i)->isOpen()) {
			delete windows_.at(i);
			windows_.erase(windows_.begin() + i);
			focusWindow(desktopWindow_);
		} else {
			++i;
		}

		//dont increment if you delete it
	}
}
Example #7
0
void CoreManager::removeWindow(FreeWindow& window)
{
  Windows::iterator i;

  for (i = windows.begin(); i != windows.end(); i++)
    if (*i == &window)
      break;

  g_assert(i != windows.end());

  windows.erase(i);

  focusWindow();
  redraw();
}
Example #8
0
void CoreManager::addWindow(FreeWindow& window)
{
  Windows::iterator i = findWindow(window);

  if (i != windows.end()) {
    /* Window is already added, addWindow() was called to bring the window to
     * the top. */
    windows.erase(i);
    windows.push_back(&window);
  }
  else {
    windows.push_back(&window);
    window.onScreenResized();
  }

  focusWindow();
  redraw();
}