Allow users to disable clippy the flash movie if they don't like it
I've found that although clippy is useful, it slows down the page
rendering as the Flash plugin has to initialize on the host page
every time we change the text we want to permit copying. It also
doesn't work on every operating where flash is supported.
Since CopyableLabel already supports some JavaScript based support
we can just give the user a preference to turn off the flash UI,
and fallback on the pure JavaScript based code.
Signed-off-by: Shawn O. Pearce <sop@google.com>
diff --git a/src/main/java/com/google/gerrit/client/Gerrit.java b/src/main/java/com/google/gerrit/client/Gerrit.java
index aa067d6..1e20f65 100644
--- a/src/main/java/com/google/gerrit/client/Gerrit.java
+++ b/src/main/java/com/google/gerrit/client/Gerrit.java
@@ -43,6 +43,7 @@
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.TabPanel;
import com.google.gwt.user.client.ui.HTMLTable.CellFormatter;
+import com.google.gwtexpui.clippy.client.CopyableLabel;
import com.google.gwtexpui.globalkey.client.GlobalKey;
import com.google.gwtexpui.globalkey.client.KeyCommand;
import com.google.gwtexpui.globalkey.client.KeyCommandFilter;
@@ -407,6 +408,7 @@
public static void applyUserPreferences() {
final AccountGeneralPreferences p = myAccount.getGeneralPreferences();
+ CopyableLabel.setFlashEnabled(p.isUseFlashClipboard());
if (siteHeader != null) {
siteHeader.setVisible(p.isShowSiteHeader());
}
diff --git a/src/main/java/com/google/gerrit/client/account/AccountConstants.java b/src/main/java/com/google/gerrit/client/account/AccountConstants.java
index 4f2789f..efc4d57 100644
--- a/src/main/java/com/google/gerrit/client/account/AccountConstants.java
+++ b/src/main/java/com/google/gerrit/client/account/AccountConstants.java
@@ -28,6 +28,7 @@
String defaultContextFieldLabel();
String contextWholeFile();
String showSiteHeader();
+ String useFlashClipboard();
String buttonSaveChanges();
String tabPreferences();
diff --git a/src/main/java/com/google/gerrit/client/account/AccountConstants.properties b/src/main/java/com/google/gerrit/client/account/AccountConstants.properties
index 46d124b..0953877 100644
--- a/src/main/java/com/google/gerrit/client/account/AccountConstants.properties
+++ b/src/main/java/com/google/gerrit/client/account/AccountConstants.properties
@@ -6,6 +6,7 @@
registeredOn = Registered
accountId = Account ID
showSiteHeader = Show Site Header
+useFlashClipboard = Use Flash Clipboard Widget
defaultContextFieldLabel = Default Context:
contextWholeFile = Whole File
buttonSaveChanges = Save Changes
diff --git a/src/main/java/com/google/gerrit/client/account/PreferencePanel.java b/src/main/java/com/google/gerrit/client/account/PreferencePanel.java
index 26ab4fc..5afb580 100644
--- a/src/main/java/com/google/gerrit/client/account/PreferencePanel.java
+++ b/src/main/java/com/google/gerrit/client/account/PreferencePanel.java
@@ -33,6 +33,7 @@
class PreferencePanel extends Composite {
private CheckBox showSiteHeader;
+ private CheckBox useFlashClipboard;
private ListBox defaultContext;
private Button save;
@@ -49,6 +50,9 @@
showSiteHeader = new CheckBox(Util.C.showSiteHeader());
showSiteHeader.addClickHandler(onClickSave);
+ useFlashClipboard = new CheckBox(Util.C.useFlashClipboard());
+ useFlashClipboard.addClickHandler(onClickSave);
+
defaultContext = new ListBox();
for (final short v : AccountGeneralPreferences.CONTEXT_CHOICES) {
final String label;
@@ -74,13 +78,20 @@
labelIdx = 0;
fieldIdx = 1;
}
- final Grid formGrid = new Grid(2, 2);
+ final Grid formGrid = new Grid(3, 2);
- formGrid.setText(0, labelIdx, "");
- formGrid.setWidget(0, fieldIdx, showSiteHeader);
+ int row = 0;
+ formGrid.setText(row, labelIdx, "");
+ formGrid.setWidget(row, fieldIdx, showSiteHeader);
+ row++;
- formGrid.setText(1, labelIdx, Util.C.defaultContextFieldLabel());
- formGrid.setWidget(1, fieldIdx, defaultContext);
+ formGrid.setText(row, labelIdx, "");
+ formGrid.setWidget(row, fieldIdx, useFlashClipboard);
+ row++;
+
+ formGrid.setText(row, labelIdx, Util.C.defaultContextFieldLabel());
+ formGrid.setWidget(row, fieldIdx, defaultContext);
+ row++;
body.add(formGrid);
@@ -110,11 +121,13 @@
private void enable(final boolean on) {
showSiteHeader.setEnabled(on);
+ useFlashClipboard.setEnabled(on);
defaultContext.setEnabled(on);
}
private void display(final AccountGeneralPreferences p) {
showSiteHeader.setValue(p.isShowSiteHeader());
+ useFlashClipboard.setValue(p.isUseFlashClipboard());
displayDefaultContext(p.getDefaultContext());
}
@@ -139,6 +152,7 @@
private void doSave() {
final AccountGeneralPreferences p = new AccountGeneralPreferences();
p.setShowSiteHeader(showSiteHeader.getValue());
+ p.setUseFlashClipboard(useFlashClipboard.getValue());
p.setDefaultContext(getDefaultContext());
enable(false);
diff --git a/src/main/java/com/google/gerrit/client/reviewdb/AccountGeneralPreferences.java b/src/main/java/com/google/gerrit/client/reviewdb/AccountGeneralPreferences.java
index f9ab9d9..57624e8 100644
--- a/src/main/java/com/google/gerrit/client/reviewdb/AccountGeneralPreferences.java
+++ b/src/main/java/com/google/gerrit/client/reviewdb/AccountGeneralPreferences.java
@@ -36,6 +36,10 @@
@Column
protected boolean showSiteHeader;
+ /** Should the Flash helper movie be used to copy text to the clipboard? */
+ @Column
+ protected boolean useFlashClipboard;
+
public AccountGeneralPreferences() {
}
@@ -57,8 +61,17 @@
showSiteHeader = b;
}
+ public boolean isUseFlashClipboard() {
+ return useFlashClipboard;
+ }
+
+ public void setUseFlashClipboard(final boolean b) {
+ useFlashClipboard = b;
+ }
+
public void resetToDefaults() {
defaultContext = DEFAULT_CONTEXT;
showSiteHeader = true;
+ useFlashClipboard = true;
}
}
diff --git a/src/main/java/com/google/gerrit/client/reviewdb/ReviewDb.java b/src/main/java/com/google/gerrit/client/reviewdb/ReviewDb.java
index 21622ad..69f1377 100644
--- a/src/main/java/com/google/gerrit/client/reviewdb/ReviewDb.java
+++ b/src/main/java/com/google/gerrit/client/reviewdb/ReviewDb.java
@@ -21,7 +21,7 @@
/** The review service database schema. */
public interface ReviewDb extends Schema {
- public static final int VERSION = 10;
+ public static final int VERSION = 11;
@Relation
SchemaVersionAccess schemaVersion();
diff --git a/src/main/webapp/WEB-INF/sql/upgrade010_011.sql b/src/main/webapp/WEB-INF/sql/upgrade010_011.sql
new file mode 100644
index 0000000..ced71a1
--- /dev/null
+++ b/src/main/webapp/WEB-INF/sql/upgrade010_011.sql
@@ -0,0 +1,9 @@
+-- Upgrade: schema_version 10 to 11
+--
+
+ALTER TABLE accounts ADD use_flash_clipboard CHAR(1);
+UPDATE accounts SET use_flash_clipboard = 'Y';
+ALTER TABLE accounts ALTER COLUMN use_flash_clipboard SET DEFAULT 'N';
+ALTER TABLE accounts ALTER COLUMN use_flash_clipboard SET NOT NULL;
+
+UPDATE schema_version SET version_nbr = 11;