~midori/midori/win32-tray-balloons

« back to all changes in this revision

Viewing changes to midori/midori-browser.c

  • Committer: RabbitBot
  • Author(s): Christian Dywan
  • Date: 2015-03-24 21:20:48 UTC
  • mfrom: (6906.1.2 midori.trunks)
  • Revision ID: rabbitbot-20150324212048-i4bu7k0wwdq9mhn3
Port bookmark popover from Granite to Gtk.Popover

Show diffs side-by-side

added added

removed removed

Lines of Context:
1062
1062
 
1063
1063
static void
1064
1064
midori_browser_edit_bookmark_title_changed_cb (GtkEntry*      entry,
1065
 
                                               GtkDialog*     dialog)
 
1065
                                               GtkWidget*     button)
1066
1066
{
1067
1067
    const gchar* title = gtk_entry_get_text (entry);
1068
 
    gtk_dialog_set_response_sensitive (dialog, GTK_RESPONSE_ACCEPT,
 
1068
    gtk_widget_set_sensitive (button,
1069
1069
        title != NULL && title[0] != '\0');
1070
1070
}
1071
1071
 
1072
1072
static void
 
1073
midori_browser_edit_bookmark_response_cb (GtkWidget*     dialog,
 
1074
                                          gint           response,
 
1075
                                          MidoriBrowser* browser)
 
1076
{
 
1077
    if (response == GTK_RESPONSE_ACCEPT)
 
1078
    {
 
1079
        KatzeItem* bookmark = g_object_get_data (G_OBJECT (dialog), "bookmark");
 
1080
        GtkWidget* entry_title = g_object_get_data (G_OBJECT (dialog), "entry-title");
 
1081
        katze_item_set_name (bookmark,
 
1082
            gtk_entry_get_text (GTK_ENTRY (entry_title)));
 
1083
        GtkWidget* check_toolbar = g_object_get_data (G_OBJECT (dialog), "check-toolbar");
 
1084
        katze_item_set_meta_integer (bookmark, "toolbar",
 
1085
            gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (check_toolbar)));
 
1086
        GtkWidget* entry_uri = g_object_get_data (G_OBJECT (dialog), "entry-uri");
 
1087
        if (!KATZE_IS_ARRAY (bookmark))
 
1088
            katze_item_set_uri (bookmark,
 
1089
                gtk_entry_get_text (GTK_ENTRY (entry_uri)));
 
1090
 
 
1091
        GtkWidget* combo_folder = g_object_get_data (G_OBJECT (dialog), "combo-folder");
 
1092
        gint64 selected = midori_bookmark_folder_button_get_active (combo_folder);
 
1093
        katze_item_set_meta_integer (bookmark, "parentid", selected);
 
1094
 
 
1095
        gboolean new_bookmark = g_object_get_data (G_OBJECT (dialog), "new-bookmark") != NULL;
 
1096
        if (new_bookmark)
 
1097
            midori_bookmarks_db_add_item (browser->bookmarks, bookmark);
 
1098
        else
 
1099
            midori_bookmarks_db_update_item (browser->bookmarks, bookmark);
 
1100
    }
 
1101
    gtk_widget_destroy (dialog);
 
1102
}
 
1103
 
 
1104
static void
1073
1105
midori_browser_edit_bookmark_add_speed_dial_cb (GtkWidget* button,
1074
1106
                                                KatzeItem* bookmark)
1075
1107
{
1076
1108
    MidoriBrowser* browser = midori_browser_get_for_widget (button);
1077
1109
    midori_browser_add_speed_dial (browser);
 
1110
    #if GTK_CHECK_VERSION (3, 12, 0)
 
1111
    GtkWidget* dialog = gtk_widget_get_ancestor (button, GTK_TYPE_POPOVER);
 
1112
    #else
1078
1113
    GtkWidget* dialog = gtk_widget_get_toplevel (button);
1079
 
    gtk_dialog_response (GTK_DIALOG (dialog), GTK_RESPONSE_DELETE_EVENT);
 
1114
    #endif
 
1115
    midori_browser_edit_bookmark_response_cb (dialog, GTK_RESPONSE_DELETE_EVENT, browser);
1080
1116
}
1081
1117
 
