summaryrefslogtreecommitdiffstats
path: root/client/application.h
diff options
context:
space:
mode:
authorArnon Gilboa <agilboa@redhat.com>2010-10-18 10:03:46 +0200
committerArnon Gilboa <agilboa@redhat.com>2010-10-18 10:03:46 +0200
commit20c550d278ed5833bb25c3bfb9d35d775fdb5291 (patch)
tree53d58c8741487cad7a1532dfbb6ebcd685157ed5 /client/application.h
parente789c8b9aa645d0adedb569be27daab8cdbf376f (diff)
downloadspice-20c550d278ed5833bb25c3bfb9d35d775fdb5291.tar.gz
spice-20c550d278ed5833bb25c3bfb9d35d775fdb5291.tar.xz
spice-20c550d278ed5833bb25c3bfb9d35d775fdb5291.zip
spicec: add foreign menu
Spice foreign menu enables external control of the client menu. The foreignmenu protocol enables an external application to: add a submenu, set its title, clear it, add/modify/remove an item etc. Foreign menu is based on the cross-platform named pipe.
Diffstat (limited to 'client/application.h')
-rw-r--r--client/application.h26
1 files changed, 24 insertions, 2 deletions
diff --git a/client/application.h b/client/application.h
index 36ae86e8..d6355ca6 100644
--- a/client/application.h
+++ b/client/application.h
@@ -26,6 +26,7 @@
#include "menu.h"
#include "hot_keys.h"
#include "process_loop.h"
+#include "foreign_menu.h"
class RedScreen;
class Application;
@@ -138,10 +139,23 @@ typedef std::list<KeyHandler*> KeyHandlersStack;
typedef std::list<GUIBarrier*> GUIBarriers;
#endif // USE_GUI
+enum AppMenuItemType {
+ APP_MENU_ITEM_TYPE_INVALID,
+ APP_MENU_ITEM_TYPE_FOREIGN,
+};
+
+typedef struct AppMenuItem {
+ AppMenuItemType type;
+ int32_t conn_ref;
+ uint32_t ext_id;
+} AppMenuItem;
+
+typedef std::map<int, AppMenuItem> AppMenuItemMap;
+
class Application : public ProcessLoop,
public Platform::EventListener,
public Platform::DisplayModeListener,
- public CommandTarget {
+ public ForeignMenuInterface {
public:
enum State {
@@ -186,6 +200,7 @@ public:
void on_activate_screen(RedScreen* screen);
void on_start_screen_key_interception(RedScreen* screen);
void on_stop_screen_key_interception(RedScreen* screen);
+ virtual void on_start_running();
virtual void on_app_activated();
virtual void on_app_deactivated();
virtual void on_monitors_change();
@@ -200,7 +215,7 @@ public:
void exit_full_screen();
bool toggle_full_screen();
void minimize();
- void set_title(std::wstring& title);
+ void set_title(const std::wstring& title);
void hide();
void show();
void external_show();
@@ -216,6 +231,10 @@ public:
Menu* get_app_menu();
virtual void do_command(int command);
+ int get_foreign_menu_item_id(int32_t opaque_conn_ref, uint32_t msg_id);
+ void clear_menu_items(int32_t opaque_conn_ref);
+ void remove_menu_item(int item_id);
+ void update_menu();
//controller interface begin
bool connect(const std::string& host, int port, int sport, const std::string& password);
@@ -276,6 +295,7 @@ private:
void send_command_hotkey(int command);
void send_hotkey_key_set(const HotkeySet& key_set);
void menu_item_callback(unsigned int item_id);
+ int get_menu_item_id(AppMenuItemType type, int32_t conn_ref, uint32_t ext_id);
int get_hotkeys_commnad();
bool is_key_set_pressed(const HotkeySet& key_set);
void do_on_key_up(RedKey key);
@@ -341,6 +361,8 @@ private:
StickyInfo _sticky_info;
std::vector<int> _canvas_types;
AutoRef<Menu> _app_menu;
+ AutoRef<ForeignMenu> _foreign_menu;
+ AppMenuItemMap _app_menu_items;
#ifdef USE_GUI
std::auto_ptr<GUI> _gui;
AutoRef<GUITimer> _gui_timer;