Class: TopinambourApplication

Inherits:
Gtk::Application
  • Object
show all
Defined in:
lib/application.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeTopinambourApplication

Returns a new instance of TopinambourApplication.



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/application.rb', line 21

def initialize
  @options = {}
  @exit_status = 0

  super("com.github.cedlemo.topinambour", [:non_unique,:handles_command_line])

  signal_connect "startup" do |application|
    ENV["GSETTINGS_SCHEMA_DIR"] = DATA_PATH
    @settings  = Gio::Settings.new("com.github.cedlemo.topinambour")
    initialize_css_provider
    load_css_config

    TopinambourActions.add_actions_to(application)
    load_menu_ui_in(application)
  end

  signal_connect "activate" do |application|

    window = TopinambourWindow.new(application)
    window.present

    if @options[:execute]
      window.add_terminal(@options[:execute])
    else
      window.add_terminal
    end
    window.terminal.grab_focus
  end


  signal_connect "command-line" do |_application, command_line|
    begin
      parse_command_line(command_line.arguments)
    rescue SystemExit => error
      error.status
    rescue OptionParser::InvalidOption => error
      STDERR.puts error.message
      1
    rescue => error
      STDERR.puts "#{error.class}: #{error.message}"
      STDERR.puts error.backtrace
      1
    else
      activate
      @exit_status
    end
  end
end

Instance Attribute Details

#settingsObject

Returns the value of attribute settings.



20
21
22
# File 'lib/application.rb', line 20

def settings
  @settings
end

Instance Method Details

#check_css_file_pathObject



102
103
104
105
106
107
108
109
# File 'lib/application.rb', line 102

def check_css_file_path
  css_file = if File.exist?(@settings["css-file"])
               @settings["css-file"]
             else
               "#{CONFIG_DIR}/#{@settings["css-file"]}"
             end
  File.exist?(css_file) ? css_file : nil
end

#reload_css_configObject



70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# File 'lib/application.rb', line 70

def reload_css_config
  error_popup = nil
  bad_css = nil
  css_file = check_css_file_path
  if css_file
    @provider.signal_connect "parsing-error" do |css_provider, section, error|
      buf = Gtk::TextBuffer.new
      buf.text = @css_content
      start_i = buf.get_iter_at(:line => section.start_line,
                                :index => section.start_position)
      end_i =  buf.get_iter_at(:line => section.start_line + 10,
                               :index => section.end_position)
      bad_css = ""
      buf.get_text(start_i, end_i, true).lines.each_with_index do |line, i|
        bad_css += "#{section.start_line  + 1 + i}  #{line}"
      end
    end

    begin
      load_custom_css(css_file)
    rescue => e
      self.windows.first.exit_overlay_mode
      # TODO : deal with the preferences window which is a transient one
      # that keeps the focus even when the popup shows up.
      error_popup = TopinambourCssErrorPopup.new(self.windows.first)
      error_popup.transient_for = self.windows.first
      error_popup.message = e.message + "\n\n" + bad_css
      error_popup.show_all
    end
  end
end