1082
1118
static void
1083
1119
midori_browser_edit_bookmark_create_launcher_cb (GtkWidget* button,
1084
1120
                                                 KatzeItem* bookmark)
1085
1121
{
 
1122
    MidoriBrowser* browser = midori_browser_get_for_widget (button);
1086
1123
    GtkAction* action = g_object_get_data (G_OBJECT (button), "midori-action");
1087
1124
    gtk_action_activate (action);
 
1125
    #if GTK_CHECK_VERSION (3, 12, 0)
 
1126
    GtkWidget* dialog = gtk_widget_get_ancestor (button, GTK_TYPE_POPOVER);
 
1127
    #else
1088
1128
    GtkWidget* dialog = gtk_widget_get_toplevel (button);
1089
 
    gtk_dialog_response (GTK_DIALOG (dialog), GTK_RESPONSE_DELETE_EVENT);
1090
 
}
 
1129
    #endif
 
1130
    midori_browser_edit_bookmark_response_cb (dialog, GTK_RESPONSE_DELETE_EVENT, browser);
 
1131
}
 
1132
 
 
1133
#if GTK_CHECK_VERSION (3, 12, 0)
 
1134
static void
 
1135
midori_browser_edit_bookmark_button_cb (GtkWidget*     button,
 
1136
                                        MidoriBrowser* browser)
 
1137
{
 
1138
    GtkWidget* dialog = gtk_widget_get_ancestor (button, GTK_TYPE_POPOVER);
 
1139
    midori_browser_edit_bookmark_response_cb (dialog, GTK_RESPONSE_ACCEPT, browser);
 
1140
}
 
1141
#endif
1091
1142
 
1092
1143
/* Private function, used by MidoriBookmarks and MidoriHistory */
1093
1144
/* static */ gboolean
1100
1151
    KatzeItem*   bookmark = bookmark_or_parent;
1101
1152
    const gchar* title;
1102
1153
    GtkWidget* dialog;
 
1154
    GtkWidget* accept;
1103
1155
    GtkWidget* content_area;
 
1156
    GtkWidget* actions;
1104
1157
    GtkWidget* view;
1105
1158
    GtkWidget* vbox;
1106
1159
    GtkWidget* hbox;
1116
1169
        title = new_bookmark ? _("New Folder") : _("Edit Folder");
1117
1170
    else
1118
1171
        title = new_bookmark ? _("New Bookmark") : _("Edit Bookmark");
1119
 
    #ifdef HAVE_GRANITE
 
1172
    #if GTK_CHECK_VERSION (3, 12, 0)
1120
1173
    if (proxy != NULL)
1121
1174
    {
1122
 
        /* FIXME: granite: should return GtkWidget* like GTK+ */
1123
 
        dialog = (GtkWidget*)granite_widgets_pop_over_new ();
1124
 
        granite_widgets_pop_over_move_to_widget (
1125
 
            GRANITE_WIDGETS_POP_OVER (dialog), proxy, TRUE);
 
1175
        dialog = gtk_popover_new (proxy);
 
1176
        content_area = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
 
1177
        gtk_container_add (GTK_CONTAINER (dialog), content_area);
 
1178
        actions = gtk_hbox_new (FALSE, 6);
 
1179
        gtk_box_pack_end (GTK_BOX (content_area), actions, TRUE, TRUE, 0);
 
1180
        accept = gtk_button_new_from_stock (new_bookmark ? GTK_STOCK_ADD : GTK_STOCK_SAVE);
 
1181
        gtk_box_pack_end (GTK_BOX (actions), accept, FALSE, FALSE, 0);
 
1182
        g_signal_connect (accept, "clicked", G_CALLBACK (midori_browser_edit_bookmark_button_cb), browser);
1126
1183
    }
1127
1184
    else
1128
1185
    #endif
