/* void open (in nsIColorPickerShownCallback aColorPickerShownCallback); */ NS_IMETHODIMP nsColorPicker::Open(nsIColorPickerShownCallback *aColorPickerShownCallback) { // Input color string should be 7 length (i.e. a string representing a valid // simple color) if (mInitialColor.Length() != 7) { return NS_ERROR_FAILURE; } const nsAString& withoutHash = StringTail(mInitialColor, 6); nscolor color; if (!NS_HexToRGB(withoutHash, &color)) { return NS_ERROR_FAILURE; } GdkColor color_gdk = convertToGdkColor(color); if (mCallback) { // It means Open has already been called: this is not allowed NS_WARNING("mCallback is already set. Open called twice?"); return NS_ERROR_FAILURE; } mCallback = aColorPickerShownCallback; nsXPIDLCString title; title.Adopt(ToNewUTF8String(mTitle)); GtkWidget *color_chooser = gtk_color_selection_dialog_new(title); GtkWindow *parent_window = GTK_WINDOW(mParentWidget->GetNativeData(NS_NATIVE_SHELLWIDGET)); if (parent_window) { GtkWindow *window = GTK_WINDOW(color_chooser); gtk_window_set_transient_for(window, parent_window); gtk_window_set_destroy_with_parent(window, TRUE); } gtk_color_selection_set_current_color(WidgetGetColorSelection(color_chooser), &color_gdk); NS_ADDREF_THIS(); g_signal_connect(WidgetGetColorSelection(color_chooser), "color-changed", G_CALLBACK(OnColorChanged), this); g_signal_connect(color_chooser, "response", G_CALLBACK(OnResponse), this); g_signal_connect(color_chooser, "destroy", G_CALLBACK(OnDestroy), this); gtk_widget_show(color_chooser); return NS_OK; }
/* void init (in nsIDOMWindow parent, in AString title, in short mode); */ NS_IMETHODIMP nsColorPicker::Init(nsIDOMWindow *parent, const nsAString& title, const nsAString& initialColor) { // Input color string should be 7 length (i.e. a string representing a valid // simple color) if (initialColor.Length() != 7) { return NS_ERROR_INVALID_ARG; } const nsAString& withoutHash = StringTail(initialColor, 6); nscolor color; if (!NS_HexToRGB(withoutHash, &color)) { return NS_ERROR_INVALID_ARG; } mDefaultColor = convertToGdkColor(color); mParentWidget = mozilla::widget::WidgetUtils::DOMWindowToWidget(parent); mTitle.Assign(title); return NS_OK; }