using Gtk; namespace NeoLayoutViewer{ public class NeoLayoutViewerApp: Gtk.Application { public NeoWindow neo_win = null; #if tray public AppStatusIcon neo_tray; //for gnome2.x, kde(?) #endif #if indicator public NeoIndicator neo_indicator; //for gnome3.x #endif #if _NO_WIN public KeybindingManager manager; #endif public int start_layer = 0; // > 0: keybord events do not change displayed layer public ConfigManager configm; public NeoLayoutViewerApp(ConfigManager configm) { Object(application_id: "org.gnome.neo_layout_viewer", flags: ApplicationFlags.HANDLES_OPEN ); this.configm = configm; } protected override void activate () { if (this.neo_win == null ) { // Create the window of this application and show it this.neo_win = new NeoWindow (this); #if tray this.neo_tray = new AppStatusIcon(neo_win); #endif #if indicator this.neo_indicator = new NeoIndicator(neo_win); #endif #if _NO_WIN manager = new KeybindingManager(this.neo_win); manager.bind(configm.getConfig().get("show_shortcut"), ()=>{this.neo_win.toggle();}); manager.bind(configm.getConfig().get("move_shortcut"), ()=>{this.neo_win.numkeypad_move(0);}); #endif this.add_window(this.neo_win); }else{ // reached if app.activate() called by remote instance this.neo_win.toggle(); } } public override void open (File[] files, string hint) { // Threat non-option argument(s) as layer to show at startup. // Note: This signal is not called in remote-case. foreach (File file in files) { var slayer = file.get_basename(); this.start_layer = int.parse(slayer); break; } this.activate(); // init neo_win this.neo_win.show(); } } }