1129
1186
    {
1130
1187
        dialog = gtk_dialog_new_with_buttons (title, GTK_WINDOW (browser),
1131
1188
            GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_NO_SEPARATOR, NULL, NULL);
 
1189
        content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog));
 
1190
        actions = gtk_hbox_new (FALSE, 0);
 
1191
        gtk_box_pack_end (GTK_BOX (content_area), actions, TRUE, TRUE, 0);
 
1192
        gtk_dialog_add_buttons (GTK_DIALOG (dialog),
 
1193
            GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
 
1194
            new_bookmark ? GTK_STOCK_ADD : GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, NULL);
 
1195
        gtk_window_set_icon_name (GTK_WINDOW (dialog),
 
1196
            new_bookmark ? GTK_STOCK_ADD : GTK_STOCK_REMOVE);
 
1197
        gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT);
 
1198
        g_signal_connect (dialog, "response", G_CALLBACK (midori_browser_edit_bookmark_response_cb), browser);
 
1199
        accept = gtk_dialog_get_widget_for_response (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT);
1132
1200
    }
1133
 
    content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog));
1134
 
    gtk_container_set_border_width (GTK_CONTAINER (dialog), 6);
1135
 
    gtk_dialog_add_buttons (GTK_DIALOG (dialog),
1136
 
        GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
1137
 
        new_bookmark ? GTK_STOCK_ADD : GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, NULL);
 
1201
    gtk_container_set_border_width (GTK_CONTAINER (dialog), 12);
1138
1202
 
1139
1203
    if (!is_folder)
1140
1204
        label = gtk_label_new (_("Type a name for this bookmark, and choose where to keep it."));
1144
1208
    vbox = gtk_vbox_new (FALSE, 6);
1145
1209
    gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 6);
1146
1210
    gtk_box_pack_start (GTK_BOX (content_area), vbox, FALSE, FALSE, 0);
1147
 
    gtk_window_set_icon_name (GTK_WINDOW (dialog),
1148
 
        new_bookmark ? GTK_STOCK_ADD : GTK_STOCK_REMOVE);
1149
1211
 
1150
1212
    if (new_bookmark)
1151
1213
    {
1165
1227
            (!bookmark_or_parent
1166
1228
                ? 0
1167
1229
                : katze_item_get_meta_integer (bookmark_or_parent, "id")));
 
1230
        g_object_set_data (G_OBJECT (dialog), "new-bookmark", bookmark);
1168
1231
    }
 
1232
    g_object_set_data_full (G_OBJECT (dialog), "bookmark", bookmark, (GDestroyNotify)g_object_unref);
1169
1233
 
1170
1234
    entry_title = gtk_entry_new ();
1171
1235
    gtk_entry_set_activates_default (GTK_ENTRY (entry_title), TRUE);
1172
1236
    value = katze_item_get_name (bookmark);
1173
1237
    gtk_entry_set_text (GTK_ENTRY (entry_title), katze_str_non_null (value));
1174
1238
    midori_browser_edit_bookmark_title_changed_cb (GTK_ENTRY (entry_title),
1175
 
                                                   GTK_DIALOG (dialog));
 
1239
                                                   accept);
1176
1240
    g_signal_connect (entry_title, "changed",
1177
 
        G_CALLBACK (midori_browser_edit_bookmark_title_changed_cb), dialog);
 
1241
        G_CALLBACK (midori_browser_edit_bookmark_title_changed_cb), accept);
1178
1242
    gtk_box_pack_start (GTK_BOX (vbox), entry_title, FALSE, FALSE, 0);
 
1243
    g_object_set_data (G_OBJECT (dialog), "entry-title", entry_title);
1179
1244
 
1180
1245
    entry_uri = NULL;
1181
1246
    if (!is_folder)
