From 18793677a519a5e37a857e26dabd7feb31df5cd8 Mon Sep 17 00:00:00 2001 From: Enrico Zini Date: Mon, 27 Jul 2009 19:20:23 +0200 Subject: [PATCH] Added app_wm --- src/app_wm.vala | 294 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 294 insertions(+) create mode 100644 src/app_wm.vala diff --git a/src/app_wm.vala b/src/app_wm.vala new file mode 100644 index 0000000..957d856 --- /dev/null +++ b/src/app_wm.vala @@ -0,0 +1,294 @@ +/* + * app_wm - zavai window management functions + * + * Copyright (C) 2009 Enrico Zini + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +using GLib; + +namespace zavai { +namespace ui { +namespace wm { + +/* +class GPSOn(gtk.ToggleAction): + states = [_("GPS always on"), _("GPS on when needed")] + + def __init__(self, registry, **kw): + self.state = 0 + super(GPSOn, self).__init__("menu.main.gps.alwayson", self.states[self.state], None, None) + + self.registry = registry + self.set_active(False) + + self.connect("toggled", self.on_toggle) + + def on_toggle(self, *args): + self.state = (self.state + 1) % len(self.states) + self.set_property("label", self.states[self.state]) + if self.get_active(): + self.start() + else: + self.stop() + + def start(self): + self.registry.resource("gps").connect("gps", self) + + def stop(self): + self.registry.resource("gps").disconnect("gps", self) + +class GPXTracer(gtk.ToggleAction): + states = [_("Start GPX trace"), _("Stop GPX trace")] + + def __init__(self, registry, **kw): + self.state = 0 + super(GPXTracer, self).__init__("menu.main.gps.gpx", self.states[self.state], None, None) + + self.registry = registry + self.set_active(False) + + self.connect("toggled", self.on_toggle) + + def on_toggle(self, *args): + self.state = (self.state + 1) % len(self.states) + self.set_property("label", self.states[self.state]) + if self.get_active(): + self.start() + else: + self.stop() + + def start(self): + zavai.info("GPX trace started") + self.registry.resource("gpx").connect("gpx", self) + + def stop(self): + zavai.info("GPX trace ended") + self.registry.resource("gpx").disconnect("gpx", self) +*/ + +/* +class GPXAudioTracer(gtk.ToggleAction): + states = [_("Start GPX and audio trace"), _("Stop GPX and audio trace")] + + def __init__(self, registry, **kw): + self.state = 0 + super(GPXAudioTracer, self).__init__("menu.main.gps.gpxaudio", self.states[self.state], None, None) + + self.registry = registry + self.recorder = zavai.Recorder(registry) + self.set_active(False) + + self.connect("toggled", self.on_toggle) + + def shutdown(self): + self.recorder.stop() + super(GPXAudioTracer, self).shutdown() + + def on_toggle(self, *args): + self.state = (self.state + 1) % len(self.states) + self.set_property("label", self.states[self.state]) + if self.get_active(): + self.start() + else: + self.stop() + + def start(self): + zavai.info("GPX trace started") + gpx = self.registry.resource("gpx") + gpx.connect("gpx", self) + gpx.add_activity_monitor(self.on_gpx_activity_changed) + + def stop(self): + zavai.info("GPX trace ended") + gpx = self.registry.resource("gpx") + gpx.disconnect("gpx", self) + self.recorder.stop() + gpx.del_activity_monitor(self.on_gpx_activity_changed) + + def on_gpx_activity_changed(self, gpx, state): + if state: + self.recorder.start(gpx.basename + ".wav") + else: + self.recorder.stop() +*/ + +static void print_window_state(Gtk.Window w) +{ + Gdk.WindowState state = w.window.get_state(); + int istate = (int) state; + bool is_icon = (state & Gdk.WindowState.ICONIFIED) != 0; + bool is_visible = w.visible; + bool is_focus = w.is_focus; + bool has_focus = ((Gtk.Widget)w).has_focus; + bool is_active = w.is_active; + bool is_toplevel = w.is_toplevel(); + bool is_tfocus = w.has_toplevel_focus; + + stderr.printf("istate: %d; is_icon: %s; is_visible: %s; is_focus: %s; has_focus: %s, is_active: %s; is_toplevel: %s; is_tfocus: %s\n", + istate, + is_icon ? "true" : "false", + is_visible ? "true" : "false", + is_focus ? "true" : "false", + has_focus ? "true" : "false", + is_active ? "true" : "false", + is_toplevel ? "true" : "false", + is_tfocus ? "true" : "false" + ); +} + +public class RaiseIcon : Gtk.StatusIcon +{ + /* + public bool on_focus_in (Gdk.EventFocus event) + { + stderr.printf("FOCUS IN %c %d\n", event.send_event, event.in); + //update_icon(); + return true; + } + public bool on_focus_out (Gdk.EventFocus event) + { + stderr.printf("FOCUS OUT %c %d\n", event.send_event, event.in); + //update_icon(); + return true; + } + */ + + public RaiseIcon() + { + activate += on_activate; + zavai.app.visibility_changed += on_visibility_changed; + /* + zavai.app.focus_in_event += on_focus_in; + zavai.app.focus_out_event += on_focus_out; + */ + + update_icon(); + } + + private void on_visibility_changed(bool visible) + { + update_icon(); + } + + private void on_activate() + { + zavai.app.toggle_visibility(); + update_icon(); + + } + + protected void update_icon() + { + string name = zavai.config.icondir + "/"; + if (!zavai.app.visibility) + name += "kbd_on.png"; + else + name += "kbd_off.png"; + set_from_file(name); + } +} + +public class Test : BigButton +{ + public Test() + { + set_label("Window state"); + clicked += on_clicked; + } + + protected void on_clicked() + { + print_window_state(zavai.app); + } +} + + +/* +public class Waypoint : BigButton +{ + public Waypoint() + { + set_label("Take waypoint"); + zavai.gps.gpx.tracking_changed += on_gpx_tracking_changed; + clicked += on_clicked; + set_sensitive(zavai.gps.gpx.tracking); + } + + protected void on_gpx_tracking_changed(zavai.gps.GPX gpx, bool new_state) + { +stderr.printf("Toggled %d\n", (int)new_state); + set_sensitive(new_state); + } + + protected void on_clicked() + { +stderr.printf("Activate\n"); + zavai.gps.gpx.waypoint(); + } +} +*/ + +/* +public class GPSRequestLink : Gtk.ToggleButton +{ + public GPSRequestLink() + { + // GPS status icon + status_icon = new Gtk.StatusIcon(); + status_icon.set_visible(true); + status_icon.activate += on_status_activate; + update_icon(); + } + + private void on_fix_status_changed(dynamic DBus.Object pos, int fix_status) + { + this.fix_status = fix_status; + update_icon(); + } + + private void on_toggled(Gtk.Button src) + { + Service s = zavai.registry.gets(service_name); + if (get_active()) + s.request("servicerequestlink"); + else + s.release("servicerequestlink"); + set_label(get_active() ? label_stop : label_start); + update_icon(); + } + + private void on_status_activate() + { + set_active(!get_active()); + } +} +*/ + +RaiseIcon raise_icon; + +public void init() +{ + raise_icon = new RaiseIcon(); + raise_icon.set_visible(true); + + var menu_test = new Test(); + zavai.registry.getmenu("menu.main").add_widget(menu_test); +} + +} +} +} -- 2.30.2