def double_click_test(self, widget, event):
     '''double clicked callback, to test the double-click time'''
     interval_time = event.time - widget.get_data("last_press_time")
     widget.set_data("last_press_time", event.time)
     if interval_time <= settings.mouse_get_double_click():
         widget.set_data("last_press_time", 0)
         widget.set_data("has_double_clicked", not widget.get_data("has_double_clicked"))
         widget.queue_draw()
    def __adjust_widget(self):
        ''' adjust widget '''
        MID_SPACING = 10
        RIGHT_BOX_WIDTH = TIP_BOX_WIDTH - 20
        MAIN_AREA_WIDTH = 480
        LABEL_WIDTH = 180
        OPTION_LEFT_PADDING = WIDGET_SPACING + 16
        TABLE_ROW_SPACING = 15
        self.container_widgets["main_vbox"].pack_start(self.alignment_widgets["main_hbox"])
        self.container_widgets["main_vbox"].pack_start(self.container_widgets["statusbar"], False, False)
        self.container_widgets["statusbar"].set_buttons([self.button_widgets["set_to_default"]])
        self.alignment_widgets["main_hbox"].add(self.container_widgets["main_hbox"])
        self.alignment_widgets["main_hbox"].set(0.0, 0.0, 1.0, 1.0)
        self.alignment_widgets["main_hbox"].set_padding(
            TEXT_WINDOW_TOP_PADDING, 0, 0, 0)

        self.container_widgets["main_hbox"].set_spacing(MID_SPACING)
        self.container_widgets["main_hbox"].pack_start(self.alignment_widgets["left"])
        self.container_widgets["main_hbox"].pack_start(self.alignment_widgets["right"], False, False)
        self.alignment_widgets["left"].add(self.container_widgets["left_vbox"])
        self.alignment_widgets["right"].add(self.container_widgets["right_vbox"])
        self.container_widgets["right_vbox"].set_size_request(RIGHT_BOX_WIDTH, -1)
        # set left padding
        self.alignment_widgets["left"].set(0.0, 0.5, 1.0, 1.0)
        # set right padding
        self.alignment_widgets["right"].set(0.0, 0.0, 1.0, 1.0)
        self.alignment_widgets["right"].set_padding(0, 0, 0, 60)

        self.container_widgets["left_vbox"].set_spacing(BETWEEN_SPACING)
        self.container_widgets["left_vbox"].pack_start(
            self.container_widgets["custom_main_vbox"], False, False)
        self.container_widgets["left_vbox"].pack_start(
            self.container_widgets["pointer_speed_main_vbox"], False, False)
        self.container_widgets["left_vbox"].pack_start(
            self.container_widgets["double_click_main_vbox"], False, False)
        # set option label width
        label_widgets = self.label_widgets
        label_width = max(label_widgets["acceleration"].size_request()[0],
                          label_widgets["sensitivity"].size_request()[0],
                          label_widgets["click_rate"].size_request()[0]) + 2
        #label_widgets["acceleration"].set_size_request(label_width, WIDGET_HEIGHT)
        #label_widgets["sensitivity"].set_size_request(label_width, WIDGET_HEIGHT)
        #label_widgets["click_rate"].set_size_request(label_width, WIDGET_HEIGHT)
        # custom
        self.alignment_widgets["custom_label"].add(self.container_widgets["custom_label_hbox"])
        self.alignment_widgets["custom_button"].add(self.container_widgets["custom_button_hbox"])
        # alignment set
        self.alignment_widgets["custom_label"].set(0.0, 0.5, 1.0, 0.0)
        self.alignment_widgets["custom_button"].set(0.0, 0.5, 0.0, 0.0)
        #self.alignment_widgets["custom_button"].set_padding(0, 0, TEXT_WINDOW_LEFT_PADDING+OPTION_LEFT_PADDING-10, 0)
        self.alignment_widgets["custom_label"].set_padding(0, 0, TEXT_WINDOW_LEFT_PADDING, 0)
        #self.alignment_widgets["custom_label"].set_size_request(-1, CONTAINNER_HEIGHT)
        self.alignment_widgets["custom_button"].set_size_request(-1, CONTAINNER_HEIGHT)
        self.container_widgets["custom_main_vbox"].pack_start(
            self.alignment_widgets["custom_label"], False, False)
        self.container_widgets["custom_main_vbox"].pack_start(
            self.__setup_separator(), False, False)
        self.container_widgets["custom_main_vbox"].pack_start(
            self.alignment_widgets["custom_button"])
        # tips label
        self.container_widgets["custom_label_hbox"].set_spacing(WIDGET_SPACING)
        self.container_widgets["custom_label_hbox"].pack_start(
            self.image_widgets["custom"], False, False)
        self.container_widgets["custom_label_hbox"].pack_start(
            self.label_widgets["custom"], False, False)
        # radio button set
        if settings.mouse_get_left_handed():
            self.button_widgets["left_hand_radio"].set_active(True)
            self.image_widgets["custom"].image_dpixbuf = app_theme.get_pixbuf("%s/mouse_r.png" % MODULE_NAME)
        else:
            self.button_widgets["right_hand_radio"].set_active(True)
            self.image_widgets["custom"].image_dpixbuf = app_theme.get_pixbuf("%s/mouse_l.png" % MODULE_NAME)
        #self.container_widgets["custom_button_hbox"].set_spacing(WIDGET_SPACING)
        self.container_widgets["custom_button_hbox0"] = gtk.HBox(False)
        self.container_widgets["custom_button_hbox0"].set_spacing(WIDGET_SPACING)
        self.container_widgets["custom_button_hbox0"].pack_start(
            self.button_widgets["right_hand_radio"], False, False)
        self.container_widgets["custom_button_hbox0"].pack_start(
            self.button_widgets["left_hand_radio"], False, False)
        button_align = self.__make_align(self.container_widgets["custom_button_hbox0"], xalign=0.0)
        #button_align.set_size_request(HSCALEBAR_WIDTH+WIDGET_SPACING+label_width, CONTAINNER_HEIGHT)
        self.container_widgets["custom_button_hbox"].pack_start(self.__make_align(width=STANDARD_LINE-5), False, False)
        self.container_widgets["custom_button_hbox"].pack_start(button_align)

        # pointer speed
        self.alignment_widgets["pointer_speed_label"].add(self.container_widgets["pointer_speed_label_hbox"])
        self.alignment_widgets["pointer_speed_table"].add(self.container_widgets["pointer_speed_table"])
        # alignment set
        self.alignment_widgets["pointer_speed_label"].set(0.0, 0.5, 1.0, 0.0)
        self.alignment_widgets["pointer_speed_table"].set(0.0, 0.5, 1.0, 1.0)
        #self.alignment_widgets["pointer_speed_table"].set_padding(0, 0, OPTION_LEFT_PADDING+TEXT_WINDOW_LEFT_PADDING, 0)
        #self.alignment_widgets["pointer_speed_label"].set_size_request(-1, CONTAINNER_HEIGHT)
        self.alignment_widgets["pointer_speed_label"].set_padding(0, 0, TEXT_WINDOW_LEFT_PADDING, 0)
        self.container_widgets["pointer_speed_main_vbox"].pack_start(
            self.alignment_widgets["pointer_speed_label"], False, False)
        self.container_widgets["pointer_speed_main_vbox"].pack_start(
            self.__setup_separator(), False, False)
        self.container_widgets["pointer_speed_main_vbox"].pack_start(
            self.alignment_widgets["pointer_speed_table"])
        # tips lable
        self.container_widgets["pointer_speed_label_hbox"].set_spacing(WIDGET_SPACING)
        self.container_widgets["pointer_speed_label_hbox"].pack_start(
            self.image_widgets["speed"], False, False)
        self.container_widgets["pointer_speed_label_hbox"].pack_start(
            self.label_widgets["pointer_speed"], False, False)
        # motion acceleration
        self.scale_widgets["pointer_speed_accel"].set_value(settings.mouse_get_motion_acceleration())
        self.scale_widgets["pointer_speed_accel"].add_mark(self.adjust_widgets["pointer_speed_accel"].get_lower(), gtk.POS_BOTTOM, _("Slow"))
        self.scale_widgets["pointer_speed_accel"].add_mark(self.adjust_widgets["pointer_speed_accel"].get_upper(), gtk.POS_BOTTOM, _("Fast"))
        self.scale_widgets["pointer_speed_accel"].set_size_request(HSCALEBAR_WIDTH, -1)
        # table attach
        self.container_widgets["pointer_speed_table"].set_size_request(MAIN_AREA_WIDTH, -1)
        self.container_widgets["pointer_speed_table"].set_col_spacings(WIDGET_SPACING)
        #self.container_widgets["pointer_speed_table"].set_row_spacing(0, TABLE_ROW_SPACING)
        acceleration_align = self.__make_align(self.label_widgets["acceleration"], xalign=1.0)
        acceleration_align.set_size_request(STANDARD_LINE, CONTAINNER_HEIGHT)
        self.container_widgets["pointer_speed_table"].attach(
            acceleration_align, 0, 1, 0, 1, 4)
        self.container_widgets["pointer_speed_table"].attach(
            self.__make_align(self.scale_widgets["pointer_speed_accel"], yalign=0.0, yscale=1.0, height=43), 1, 3, 0, 1, 4)
        # motion threshold
        self.scale_widgets["pointer_speed_sensitiv"].set_value(settings.mouse_get_motion_threshold())
        self.scale_widgets["pointer_speed_sensitiv"].add_mark(self.adjust_widgets["pointer_speed_sensitiv"].get_lower(), gtk.POS_BOTTOM, _("Low"))
        self.scale_widgets["pointer_speed_sensitiv"].add_mark(self.adjust_widgets["pointer_speed_sensitiv"].get_upper(), gtk.POS_BOTTOM, _("High"))
        self.scale_widgets["pointer_speed_sensitiv"].set_size_request(HSCALEBAR_WIDTH, -1)
        # table attach
        sensitivity_align = self.__make_align(self.label_widgets["sensitivity"], xalign=1.0)
        sensitivity_align.set_size_request(STANDARD_LINE, CONTAINNER_HEIGHT)
        self.container_widgets["pointer_speed_table"].attach(
            sensitivity_align, 0, 1, 1, 2, 4)
        self.container_widgets["pointer_speed_table"].attach(
            self.__make_align(self.scale_widgets["pointer_speed_sensitiv"], yalign=0.0, yscale=1.0, height=43), 1, 3, 1, 2, 4)

        # double click
        self.alignment_widgets["double_click_label"].add(self.container_widgets["double_click_label_hbox"])
        self.alignment_widgets["double_click_table"].add(self.container_widgets["double_click_table"])
        self.alignment_widgets["double_click_label"].set(0.0, 0.5, 1.0, 0.0)
        self.alignment_widgets["double_click_table"].set(0.0, 0.5, 1.0, 1.0)
        #self.alignment_widgets["double_click_label"].set_size_request(-1, CONTAINNER_HEIGHT)
        self.alignment_widgets["double_click_label"].set_padding(0, 0, TEXT_WINDOW_LEFT_PADDING, 0)
        self.container_widgets["double_click_main_vbox"].pack_start(
            self.alignment_widgets["double_click_label"], False, False)
        self.container_widgets["double_click_main_vbox"].pack_start(
            self.__setup_separator(), False, False)
        self.container_widgets["double_click_main_vbox"].pack_start(
            self.alignment_widgets["double_click_table"])
        # tips lable
        self.container_widgets["double_click_label_hbox"].set_spacing(WIDGET_SPACING)
        self.container_widgets["double_click_label_hbox"].pack_start(
            self.image_widgets["double"], False, False)
        self.container_widgets["double_click_label_hbox"].pack_start(
            self.label_widgets["double_click"], False, False)
        # double click rate
        self.scale_widgets["double_click_rate"].set_value(settings.mouse_get_double_click())
        self.scale_widgets["double_click_rate"].add_mark(self.adjust_widgets["double_click_rate"].get_lower(), gtk.POS_BOTTOM, _("Slow"))
        self.scale_widgets["double_click_rate"].add_mark(self.adjust_widgets["double_click_rate"].get_upper(), gtk.POS_BOTTOM, _("Fast"))
        self.scale_widgets["double_click_rate"].set_size_request(HSCALEBAR_WIDTH, -1)
        # table attach
        self.container_widgets["double_click_table"].set_size_request(MAIN_AREA_WIDTH, -1)
        self.container_widgets["double_click_table"].set_col_spacings(WIDGET_SPACING)
        click_rate_align = self.__make_align(self.label_widgets["click_rate"], xalign=1.0)
        click_rate_align.set_size_request(STANDARD_LINE, CONTAINNER_HEIGHT)
        self.container_widgets["double_click_table"].attach(
            click_rate_align, 0, 1, 0, 1, 4)
        self.container_widgets["double_click_table"].attach(
            self.__make_align(self.scale_widgets["double_click_rate"], xalign=0.0, yalign=0.0, yscale=1.0, height=43), 1, 3, 0, 1, 4)
        self.container_widgets["double_click_table"].attach(
            self.__make_align(self.label_widgets["double_test"], xalign=0.0), 1, 3, 1, 2, 4)
        self.container_widgets["double_click_table"].attach(
            self.__make_align(self.button_widgets["double_test"], xalign=0.0, xscale=1.0, height=-1), 3, 4, 0, 2)
        self.button_widgets["double_test"].set_size_request(
            self.image_widgets["double_test_1"].get_pixbuf().get_width(),
            self.image_widgets["double_test_1"].get_pixbuf().get_height())

        # relevant setting
        self.container_widgets["right_vbox"].pack_start(
            self.__make_align(self.label_widgets["relevant"], height=-1), False, False)
        self.container_widgets["right_vbox"].pack_start(
            self.alignment_widgets["keyboard_setting"], False, False)
        self.container_widgets["right_vbox"].pack_start(
            self.alignment_widgets["touchpad_setting"], False, False)
        self.alignment_widgets["keyboard_setting"].add(self.button_widgets["keyboard_setting"])
        self.alignment_widgets["touchpad_setting"].add(self.button_widgets["touchpad_setting"])
        self.alignment_widgets["keyboard_setting"].set(0.0, 0.5, 0.0, 0.0)
        self.alignment_widgets["touchpad_setting"].set(0.0, 0.5, 0.0, 0.0)
        self.alignment_widgets["keyboard_setting"].set_padding(15, 15, 0, 0)
        self.alignment_widgets["keyboard_setting"].set_size_request(-1, -1)
        self.alignment_widgets["touchpad_setting"].set_size_request(-1, -1)