1182
1247
    {
1183
 
        entry_uri = katze_uri_entry_new (
1184
 
            gtk_dialog_get_widget_for_response (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT));
 
1248
        entry_uri = katze_uri_entry_new (accept);
1185
1249
        gtk_entry_set_activates_default (GTK_ENTRY (entry_uri), TRUE);
1186
1250
        gtk_entry_set_text (GTK_ENTRY (entry_uri), katze_item_get_uri (bookmark));
1187
1251
        gtk_box_pack_start (GTK_BOX (vbox), entry_uri, FALSE, FALSE, 0);
 
1252
        g_object_set_data (G_OBJECT (dialog), "entry-uri", entry_uri);
1188
1253
    }
1189
1254
 
1190
1255
    combo_folder = midori_bookmark_folder_button_new (browser->bookmarks,
1191
1256
        katze_item_get_meta_integer (bookmark, "parentid"));
1192
1257
    gtk_box_pack_start (GTK_BOX (vbox), combo_folder, FALSE, FALSE, 0);
 
1258
    g_object_set_data (G_OBJECT (dialog), "combo-folder", combo_folder);
1193
1259
 
1194
1260
    hbox = gtk_hbox_new (FALSE, 6);
1195
1261
    gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
1197
1263
    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_toolbar),
1198
1264
        katze_item_get_meta_boolean (bookmark, "toolbar"));
1199
1265
    gtk_box_pack_start (GTK_BOX (hbox), check_toolbar, FALSE, FALSE, 0);
 
1266
    g_object_set_data (G_OBJECT (dialog), "check-toolbar", check_toolbar);
1200
1267
 
1201
1268
    if (new_bookmark && !is_folder)
1202
1269
    {
1203
 
        hbox = gtk_hbox_new (FALSE, 6);
1204
 
        gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
1205
 
 
1206
1270
        label = gtk_button_new_with_mnemonic (_("Add to _Speed Dial"));
1207
1271
        g_signal_connect (label, "clicked",
1208
1272
            G_CALLBACK (midori_browser_edit_bookmark_add_speed_dial_cb), bookmark);
1209
 
        gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
 
1273
        gtk_box_pack_start (GTK_BOX (actions), label, FALSE, FALSE, 0);
1210
1274
 
1211
1275
        /* FIXME: There's no API for extending the bookmark dialog */
1212
1276
        GtkAction* action = _action_by_name (browser, "CreateLauncher");
1216
1280
            g_object_set_data (G_OBJECT (label), "midori-action", action);
1217
1281
            g_signal_connect (label, "clicked",
1218
1282
                G_CALLBACK (midori_browser_edit_bookmark_create_launcher_cb), bookmark);
1219
 
            gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
 
1283
            gtk_box_pack_start (GTK_BOX (actions), label, FALSE, FALSE, 0);
1220
1284
        }
1221
1285
    }
1222
1286
 
1223
1287
    gtk_widget_show_all (content_area);
1224
 
 
1225
 
    gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT);
1226
 
    if (midori_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
1227
 
    {
1228
 
        gint64 selected;
1229
 
 
1230
 
        katze_item_set_name (bookmark,
1231
 
            gtk_entry_get_text (GTK_ENTRY (entry_title)));
1232
 
        katze_item_set_meta_integer (bookmark, "toolbar",
1233
 
            gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (check_toolbar)));
1234
 
        if (!is_folder)
1235
 
            katze_item_set_uri (bookmark,
1236
 
                gtk_entry_get_text (GTK_ENTRY (entry_uri)));
1237
 
 
1238
 
        selected = midori_bookmark_folder_button_get_active (combo_folder);
1239
 
        katze_item_set_meta_integer (bookmark, "parentid", selected);
1240
 
 
1241
 
        if (new_bookmark)
1242
 
            midori_bookmarks_db_add_item (browser->bookmarks, bookmark);
1243
 
        else
1244
 
            midori_bookmarks_db_update_item (browser->bookmarks, bookmark);
1245
 
 
1246
 
        return_status = TRUE;
1247
 
    }
1248
 
 
1249
 
    gtk_widget_destroy (dialog);
 
1288
    gtk_widget_show (dialog);
 
1289
 
1250
1290
    return return_status;
1251
1291
}
1252
1292